1. 程式人生 > >通過PCA選擇合適降維維度

通過PCA選擇合適降維維度

PCA的作用有:降低特徵值維度,提高了計算效率,但丟失了資訊。資訊在PCA中我們用方差來表示。

一、PCA引數、屬性簡介

1.介紹PCA方法中引數:

n_components:
  預設值為保留所有特徵值維度,即不進行主成分降維
  取大於等於1的整數時,即指定我們希望降維後的維數;
  取0-1的浮點數時,即指定降維後的方差和佔比,比例越大,保留的資訊越多。系統會自行計算保留的維度個數。

2.介紹PCA中的屬性:

components_:降維後,保留的成分。每一行代表一個主成分,各成分按方差大小排序。
explained_variance_:降維後 ,各成分的方差
explained_variance_ratio_:降維後,各成分的方差佔比

二、觀察 在保留不同的維度個數時的方差和

橫座標:表示保留的維度個數

縱座標:降維後的所有成分的方差和

通過下圖,我們可以發現隨著降維個數的增加,方差和佔比是先快速增長,然後就平穩增長了。

當降維後的維度個數為20時,所有成分的方差和為90%,即約10%的資訊被丟失了。

下面顯示上圖的繪製程式碼:

if __name__ == '__main__':
    #獲得資料,X為特徵值,y為標記值
    digits=datasets.load_digits()
    X=digits.data
    y=digits.target
    pca=PCA( )
    #pca=PCA(n_components=0.9)
    pca.fit(X,y)
    ratio=pca.explained_variance_ratio_
    print("pca.components_",pca.components_.shape)
    print("pca_var_ratio",pca.explained_variance_ratio_.shape)
    #繪製圖形
    plt.plot([i for i in range(X.shape[1])],
             [np.sum(ratio[:i+1]) for i in range(X.shape[1])])
    plt.xticks(np.arange(X.shape[1],step=5))
    plt.yticks(np.arange(0,1.01,0.05))
    plt.grid()
    plt.show()

三、觀察驗證結果的正確性

將上文中的程式碼

pca=PCA( )替換為pca=PCA(n_components=0.9)

觀察列印結果:由64維降維至21維

pca.components_ (21, 64)
pca_var_ratio (21,)