原博文:@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演算法,用最小...