05-04 scikit-learn庫之主成分分析

更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

scikit-learn庫之主成分分析

PCA在scikit-leran庫中的sklearn.decomposition包下,PCA即最普通的PCA,PCA也有不少變種,咱們主要會講解PCA,而後聊一聊KernelPCAIncremetalPCASparsePCAMiniBatchSparsePCA算法

接下來將會討論上述五者的區別,因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition數據結構

1、PCA

1.1 使用場景

PCA是PCA系列降維算法中最原始的降維方法,由於原始,因此它通常是咱們首選的,若是感受原始的PCA可能沒法解決咱們的問題,咱們能夠嘗試使用其餘的PCA系列的降維算法。dom

1.2 代碼

import numpy as np
from sklearn.decomposition import PCA

X = np.array([[-1, -1, 2], [-2, -1, 1], [-3, -2, 3],
              [1, 1, 2], [2, 1, 2], [3, 2, 3]])
pca = PCA(n_components=2)
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
  svd_solver='auto', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=2, svd_solver='full')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
  svd_solver='full', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=1, svd_solver='arpack')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=1, random_state=None,
  svd_solver='arpack', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028]
print(pca.singular_values_)
[6.311193]

1.3 參數

  • n_components:特徵維度數目,float類型或str類型。該參數能夠用來控制降維到的維度數。
    • 設置一個大於等於1且小於樣本特徵的整數。
    • 設置\((0,1]\)內的數,指定主成分方差和所佔的最小比例閾值。
    • 設置爲'mle',即由模型經過MLE算法根據特徵的方差分佈狀況本身選擇。
  • copy:bool類型。若是爲True,在傳遞給fit()方法的數據上降維,若是爲False,傳遞給fit()方法的數據將會被覆蓋,即在原來的數據上進行降維計算。默認爲True。
  • whiten:白化,bool類型。判斷是否白化,白化就是對降維後的數據歸一化,讓方差都爲1。通常不推薦白化,若是PCA降維後須要進行數據處理,能夠考慮白化。默認爲False。
  • svd_solver:奇異值分解方法,str類型。指定奇異值分解SVD的方法,通常PCA庫都是基於SVD實現的。
    • 'auto':PCA自動權衡下面三種實現方式。
    • 'full':傳統的SVD,使用scipy庫實現。
    • 'arpack':適用於數據量大,數據維度多,同時主成分數目比例較低的PCA降維,使用scipy庫實現。
    • 'randomized':適用於數據量大,數據維度多,同時主成分數目比例較低的PCA降維,使用scikit-learn實現。
  • tol:中止求解的標準,float類型。當svd_solver='arpack'中止算法的奇異值閾值。默認爲0。
  • iterated_power:int類型或'auto'。當svd_solver='randomized'時計算冪方法的迭代次數。默認爲'auto'。
  • random_state:隨機數種子,int類型。使用後能夠保證隨機數不會隨着時間的變化而變化。默認爲None。

1.4 屬性

  • components_:array類型。返回具備最大方差的成分。
  • explained_variance_:array類型。降維後的各主成分的方差值,主成分方差值越大,則說明這個主成分越重要
  • explained_variance_ratio_:array類型。降維後的各主成分的方差值佔總方差值的比例,主成分所佔比例越大,則說明這個主成分越重要。
  • singular_values_:array類型。返回每一個成分對應的奇異值。
  • mean_:array類型。每一個值的經驗均值。
  • n_components_:int類型。返回保留的成分個數。
  • noise_variance_:float類型。返回噪聲的協方差。

1.5 方法

  • fit(X,y):把數據放入模型中訓練模型。
  • fit_transform(X,[,y])all:訓練模型同時返回降維後的數據。
  • get_covariance():計算數據的協方差。
  • get_params([deep]):返回模型的參數,能夠用於Pipeline中。
  • get_precision():計算數據的精確度矩陣。
  • inverse_transform:將降維後的數據轉換成原始數據,但可能不會徹底同樣,會有些許差異。
  • score(X,y):基於報告決定係數\(R^2\)評估模型。
  • score_samples:返回每一個樣本的對數似然。
  • set_prams(**params):建立模型參數。
  • transform(X):對於訓練好的數據降維。

2、KernelPCA

KernelPCA模型相似於非線性支持向量機,使用核技巧處理非線性數據的降維,主要是選擇合適的核函數。機器學習

3、IncrementalPCA

IncrementalPCA模型主要是爲了解決計算機內存限制問題。工業上樣本量和維度都是很是大的,若是直接擬合數據,機器性能通常都沒法支撐。IncrementalPCA則會將數據分紅多個batch,而後對每一個batch依次遞增調用partial_fit函數對樣本降維。函數

4、SparsePCA

SparsePCA模型相較於普通的PCA區別在於使用了L1正則化,即對非主成分的影響降爲0,避免了噪聲對降維的影響。性能

5、MiniBatchSparsePCA

MiniBatchSparsePCA模型相似於SparsePCA,不一樣之處在於MiniBatchSparsePCA模型經過使用一部分樣本特徵和給定的迭代次數進行降維,以此來解決特徵分解過慢的問題。學習

相關文章
相關標籤/搜索