機器學習:數據降維(PCA、LDA)


 在機器學習領域中,降維是非常有必要的,其原因如下:

  • 高維度的特征由於維度災難 (curse of dimension)的影響,往往會導致過擬合。
  • 高維特征中由於特征維度間的相關性,往往有較多冗余信息,會引入不必要的計算。

1.無監督數據降維技術——PCA(principal component analysis)

1.1 PCA的目標:在高維數據中找到最大方差的方向,並將數據映射到一個低維度的子空間上。以新特征的坐標是相互正交的為約束條件,新的子空間上正交的坐標軸可被解釋為方差最大的方向,即為主成分。

1.2 PCA的流程:

       1.2.1 對原始d維數據集做標准化處理

       1.2.2 構造樣本的協方差矩陣

       1.2.3 計算協方差矩陣的特征值和相應的特征向量

       1.2.4 選擇與前k個最大特征值對應的特征向量,其中k為新特征空間的維度(k<=d)

       1.2.5 通過前k個特征向量構建映射矩陣W

       1.2.6 通過映射矩陣W將d維的數據集X轉換到新的k維特征子空間

        因為要將數據壓縮到一個新的特征子空間上來實現數據降維,所以只選擇那些包含最多信息(方差最大)的特征向量(主成分)組成子集。由於特征值的大小決定了特征向量的重要性,因此需要將特征值降序排列,我們感興趣的是排在前k個特征值對應的特征向量。

1.3 PCA的數學原理

      1.3.1 任何一個矩陣的協方差矩陣都是實對稱矩陣,協方差矩陣主對角線上的元素是原矩陣各行元素的方差,其他元素為原矩陣各不同行的協方差

      1.3.2 若原矩陣X(n*m型)通過PCA降維后得到新矩陣Y(k*m型,k<n),假定Y=PX,且Y的協方差矩陣為D,為了使得矩陣Y在各新維度上的值盡可能分散以保留更多的信息,則D的主對角線上的元素越大越好;同時為了避免信息被重復表示,不同新維度之間的相關性越小越好,因此矩陣D非主對角線上的元素應為零,即D為對角矩陣

      1.3.3 假定原矩陣X的協方差矩陣為C,則D=(1/m)*(PX)*(PX的轉置)=P*C*(P的轉置),若D為k維的對角矩陣,則P取【Q的轉置矩陣】的前K行即滿足要求,其中Q為原矩陣X各特征值降序排列后對應的各矩陣向量構成的矩陣。

       鑒於公式輸入不方便,詳盡、清晰易懂的推到與分析,請參考如下網址:http://blog.codinglabs.org/articles/pca-tutorial.html

1.4 運用sklearn進行主成分分析

>>>from sklearn.datasets import load_wine
>>>from sklearn.preprocessing import StandardScaler
>>>from sklearn.decomposition import PCA
>>>from sklearn.linear_model import LogisticRegression
>>>from sklearn.model_selection import train_test_split,learning_curve,cross_val_score

>>>X = load_wine().data
>>>y = load_wine().target
>>>X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.30,random_state=0)

>>>sc=StandardScaler()
>>>pca=PCA(n_components=None)

>>>X_train_scaled=sc.fit_transform(X_train)
>>>X_train=pca.fit_transform(X_train_scaled)

       #將參數n_components設置為None,則explained_variance_ratio_屬性將按照方差貢獻率降序返回所有的主成分,而不進行降維操作
       #根據方差貢獻率的分布在決定n_components的合理數量,例如方差貢獻率取5%以上,則n_components取5
>>>pca.explained_variance_ratio_

     array([ 0.37329648,  0.18818926,  0.10896791,  0.07724389,  0.06478595,
0.04592014, 0.03986936, 0.02521914, 0.02258181, 0.01830924,
0.01635336, 0.01284271, 0.00642076])

        #設置n_components=5
>>>pca=PCA(n_components=5)
>>>X_train=pca.fit_transform(X_train_scaled)
>>>pca.explained_variance_ratio_

    array([ 0.37329648,  0.18818926,  0.10896791,  0.07724389,  0.06478595])

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com