簡體   English   中英

使用python的sklearn和matlab的pca的PCA的不同結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM