3

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

  1. 计算数据向量的协方差矩阵C
  2. 求解 det( C - e***I) = 0,求矩阵 **C的特征值e
  3. 计算矩阵C的特征向量(根据这些特征值)。

第一:这个描述正确吗?

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

第三: C/C++中有没有简单的PCA实现

非常感谢。

4

2 回答 2

2

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

于 2012-01-03T22:34:17.707 回答
2
  1. 首先,为了找到特征值,不需要解你刚才提到的方程。有矩阵的特征分解之类的东西
  2. 其次,协方差矩阵是对称且半正定的,因此该矩阵的特征分解等于奇异值分解
  3. 对于提到的两种分解,都有很多免费和专有的实现(最先进的实现是LAPACK)。
  4. 有很多包含 PCA 的库。如果商业实现是合适的,您可以尝试来自 RTMath 的 FinMath来自 CenterSpace的 NMath (两者都适用于 .NET)。否则,您可以尝试GSL或其他一些库(StackOverflow 上有几个问题,其中包含更完整的数字库列表)。
于 2012-01-04T15:51:28.000 回答