2012-01-03 71 views
3

多项式如果我理解正确的话,PCA的原理很简单:PCA:查找协方差矩阵的特征值:解决的次数n

  1. 计算数据向量协方差矩阵Ç
  2. 解决DET(Ç - Ë*** I)= 0,找出矩阵**Ç的特征值ë
  3. 计算矩阵C的特征向量(来自那些特征值)。

FIRST:这句话正确吗?

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

第三:是否有PCA的C/C++

感谢任何简单实现了。

+0

您的三个问题中的两个超出了本网站的范围。您不妨考虑在其他地方提出前两个问题,并将这个问题限制在PCA实现中。 – 2012-01-03 22:34:21

+0

不要通过查找特征方程来求解特征值。这不会因为你的问题变得更大。使用为该作业设计的特征值求解器。 – 2012-01-04 14:26:37

回答

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

你可能想看看Gnu科学图书馆(gsl)。它提供了特征值查找功能。要小心,找到特征值是一种迭代的数字操作;即它不是确切的,而且是昂贵的。我相信gsl使用所谓的QR算法。