纽比的替代品利纳格艾格?

2024-05-14 09:39:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个简单的PCA代码,它计算协方差矩阵,然后在协方差矩阵上使用linalg.eig来找到主成分。当我使用scikit的主成分分析法计算三个主要成分时,我得到的结果几乎相同。我的PCA函数将带翻转符号的第三列转换后的数据输出到scikit的PCA函数中。现在我认为scikit内置的PCA是正确的,这比假设我的代码是正确的概率更高。我注意到第三个主分量/特征向量在我的例子中已经翻转了符号。所以如果scikit的第三个特征向量是(a,-b,-c,-d),那么我的就是(-a,b,c,d)。我的线性代数可能有点寒酸,但我认为这是不同的结果。我得到特征向量的方法是使用linalg.eig计算协方差矩阵的特征向量和特征值。我很乐意尝试手工寻找特征向量,但对于4x4矩阵(我使用的是iris数据集)这样做并不有趣。在

虹膜数据集有4个维度,所以我最多可以运行4个组件的PCA。当我为一个组件运行时,结果是相等的。当我跑2时,也相当于。对于三个,正如我所说,我的函数输出在第三列中翻转符号。当我跑了四次时,第三栏的标志再次被翻转,所有其他栏都没问题。恐怕我不能提供代码。这是一个项目,有点。在


Tags: 数据函数代码符号组件矩阵scikit内置
2条回答

So if scikit's third eigenvector is (a,-b,-c,-d) then mine is (-a,b,c,d).

这完全正常。如果v是矩阵的特征向量,那么{}是具有相同特征值的特征向量。在

这是我们所期望的行为,甚至在sklearn的PCA文档中也有说明

Due to implementation subtleties of the Singular Value Decomposition (SVD), which is used in this implementation, running fit twice on the same matrix can lead to principal components with signs flipped (change in direction). For this reason, it is important to always use the same estimator object to transform data in a consistent fashion.

很明显,从数学的角度来看是正确的,好像v是A的特征向量

Av = kv

因此也

^{pr2}$

相关问题 更多 >

    热门问题