1. 函數原型及參數說明
這里只挑幾個比較重要的參數進行說明。
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
- n_components: int, float, None 或 string,PCA算法中所要保留的主成分個數,也即保留下來的特征個數,如果 n_components = 1,將把原始數據降到一維;如果賦值為string,如n_components='mle',將自動選取特征個數,使得滿足所要求的方差百分比;如果沒有賦值,默認為None,特征個數不會改變(特征數據本身會改變)。
- copy:True 或False,默認為True,即是否需要將原始訓練數據復制。
- whiten:True 或False,默認為False,即是否白化,使得每個特征具有相同的方差。
2. PCA對象的屬性
- explained_variance_ratio_:返回所保留各個特征的方差百分比,如果n_components沒有賦值,則所有特征都會返回一個數值且解釋方差之和等於1。
- n_components_:返回所保留的特征個數。
3.PCA常用方法
- fit(X): 用數據X來訓練PCA模型。
- fit_transform(X):用X來訓練PCA模型,同時返回降維后的數據。
- inverse_transform(newData) :將降維后的數據轉換成原始數據,但可能不會完全一樣,會有些許差別。
- transform(X):將數據X轉換成降維后的數據,當模型訓練好后,對於新輸入的數據,也可以用transform方法來降維。
4.簡單栗子
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) newX = pca.fit_transform(X) print(X) Out[365]: [[-1 -1] [-2 -1] [-3 -2] [ 1 1] [ 2 1] [ 3 2]] print(newX) Out[366]: array([[ 1.38340578, 0.2935787 ], [ 2.22189802, -0.25133484], [ 3.6053038 , 0.04224385], [-1.38340578, -0.2935787 ], [-2.22189802, 0.25133484], [-3.6053038 , -0.04224385]]) print(pca.explained_variance_ratio_) [ 0.99244289 0.00755711]
可以發現第一個特征可以99.24%表達整個數據集,因此我們可以降到1維:
pca = PCA(n_components=1) newX = pca.fit_transform(X) print(pca.explained_variance_ratio_) [ 0.99244289]