scikit learn中PCA的使用方法

2021-10-01 01:31:11 字數 4549 閱讀 1588

原博文:@blog:

在前一篇文章 主成分分析(pca) 中,我基於python和numpy實現了pca演算法,主要是為了加深對演算法的理解,演算法的實現很粗糙,實際應用中我們一般呼叫成熟的包,本文就結束scikit-learn中pca使用的方法和需要注意的細節,參考:sklearn.decomposition.pca

1、函式原型及引數說明

sklearn.decomposition.pca(n_components=none, copy=true, whiten=false)
引數說明:

n_components:

意義:pca演算法中所要保留的主成分個數n,也即保留下來的特徵個數n

型別:int 或者 string,預設時預設為none,所有成分被保留。

賦值為int,比如n_components=1,將把原始資料降到乙個維度。

賦值為string,比如n_components='mle',將自動選取特徵個數n,使得滿足所要求的方差百分比。

copy:

型別:bool,true或者false,預設時預設為true。

意義:表示是否在執行演算法時,將原始訓練資料複製乙份。若為true,則執行pca演算法後,原始訓練資料的值不            會有任何改變,因為是在原始資料的副本上進行運算;若為false,則執行pca演算法後,原始訓練資料的              值會改,因為是在原始資料上進行降維計算。

whiten:

型別:bool,預設時預設為false

意義:白化,使得每個特徵具有相同的方差。關於「白化」,可參考:ufldl教程

2、pca物件的屬性

components_ :返回具有最大方差的成分。

explained_variance_ratio_:返回 所保留的n個成分各自的方差百分比。

n_components_:返回所保留的成分個數n。

mean_:

noise_variance_:

3、pca物件的方法

fit()可以說是scikit-learn中通用的方法,每個需要訓練的演算法都會有fit()方法,它其實就是演算法中的「訓練」這一步驟。因為pca是無監督學習演算法,此處y自然等於none。

fit(x),表示用資料x來訓練pca模型。

函式返回值:呼叫fit方法的物件本身。比如pca.fit(x),表示用x對pca這個物件進行訓練。

用x來訓練pca模型,同時返回降維後的資料。

newx=pca.fit_transform(x),newx就是降維後的資料。

將降維後的資料轉換成原始資料,x=pca.inverse_transform(newx)

將資料x轉換成降維後的資料。當模型訓練好後,對於新輸入的資料,都可以用transform方法來降維。

此外,還有get_covariance()、get_precision()、get_params(deep=true)、score(x, y=none)等方法,以後用到再補充吧。

4、example

以一組二維的資料data為例,data如下,一共12個樣本(x,y),其實就是分布在直線y=x上的點,並且聚集在x=1、2、3、4上,各3個。

[python] view plain

copy

>>> data  

array([[ 1.  ,  1.  ],  

[ 0.9 ,  0.95],  

[ 1.01,  1.03],  

[ 2.  ,  2.  ],  

[ 2.03,  2.06],  

[ 1.98,  1.89],  

[ 3.  ,  3.  ],  

[ 3.03,  3.05],  

[ 2.89,  3.1 ],  

[ 4.  ,  4.  ],  

[ 4.06,  4.02],  

[ 3.97,  4.01]])  

data這組資料,有兩個特徵,因為兩個特徵是近似相等的,所以用乙個特徵就能表示了,即可以降到一維。下面就來看看怎麼用sklearn中的pca演算法包。

(1)n_components設定為1,copy預設為true,可以看到原始資料data並未改變,newdata是一維的,並且明顯地將原始資料分成了四類。

>>> from sklearn.decomposition import pca   

>>> pca=pca(n_components=1)  

>>> newdata=pca.fit_transform(data)  

>>> newdata  

array([[-2.12015916],  

[-2.22617682],  

[-2.09185561],  

[-0.70594692],  

[-0.64227841],  

[-0.79795758],  

[ 0.70826533],  

[ 0.76485312],  

[ 0.70139695],  

[ 2.12247757],  

[ 2.17900746],  

[ 2.10837406]])  

>>> data  

array([[ 1.  ,  1.  ],  

[ 0.9 ,  0.95],  

[ 1.01,  1.03],  

[ 2.  ,  2.  ],  

[ 2.03,  2.06],  

[ 1.98,  1.89],  

[ 3.  ,  3.  ],  

[ 3.03,  3.05],  

[ 2.89,  3.1 ],  

[ 4.  ,  4.  ],  

[ 4.06,  4.02],  

[ 3.97,  4.01]])  

(2)將copy設定為false,原始資料data將發生改變。

>>> pca=pca(n_components=1,copy=false)  

>>> newdata=pca.fit_transform(data)  

>>> data  

array([[-1.48916667, -1.50916667],  

[-1.58916667, -1.55916667],  

[-1.47916667, -1.47916667],  

[-0.48916667, -0.50916667],  

[-0.45916667, -0.44916667],  

[-0.50916667, -0.61916667],  

[ 0.51083333,  0.49083333],  

[ 0.54083333,  0.54083333],  

[ 0.40083333,  0.59083333],  

[ 1.51083333,  1.49083333],  

[ 1.57083333,  1.51083333],  

[ 1.48083333,  1.50083333]])  

(3)n_components設定為'mle',看看效果,自動降到了1維。

>>> pca=pca(n_components='mle')  

>>> newdata=pca.fit_transform(data)  

>>> newdata  

array([[-2.12015916],  

[-2.22617682],  

[-2.09185561],  

[-0.70594692],  

[-0.64227841],  

[-0.79795758],  

[ 0.70826533],  

[ 0.76485312],  

[ 0.70139695],  

[ 2.12247757],  

[ 2.17900746],  

[ 2.10837406]])  

(4)物件的屬性值

>>> pca.n_components  

1  >>> pca.explained_variance_ratio_  

array([ 0.99910873])  

>>> pca.explained_variance_  

array([ 2.55427003])  

>>> pca.get_params  

我們所訓練的pca物件的n_components值為1,即保留1個特徵,該特徵的方差為2.55427003,佔所有特徵的方差百分比為0.99910873,意味著幾乎保留了所有的資訊。get_params返回各個引數的值。

(5)物件的方法

>>> newa=pca.transform(a)  

對新的資料a,用已訓練好的pca模型進行降維。

[python] view plain

copy

>>> pca.set_params(copy=false)  

pca(copy=false, n_components=1, whiten=false)  

設定引數。

Python中scikit learn資料轉換

coding utf 8 import sys import numpy from sklearn import metrics from sklearn.feature extraction.text import hashingvectorizer from sklearn.feature ex...

scikit learn中的隨機森林模型

和決策樹模型類似,scikit learn中的隨機森林模型也提供了基於普通decision tree的random forest學習器和基於隨機化extra tree的extratrees學習器。鑑於decision tree和extra tree差別甚小,本文以random forest為例進行介...

sklearn中的PCA模型

sklearn中提供了較為豐富的pca模型來解決資料的降維問題,其包括 1 pca 最原始的pca演算法 2 truncatedsvd 原始資料不做中心化處理的pca演算法,可用於文字資料 tf idf處理後 的隱藏語義分析 lsa 3 sparsepca 新增l1正則化處理後的pca演算法,用最小...