0
手頭上有以下輸入數據[-5, 10,2], [-2, -3,3], [-4, -9,1], [7, 11,-3], [12, 6,-1], [13, 4,5]
,並且想要使用PCA將3D陣列轉換爲1D陣列。我輸入下面的代碼:主分量分析使用Python將3d陣列轉換爲1d陣列
import numpy as np
input = np.array([[-5, 10,2], [-2, -3,3], [-4, -9,1], [7, 11,-3], [12, 6,-1], [13, 4,5]])
mean_x = np.mean(input[0,:])
mean_y = np.mean(input[1,:])
mean_z = np.mean(input[2,:])
scaled_vector = np.array([input[0,:]-[mean_x],input[1,:]-[mean_y],input[2,:]-[mean_z]])
data=np.vstack((scaled_vector)).T
scatter_matrix=np.dot(np.transpose(data),data)
eig_val, eig_vec = np.linalg.eig(scatter_matrix)
eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(len(eig_val))]
eig_pairs.sort(reverse=True)
feature=eig_pairs[0][1][2]
new_data_reduced=np.dot(data,np.transpose(feature))
print(new_data_reduced)
我也用sklearn.decomposition import PCA
做覈查。
import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-5, 10,2], [-2, -3,3], [-4, -9,1], [7, 11,-3], [12, 6,-1], [13, 4,5]])
pca = PCA(n_components=1)
pca.componrnt = True
newX = pca.fit_transform(X)
print (newX)
結果從sklearn
是
[[ 1.81922968]
[ 8.34080915]
[ 13.64517202]
[ -8.17114609]
[ -8.37254693]
[ -7.26151783]]
我不知道這是否會導致正確與否。但是,當我使用自己的PCA時,我發現結果是非常不同的。所以,我該如何糾正?