【发布时间】:2021-05-08 12:55:57
【问题描述】:
我正在尝试从头开始实施 PCA。以下是代码:
sc = StandardScaler() #standardization
X_new = sc.fit_transform(X)
Z = np.divide(np.dot(X_new.T,X_new),X_new.shape[0]) #covariance matrix
eig_values, eig_vectors = np.linalg.eig(Z) #eigen vectors calculation
eigval_sorted = np.sort(eig_values)[::-1]
ev_index =np.argsort(eigval_sorted)[::-1]
pc = eig_vectors[:,ev_index] #eigen vectors sorts on the basis of eigen values
W = pc[:,0:2] #extracting 2 components
print(W)
并获得以下组件:
[[ 0.52237162 -0.37231836]
[-0.26335492 -0.92555649]
[ 0.58125401 -0.02109478]
[ 0.56561105 -0.06541577]]
当我使用 sklearn 的 PCA 时,我得到以下两个组件:
array([[ 0.52237162, -0.26335492, 0.58125401, 0.56561105],
[ 0.37231836, 0.92555649, 0.02109478, 0.06541577]])
投影到新的特征空间给出以下不同的数字:
我在哪里做错了,可以做些什么来解决问题?
【问题讨论】:
-
您可以尝试像
cov_matrix = np.cov(X_new)这样计算协方差矩阵吗?另请附上X的样本。 -
这些是完全相同的组件,但已转置。我错过了什么?
-
@felice 就第二列而言存在符号差异。
标签: python python-3.x scikit-learn pca