如果我没理解错的话,PCA的原理很简单:
- 计算数据向量的协方差矩阵C。
- 求解 det(C - e***I) = 0,找到矩阵 **C 的特征值 e。
- 计算矩阵 C 的特征向量(根据这些特征值)。
首先:这个描述是否正确?
第二: 任何机器求解多项式方程 det(C - e***I) = 0 的算法? 我知道这是一道一般的数学题(求 **n 次多项式的根)。
第三:有没有用 C/C++ 实现 PCA 的简单
非常感谢。
最佳答案
- 首先,为了找到特征值,不需要求解您刚才提到的方程。有这样的东西 eigendecomposition of a matrix
- 其次,协方差矩阵是对称且半正定的,因此该矩阵的特征分解等于 singular value decomposition .
- 对于上述两种分解,有许多免费和专有的实现(最先进的实现是 LAPACK)。
- 有很多包含 PCA 的库。如果商业实现合适,您可以尝试 FinMath from RTMath或 NMath from CenterSpace (均适用于 .NET)。否则你可以试试 GSL或其他一些库(StackOverflow 上有几个问题包含更完整的数值库列表)。
关于algorithm - PCA:查找协方差矩阵的特征值:求解 N 次多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717495/