PCA:找出协方差矩阵的特征值:求解N次多项式

时间:2012-01-03 19:21:08

标签: algorithm math matrix pca

如果我理解正确,PCA的原则很简单:

  1. 计算数据向量的协方差矩阵 C
  2. 求解det( C - e *** I)= 0,找到矩阵** C 的特征值 e 。< / LI>
  3. 计算矩阵 C 的特征向量(来自那些特征值)。
  4. FIRST:此说明是否正确?

    SECOND:任何用于机器求解多项式方程的算法det( C - e *** I)= 0? 我知道这是一个通用的数学问题(找到一个多项式的根<** )。

    THIRD:在C / C ++中是否存在任何简单 PCA实现

    非常感谢。

2 个答案:

答案 0 :(得分:2)

您可能想要查看Gnu科学图书馆(gsl)。它提供特征值查找功能。注意,找到特征值是一个迭代的数值运算;即它不准确,而且价格昂贵。我相信gsl使用所谓的QR算法。

答案 1 :(得分:2)

  1. 首先,为了找到特征值,不需要求解刚刚提到的方程。有eigendecomposition of a matrix
  2. 之类的东西
  3. 其次,协方差矩阵是对称的,半正定的,因此该矩阵的特征分解等于singular value decomposition
  4. 对于上述两种分解,都有很多免费和专有的实现(最先进的实现是LAPACK)。
  5. 有很多库包含PCA。如果商业实现是合适的,您可以尝试FinMath from RTMathNMath from CenterSpace(两者都适用于.NET)。否则,您可以尝试GSL或其他一些库(StackOverflow上有几个包含更完整数值库列表的问题)。