我写了一个简单的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时,也相当于。对于三个,正如我所说,我的函数输出在第三列中翻转符号。当我跑了四次时,第三栏的标志再次被翻转,所有其他栏都没问题。恐怕我不能提供代码。这是一个项目,有点。在
这完全正常。如果}是具有相同特征值的特征向量。在
v
是矩阵的特征向量,那么{这是我们所期望的行为,甚至在sklearn的PCA文档中也有说明
很明显,从数学的角度来看是正确的,好像v是A的特征向量
因此也
^{pr2}$相关问题 更多 >
编程相关推荐