[英]Different result of PCA using python's sklearn and matlab's pca
我在matlab和python中生成相同的矩陣:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
然后我分別應用pca來獲得主成分系數。
Matlab代碼:
X = reshape([1:25], 5, 5);
X = X'
[cofe, S, latent] = pca(X)
結果:
cofe =
0.4472 0.8944 0 0
0.4472 -0.2236 0.8660 -0.0000
0.4472 -0.2236 -0.2887 0.8165
0.4472 -0.2236 -0.2887 -0.4082
0.4472 -0.2236 -0.2887 -0.4082
Python代碼:
from sklearn.decomposition import PCA
import numpy as np
pca = PCA()
A = np.array(range(1, 26), dtype=float).reshape([5, 5])
print(A)
pca.fit(A)
print(np.transpose(pca.components_))
結果:
[[-0.4472136 0. 0. 0. 0.89442719]
[-0.4472136 -0.5 -0.5 -0.5 -0.2236068 ]
[-0.4472136 0.83333333 -0.16666667 -0.16666667 -0.2236068 ]
[-0.4472136 -0.16666667 0.83333333 -0.16666667 -0.2236068 ]
[-0.4472136 -0.16666667 -0.16666667 0.83333333 -0.2236068 ]]
兩列結果是相同的,但其他一些是完全不同的。 然后我試着規范化python代碼的結果,因為我看到matlab的結果是規范化的,但結果仍然存在。
有人能告訴我他們為什么不同?
如果它們是相同或不相關則無關緊要,它們是“零”。 它們的特征值為零。 由於您的矩陣,您可以使用100%精度的單個主成分描述整個數據,因此以下主要成分只是噪聲。
通過查看矩陣(它的所有行都是線性相關的,沒有一個是獨立的)可以看出,但更容易使用MATLAB的內置功能。
[cofe, S, latent,~,explained,~] = pca(X)
explained =
100.0000
0.0000
0.0000
0.0000
第一個PCA是100%的數據,下面的數據是0%的數據。 如果它們是數據的0%,則它們的值無關緊要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.