機器學習sklearn(十五): 特征工程(六)特征選擇(一)主成分分析PCA


1. 准確的PCA和概率解釋(Exact PCA and probabilistic interpretation)

PCA 用於對具有一組連續正交分量(Orthogonal component 譯注: 或譯為正交成分,下出現 成分 和 分量 是同意詞)的多變量數據集進行方差最大化的分解。 在 scikit-learn 中, PCA 被實現為一個變換器對象, 通過 fit 方法可以擬合出 n 個成分, 並且可以將新的數據投影(project, 亦可理解為分解)到這些成分中。

在應用SVD(奇異值分解) 之前, PCA 是在為每個特征聚集而不是縮放輸入數據。可選參數 whiten=True 使得可以將數據投影到奇異(singular)空間上,同時將每個成分縮放到單位方差。 如果下游模型對信號的各向同性作出強假設,這通常是有用的,例如,使用RBF內核的 SVM 算法和 K-Means 聚類算法。

以下是iris數據集的一個示例,該數據集包含4個特征,通過PCA降維后投影到方差最大的二維空間上:

 

 

PCA 對象還提供了 PCA 算法的概率解釋,其可以基於可解釋的方差量給出數據的可能性。PCA對象實現了在交叉驗證(cross-validation)中使用 score 方法:

 

 

 

示例:

2. 增量PCA (Incremental PCA)

PCA 對象非常有用, 但 針對大型數據集的應用, 仍然具有一定的限制。 最大的限制是 PCA 僅支持批處理,這意味着所有要處理的數據必須放在主內存。 IncrementalPCA 對象使用不同的處理形式, 即允許部分計算以小型批處理方式處理數據的方法進行, 而得到和 PCA 算法差不多的結果。 IncrementalPCA 可以通過以下方式實現核外(out-of-core)主成分分析:

  • 基於從本地硬盤或網絡數據庫中連續獲取的數據塊之上, 使用 partial_fit 方法。
  • 在 memory mapped file (通過 numpy.memmap 創建)上使用 fit 方法。

IncrementalPCA 類為了增量式的更新 explainedvariance_ratio ,僅需要存儲估計出的分量和噪聲方差。 這就是為什么內存使用量依賴於每個批次的樣本數量,而不是數據集中需要處理的樣本總量。

在應用SVD之前,IncrementalPCA就像PCA一樣,為每個特征聚集而不是縮放輸入數據。

 

 

 

 

示例

3. 基於隨機化SVD的PCA

通過丟棄具有較低奇異值的奇異向量的分量,將數據降維到低維空間並保留大部分方差信息是非常有意義的。

例如,如果我們使用64x64像素的灰度級圖像進行人臉識別,數據的維數為4096,在這樣大的數據上訓練含RBF內核的支持向量機是很慢的。此外我們知道這些數據固有維度遠低於4096,因為人臉的所有照片都看起來有點相似。樣本位於較低維度的流體上(例如約200維)。 PCA算法可以用於線性變換數據,同時降低維數並同時保留大部分可描述的方差信息。

在這種情況下,使用可選參數 svd_solver='randomized' 的 PCA 是非常有用的。既然我們將要丟棄大部分奇異值,那么僅僅就實際轉換中所需的奇異向量進行計算就可以使得 PCA 計算過程變得異常有效。

例如:以下顯示了來自 Olivetti 數據集的 16 個樣本肖像(以 0.0 為中心)。右側是前 16 個奇異向量重畫的肖像。因為我們只需要使用大小為 n_{samples} = 400 和 n_{features} = 64 \times 64 = 4096 的數據集的前 16 個奇異向量, 使得計算時間小於 1 秒。

 

 

 

 

注意:使用可選參數 svd_solver='randomized' ,在 PCA 中我們還需要給出輸入低維空間大小 n_components 。

我們注意到, 如果 n_{\max} = \max(n_{\mathrm{samples}}, n_{\mathrm{features}}) 且 n_{\min} = \min(n_{\mathrm{samples}}, n_{\mathrm{features}}), 對於PCA中的實現,隨機 PCA 的時間復雜度是:O(n_{\max}^2 \cdot n_{\mathrm{components}}), 而不是 O(n_{\max}^2 \cdot n_{\min}) 。

就內部實現的方法而言, 隨機 PCA 的內存占用量和 2 \cdot n_{\max} \cdot n_{\mathrm{components}}, 而不是 n_{\max}\cdot n_{\min} 成正比。

注意:選擇參數 svd_solver='randomized' 的 PCA 的 inverse_transform 的實現, 並不是對應 transform 的逆變換(即使 參數設置為默認的 whiten=False

示例:

參考資料:

4. 核 PCA

KernelPCA 是 PCA 的擴展,通過使用核方法實現非線性降維(dimensionality reduction) (參閱 成對的矩陣, 類別和核函數)。 它具有許多應用,包括去噪, 壓縮和結構化預測( structured prediction ) (kernel dependency estimation(內核依賴估計))。 KernelPCA 支持 transform 和 inverse_transform 。

 

示例:

5. 稀疏主成分分析 ( SparsePCA 和 MiniBatchSparsePCA )

SparsePCA 是 PCA 的一個變體,目的是提取能最大程度得重建數據的稀疏分量集合。

小批量稀疏 PCA ( MiniBatchSparsePCA ) 是一個 SparsePCA 的變體,它速度更快但准確度有所降低。對於給定的迭代次數,通過迭代該組特征的小塊來達到速度的增加。

Principal component analysis(主成分分析) (PCA) 的缺點在於,通過該方法提取的成分具有獨占的密度表達式,即當表示為原始變量的線性組合時,它們具有非零系數,使之難以解釋。在許多情況下,真正的基礎分量可以被更自然地想象為稀疏向量; 例如在面部識別中,每個分量可能自然地映射到面部的某個部分。

稀疏的主成分產生更節約、可解釋的表達式,明確強調了樣本之間的差異性來自哪些原始特征。

以下示例說明了使用稀疏 PCA 提取 Olivetti 人臉數據集中的 16 個分量。可以看出正則化項產生了許多零。此外,數據的自然結構導致了非零系數垂直相鄰 (vertically adjacent)。該模型並不具備純數學意義的執行: 每個分量都是一個向量 h \in \mathbf{R}^{4096}, 除非人性化地的可視化為 64x64 像素的圖像,否則沒有垂直相鄰性的概念。下面顯示的分量看起來局部化(appear local)是數據的內在結構的影響,這種局部模式使重建誤差最小化。有一種考慮到鄰接性和不同結構類型的導致稀疏的規范(sparsity-inducing norms),參見 [Jen09] 對這種方法進行了解。有關如何使用稀疏 PCA 的更多詳細信息,請參閱下面的示例部分。

 

 

 

 請注意,有多種不同的計算稀疏PCA 問題的公式。 這里使用的方法基於 [Mrl09] 。對應優化問題的解決是一個帶有懲罰項(L1范數的) \ell_1 的 PCA 問題(dictionary learning(字典學習)):

 

 稀疏推導(sparsity-inducing) \ell_1 規范也可以當訓練樣本很少時,避免從噪聲中擬合分量。可以通過超參數 alpha 來調整懲罰程度(或稱稀疏度)。值較小會導致溫和的正則化因式分解,而較大的值將許多系數縮小到零。

注意 雖然本着在線算法的精神, MiniBatchSparsePCA 類不實現 partial_fit , 因為在線算法是以特征為導向,而不是以樣本為導向。

示例:

參考資料:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM