gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:52:52 27 4
gpt4 key购买 nike

我在 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%,则它们的值无关紧要。

关于python - 使用 python 的 sklearn 和 matlab 的 pca 的 PCA 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com