【Python学习】 - sklearn - PCA降维相关
1、PCA算法介紹
主成分分析(Principal Components Analysis),簡稱PCA,是一種數據降維技術,用于數據預處理。一般我們獲取的原始數據維度都很高,比如1000個特征,在這1000個特征中可能包含了很多無用的信息或者噪聲,真正有用的特征才100個,那么我們可以運用PCA算法將1000個特征降到100個特征。這樣不僅可以去除無用的噪聲,還能減少很大的計算量。
主成分分析不是一種預測模型,它是數據降維的方法。此外,PCA并沒有一個預測主體,因此PCA屬于無監督學習!
PCA算法是如何實現的?
簡單來說,就是將數據從原始的空間中轉換到新的特征空間中,例如原始的空間是三維的(x,y,z),x、y、z分別是原始空間的三個基,我們可以通過某種方法,用新的坐標系(a,b,c)來表示原始的數據,那么a、b、c就是新的基,它們組成新的特征空間。在新的特征空間中,可能所有的數據在c上的投影都接近于0,即可以忽略,那么我們就可以直接用(a,b)來表示數據,這樣數據就從三維的(x,y,z)降到了二維的(a,b)。
問題是如何求新的基(a,b,c)?
一般步驟是這樣的:先對原始數據零均值化或規格化,然后求協方差矩陣,接著對協方差矩陣求特征向量和特征值,保留主要的成分[即保留值比較大的前n個特征],這些特征向量組成了新的特征空間。
關于相關性的理解,大致可以理解為:如果隨著某一個特征的增加,另一個特征也在增加,那么他們相關性高,換句話說,特征變化相似的,選一列進行分析即可,于是可以進行降維。
?
2、函數原型及參數說明
函數原型
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
參數說明:
1)n_components: ?
類型:int 或者 string,缺省時默認為None,所有成分被保留。
??????????賦值為int,比如n_components=1,將把原始數據降到一個維度。
??????????賦值為string,比如n_components='mle',將自動選取特征個數n,使得滿足所要求的方差百分比。
意義:PCA算法中所要保留的主成分個數n,也即保留下來的特征個數n。這個參數可以幫我們指定希望PCA降維后的特征維度數目。最常用的做法是直接指定降維到的維度數目,此時n_components是一個大于等于1的整數。當然,也可以指定主成分的方差和所占的最小比例閾值,讓PCA類自己去根據樣本特征方差來決定降維到的維度數,此時n_components是一個(0,1]之間的數。當然,還可以將參數設置為”mle”, 此時PCA類會用MLE算法根據特征的方差分布情況自己去選擇一定數量的主成分特征來降維。我們也可以用默認值,即不輸入n_components,此時n_components=min(樣本數,特征數)。
2)copy:
類型:bool,True或者False,缺省時默認為True。
意義:表示是否在運行算法時,將原始訓練數據復制一份。若為True,則運行PCA算法后,原始訓練數據的值不會有任何改變,因為是在原始數據的副本上進行運算;若為False,則運行PCA算法后,原始訓練數據的值會改,因為是在原始數據上進行降維計算。
3)whiten:
類型:bool,缺省時默認為False
意義:白化,使得每個特征具有相同的方差。所謂白化,就是對降維后的數據的每個特征進行歸一化,讓方差都為1.對于PCA降維本身來說,一般不需要白化。如果你PCA降維后有后續的數據處理動作,可以考慮白化。默認值是False,即不進行白化。
?
4)svd_solver:
即指定奇異值分解SVD的方法,由于特征分解是奇異值分解SVD的一個特例,一般的PCA庫都是基于SVD實現的。有4個可以選擇的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般適用于數據量大,數據維度多同時主成分數目比例又較低的PCA降維,它使用了一些加快SVD的隨機算法。 full則是傳統意義上的SVD,使用了scipy庫對應的實現。arpack和randomized的適用場景類似,區別是randomized使用的是scikit-learn自己的SVD實現,而arpack直接使用了scipy庫的sparse SVD實現。默認是auto,即PCA類會自己去在前面講到的三種算法里面去權衡,選擇一個合適的SVD算法來降維。一般來說,使用默認值就夠了。
除了這些輸入參數外,有兩個PCA類的參數值得關注。第一個是explained_variance_,它代表降維后的各主成分的方差值。方差值越大,則說明越是重要的主成分。第二個是explained_variance_ratio_,它代表降維后的各主成分的方差值占總方差值的比例,這個比例越大,則越是重要的主成分。
3、PCA對象的屬性
?
explained_variance_:它代表降維后的各主成分的方差值。方差值越大,則說明越是重要的主成分。
explained_variance_ratio_:它代表降維后的各主成分的方差值占總方差值的比例,這個比例越大,則越是重要的主成分。
n_components_:返回所保留的成分個數n。當設置參數為‘mle’的時候,可以進行查看降維后具體的維度值大小。
還有幾個不常用的對象:components_? ? ? ? ,mean_? ?,noise_variance_? ,singular_values_? 。
?
4、PCA對象的方法
fit(X,y=None)
fit()可以說是scikit-learn中通用的方法,每個需要訓練的算法都會有fit()方法,它其實就是算法中的“訓練”這一步驟。因為PCA是無監督學習算法,此處y自然等于None。
fit(X),表示用數據X來訓練PCA模型。
函數返回值:調用fit方法的對象本身。比如pca.fit(X),表示用X對pca這個對象進行訓練。
?
fit_transform(X)
用X來訓練PCA模型,同時返回降維后的數據。
newX=pca.fit_transform(X),newX就是降維后的數據。
?
inverse_transform()
將降維后的數據轉換成原始數據,X=pca.inverse_transform(newX)
?
transform(X)
將數據X轉換成降維后的數據。當模型訓練好后,對于新輸入的數據,都可以用transform方法來降維。
還有不常用的get_covariance()、get_precision()、get_params(deep=True)、score(X, y=None)等方法。
5、PCA算法總結
作為一個非監督學習的降維方法,它只需要特征值分解,就可以對數據進行壓縮,去噪。因此在實際場景應用很廣泛。為了克服PCA的一些缺點,出現了很多PCA的變種,比如為解決非線性降維的KPCA,還有解決內存限制的增量PCA方法Incremental PCA,以及解決稀疏數據降維的PCA方法Sparse PCA等。
優點
1)僅僅需要以方差衡量信息量,不受數據集以外的因素影響。
2)各主成分之間正交,可消除原始數據成分間的相互影響的因素。
3)計算方法簡單,主要運算是特征值分解,易于實現。
缺點
1)主成分各個特征維度的含義具有一定的模糊性,不如原始樣本特征的解釋性強。
2)方差小的非主成分也可能含有對樣本差異的重要信息,因降維丟棄可能對后續數據處理有影響。
?
參考資料:
https://blog.csdn.net/Orange_Spotty_Cat/article/details/80394302
https://blog.csdn.net/u012162613/article/details/42177327
https://blog.csdn.net/u012162613/article/details/42192293
https://blog.csdn.net/it_a_question/article/details/78751160
總結
以上是生活随笔為你收集整理的【Python学习】 - sklearn - PCA降维相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡第一次能刷多少 信用卡首刷额度是多
- 下一篇: 【Python学习】 - 关于函数返回拷