2012-01-03 72 views
3

多項式如果我理解正確的話,PCA的原理很簡單:PCA:查找協方差矩陣的特徵值:解決的次數n

  1. 計算數據向量協方差矩陣Ç
  2. 解決DET(Ç - Ë*** I)= 0,找出矩陣**Ç的特徵值ë
  3. 計算矩陣C的特徵向量(來自那些特徵值)。

FIRST:這句話正確嗎?

SECOND:任何算法用於多項式方程式det機解決(Ç - Ë*** I)= 0? 我知道這是一個普通的數學問題(找到一個** n多項式的根n)。

第三:是否有PCA的C/C++

感謝任何簡單實現了。

+0

您的三個問題中的兩個超出了本網站的範圍。您不妨考慮在其他地方提出前兩個問題,並將這個問題限制在PCA實現中。 – 2012-01-03 22:34:21

+0

不要通過查找特徵方程來求解特徵值。這不會因爲你的問題變得更大。使用爲該作業設計的特徵值求解器。 – 2012-01-04 14:26:37

回答

2
  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算法。