PCA:查找协方差矩阵的特征值:求解 N 次多项式

发布于 2024-12-24 19:13:48 字数 462 浏览 1 评论 0原文

如果我没理解错的话,PCA的原理很简单:

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

第一:这个描述正确吗?

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

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

非常感谢。

If I understand correctly, PCA's principle is very simple:

  1. Calculate data vectors' covariance matrix C.
  2. Solve det(C - e***I) = 0, to find matrix **C's eigenvalues e.
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小耗子 2024-12-31 19:13:48
  1. 首先,为了找到特征值,不需要求解您刚才提到的方程。存在矩阵的特征分解
  2. 其次,协方差矩阵是对称且半正定的,因此该矩阵的特征分解等于 奇异值分解
  3. 对于这两个提到的分解,有很多免费和专有的实现(最先进的实现是 LAPACK)。
  4. 有很多包含 PCA 的库。如果商业实现合适,您可以尝试 FinMath from RTMath来自 CenterSpace 的 NMath(均适用于 .NET)。否则,您可以尝试 GSL 或其他一些库(StackOverflow 上有几个问题包含更完整的信息)数值库列表)。
  1. First of all, in order to find eigenvalues there is not need to solve equation you just mentioned. There is such thing as eigendecomposition of a matrix
  2. Second, the covariance matrix is symmetric and positive semi-definite, so eigendecomposition for this matrix is equal to singular value decomposition.
  3. For both mentioned decompositions there is a lot of free and proprietary implementations (the state of the art implemenation is LAPACK).
  4. There is a lot of libraries that contains PCA. If commercial implementations are suitable you can try FinMath from RTMath or NMath from CenterSpace (both for .NET). Otherwise you can try GSL or some other library (there are several questions on StackOverflow that contains more complete list of numerical libraries).
咿呀咿呀哟 2024-12-31 19:13:48

您可能想查看 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文