【问题标题】:PCA: Find covariance matrix's eigenvalues: solving a polynomial of degree NPCA:查找协方差矩阵的特征值:求解 N 次多项式
【发布时间】:2012-01-03 19:21:08
【问题描述】:

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

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

FIRST:这个描述正确吗?

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

第三:是否有任何简单在 C/C++ 中的 PCA 实现

非常感谢。

【问题讨论】:

  • 您的三个问题中有两个超出了本网站的范围。您可能希望考虑在其他地方提出前两个问题,并将这个问题限制在 PCA 实现中。
  • 不要通过求特征方程求根来求解特征值。随着您的问题变得更大,这将不起作用。使用专为这项工作设计的特征值求解器。

标签: algorithm math matrix pca


【解决方案1】:
  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 算法。

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多