Pca

如何對非常高維的數據執行 PCA?

  • February 11, 2011

要執行主成分分析 (PCA),您必須從數據中減去每列的均值,計算相關係數矩陣,然後找到特徵向量和特徵值。好吧,這就是我在 Python 中實現它所做的,除了它只適用於小矩陣,因為查找相關係數矩陣 (corrcoef) 的方法不允許我使用高維數組。由於我必須將它用於圖像,因此我當前的實現並沒有真正幫助我。

我讀過可以只取你的數據矩陣併計算代替,但這對我不起作用。嗯,我不太確定我理解它的含義,除了它應該是一個矩陣代替(在我的情況下)。我在 eigenfaces 教程中閱讀了這些內容,但似乎沒有一個以我能真正理解的方式解釋它。

簡而言之,是否有這種方法的簡單算法描述,以便我可以遵循它?

執行標準 PCA 的最簡單方法是通過減去列均值來使數據矩陣的列居中(假設列對應於不同的變量),然後執行 SVD。左奇異向量乘以相應的奇異值,對應於(估計的)主成分。右奇異向量對應於(估計的)主成分方向——這些與 PCA 給出的特徵向量相同。奇異值對應於主成分的標準偏差(乘以根 n 的因子,其中 n 是數據矩陣中的行數)——與 PCA 給出的特徵值的平方根相同。

如果要對相關矩陣進行 PCA,則需要在應用 SVD 之前標準化數據矩陣的列。這相當於減去平均值(居中),然後除以標準偏差(縮放)。

如果您想要完整的 PCA,這將是最有效的方法。您可以使用一些代數驗證這給您的答案與對樣本協方差矩陣進行譜分解相同。

當您只需要幾台 PC 時,還有一些計算部分 SVD 的有效方法。其中一些是冪迭代的變體。Lanczos 算法也是與偏最小二乘法相關的一個示例。如果您的矩陣很大,則使用近似方法可能會更好。在這種情況下,規範 PCA 也有統計上的原因。

引用自:https://stats.stackexchange.com/questions/7111

comments powered by Disqus