當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn PCA用法及代碼示例


本文簡要介紹python語言中 sklearn.decomposition.PCA 的用法。

用法:

class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

主成分分析(PCA)。

使用數據的奇異值分解將其投影到較低維空間的線性降維。在應用 SVD 之前,輸入數據居中,但未針對每個特征進行縮放。

它使用完整 SVD 的 LAPACK 實現或通過 Halko 等人的方法隨機截斷的 SVD。 2009,取決於輸入數據的形狀和要提取的組件數量。

它還可以使用截斷的 SVD 的 scipy.sparse.linalg ARPACK 實現。

請注意,此類不支持稀疏輸入。有關稀疏數據的替代方案,請參見 TruncatedSVD

在用戶指南中閱讀更多信息。

參數

n_componentsint、float 或 ‘mle’,默認 = 無

要保留的組件數。如果未設置 n_components 則保留所有組件:

n_components == min(n_samples, n_features)

如果 n_components == 'mle'svd_solver == 'full' ,則使用 Minka 的 MLE 來猜測維度。使用 n_components == 'mle' 會將 svd_solver == 'auto' 解釋為 svd_solver == 'full'

如果 0 < n_components < 1svd_solver == 'full' ,選擇分量數,使得需要解釋的方差量大於 n_components 指定的百分比。

如果 svd_solver == 'arpack' ,組件的數量必須嚴格小於 n_features 和 n_samples 的最小值。

因此, None 情況導致:

n_components == min(n_samples, n_features) - 1
copy布爾,默認=真

如果為 False,傳遞給 fit 的數據將被覆蓋並且運行 fit(X).transform(X) 不會產生預期的結果,請改用 fit_transform(X)。

whiten布爾,默認=假

當為 True(默認為 False)時,components_ 向量乘以 n_samples 的平方根,然後除以奇異值,以確保輸出與單位 component-wise 方差不相關。

白化將從轉換後的信號中刪除一些信息(分量的相對方差尺度),但有時可以通過使下遊估計器的數據尊重一些hard-wired假設來提高下遊估計器的預測準確性。

svd_solver{‘auto’, ‘full’, ‘arpack’, ‘randomized’},默認='自動'
如果自動:

求解器由基於 X.shapen_components 的默認策略選擇:如果輸入數據大於 500x500 並且要提取的組件數低於數據最小維度的 80%,則效率更高‘randomized’ 方法已啟用。否則,將計算精確的完整 SVD,然後可以選擇截斷。

如果滿了:

通過scipy.linalg.svd調用標準LAPACK求解器運行精確的完整SVD並通過後處理選擇組件

如果是 arpack:

運行 SVD 被截斷為 n_components 通過 scipy.sparse.linalg.svds 調用 ARPACK 求解器。它嚴格要求 0 < n_components < min(X.shape)

如果隨機:

通過 Halko 等人的方法運行隨機 SVD。

tol浮點數,默認=0.0

由 svd_solver == ‘arpack’ 計算的奇異值的容差。必須在 [0.0, 無窮大) 範圍內。

iterated_powerint 或 ‘auto’,默認='auto'

由svd_solver == ‘randomized’ 計算的冪方法的迭代次數。必須在 [0, 無窮大) 範圍內。

random_stateint、RandomState 實例或無,默認=無

當使用 ‘arpack’ 或 ‘randomized’ 求解器時使用。傳遞 int 以獲得跨多個函數調用的可重現結果。請參閱術語表。

屬性

components_ndarray 形狀(n_components,n_features)

特征空間中的主軸,表示數據中最大方差的方向。等效地,居中輸入數據的右奇異向量與其特征向量平行。組件按 explained_variance_ 排序。

explained_variance_ndarray 形狀 (n_components,)

每個選定組件解釋的方差量。方差估計使用n_samples - 1 自由度。

等於 X 的協方差矩陣的 n_components 個最大特征值。

explained_variance_ratio_ndarray 形狀 (n_components,)

每個選定組件解釋的方差百分比。

如果未設置n_components,則存儲所有分量並且比率之和等於 1.0。

singular_values_ndarray 形狀 (n_components,)

對應於每個選定組件的奇異值。奇異值等於 lower-dimensional 空間中 n_components 變量的 2 範數。

mean_ndarray 形狀 (n_features,)

Per-feature 經驗平均值,根據訓練集估計。

等於 X.mean(axis=0)

n_components_int

組件的估計數量。當 n_components 設置為 ‘mle’ 或 0 到 1 之間的數字(svd_solver == ‘full’)時,此數字是根據輸入數據估算的。否則,它等於參數 n_components,或者如果 n_components 為 None,則等於 n_features 和 n_samples 的較小值。

n_features_int

訓練數據中的特征數。

n_samples_int

訓練數據中的樣本數。

noise_variance_浮點數

根據 Tipping 和 Bishop 1999 的概率 PCA 模型估計的噪聲協方差。參見 C. Bishop 的“模式識別和機器學習”,第 12.2.1 頁。 574 或 http://www.miketipping.com/papers/met-mppca.pdf 。需要計算估計的數據協方差和分數樣本。

等於 X 的協方差矩陣的 (min(n_features, n_samples) - n_components) 個最小特征值的平均值。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

參考

對於 n_components == ‘mle’,此類使用以下方法:Minka, T. P..“PCA 維度的自動選擇”。在 NIPS,第 598-604 頁

從以下位置實現概率 PCA 模型:Tipping, M. E. 和 Bishop, C. M. (1999)。 “概率主成分分析”。皇家統計學會雜誌:B 係列(統計方法),61(3),611-622。通過 score 和 score_samples 方法。

對於svd_solver == ‘arpack’,請參閱scipy.sparse.linalg.svds

對於svd_solver == ‘randomized’,請參見:Halko, N.、Martinsson, P. G. 和 Tropp, J. A. (2011)。 “尋找具有隨機性的結構:構造近似矩陣分解的概率算法”。暹羅評論,53(2),217-288。並且Martinsson, P. G.、Rokhlin, V. 和 Tygert, M. (2011)。 “矩陣分解的隨機算法”。應用和計算諧波分析,30(1),47-68.

例子

>>> import numpy as np
>>> from sklearn.decomposition import PCA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> pca = PCA(n_components=2)
>>> pca.fit(X)
PCA(n_components=2)
>>> print(pca.explained_variance_ratio_)
[0.9924... 0.0075...]
>>> print(pca.singular_values_)
[6.30061... 0.54980...]
>>> pca = PCA(n_components=2, svd_solver='full')
>>> pca.fit(X)
PCA(n_components=2, svd_solver='full')
>>> print(pca.explained_variance_ratio_)
[0.9924... 0.00755...]
>>> print(pca.singular_values_)
[6.30061... 0.54980...]
>>> pca = PCA(n_components=1, svd_solver='arpack')
>>> pca.fit(X)
PCA(n_components=1, svd_solver='arpack')
>>> print(pca.explained_variance_ratio_)
[0.99244...]
>>> print(pca.singular_values_)
[6.30061...]

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.decomposition.PCA。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。