通過PCA選擇合適降維維度
阿新 • • 發佈:2018-12-31
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,)