PCA:查找协方差矩阵的特征值:求解 N 次多项式
如果我没理解错的话,PCA的原理很简单:
- 计算数据向量的协方差矩阵C。
- 求解 det(C - e***I) = 0,求矩阵 **C 的特征值 e。
- 计算矩阵 C 的特征向量(根据这些特征值)。
第一:这个描述正确吗?
第二:有任何机器求解多项式方程 det(C - e***I) = 0 的算法吗? 我知道这是一个一般的数学问题(求 **n 次多项式的根)。
第三:在 C/C++ 中是否有 PCA 的简单实现
非常感谢。
If I understand correctly, PCA's principle is very simple:
- Calculate data vectors' covariance matrix C.
- Solve det(C - e***I) = 0, to find matrix **C's eigenvalues e.
- Calculate matrix C's eigenvectors (from those eigenvalues).
FIRST: Is this description correct?
SECOND: Any algorithm for machine-solving of the polynomial equation det(C - e***I) = 0 ?
I understand that this is a general math question (finding roots of a polynomial of degree **n).
THIRD: Are there any simple implementations of PCA in C/C++
Thanks much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能想查看 Gnu Science Library (gsl)。它提供特征值查找功能。请注意,查找特征值是一种迭代的数值运算;也就是说,它不精确,而且价格昂贵。我相信 gsl 使用所谓的 QR 算法。
You might want to look into the Gnu Science Library (gsl). It provides eigenvalue finding functions. Beware, finding eigenvalues is an iterative, numeric operation; i.e. it is not exact, and it is expensive. I believe gsl uses what is called the QR algorithm.