【Scikit-Learn 中文文件】分解成分中的訊號(矩陣分解問題)
阿新 • • 發佈:2019-01-25
2.5.1.3. PCA 使用隨機SVD
通過丟棄具有較低奇異值的奇異向量成分,將資料降維到低維空間並保留大部分方差是非常有意義的。
例如,如果我們使用64x64畫素的灰度級影象進行人臉識別,資料的維數為4096, 在這樣大的資料上訓練含RBF核心的支援向量機是很慢的。 此外我們知道資料本質上的維度遠低於4096,因為人臉的所有照片都看起來有點相似。 樣本位於許多的很低維度(例如約200維)。PCA演算法可以用於線性變換資料,同時降低維數並同時保留大部分方差。
在這種情況下,使用可選引數 svd_solver='randomized'
的 PCA
是非常有用的。
因為我們將要丟棄大部分奇異值,所以對我們將保留並實際執行變換的奇異向量進行近似估計的有限的計算更有效。
例如:以下顯示了來自 Olivetti 資料集的 16 個樣本肖像(以 0.0 為中心)。 右側是前 16 個奇異向量重畫為肖像。因為我們只需要使用大小為 和 的資料集的前 16 個奇異向量, 使得計算時間小於 1 秒。
注意:使用可選引數 svd_solver='randomized'
,在 PCA
中我們還需要給出輸入低維空間大小 n_components
。
如果我們注意到: 且 ,
對於PCA中實施的確切方式,隨機 PCA
的時間複雜度是: ,
而不是 。
對於確切的方式,隨機 PCA
的記憶體佔用量正比於 ,
而不是
注意:選擇引數 svd_solver='randomized'
的 PCA
,在執行 inverse_transform
時,
並不是 transform
的確切的逆變換操作(即使 引數設定為預設的 whiten=False
)