2017-02-23 28 views
3

我正在做PCA,我對哪些原始特徵最重要感興趣。讓我來說明這一個例子:主要組件分析的最重要的原始特徵

import numpy as np 
from sklearn.decomposition import PCA 
X = np.array([[1,-1, -1,-1], [1,-2, -1,-1], [1,-3, -2,-1], [1,1, 1,-1], [1,2,1,-1], [1,3, 2,-0.5]]) 
print(X) 

,輸出:

[[ 1. -1. -1. -1. ] 
[ 1. -2. -1. -1. ] 
[ 1. -3. -2. -1. ] 
[ 1. 1. 1. -1. ] 
[ 1. 2. 1. -1. ] 
[ 1. 3. 2. -0.5]] 

直觀地說,一個已經可以說是功能1和功能4不很重要,因爲他們的低方差。讓我們將這套PCA:

pca = PCA(n_components=2) 
pca.fit_transform(X) 
comps = pca.components_ 

輸出:

array([[ 0.  , 0.8376103 , 0.54436943, 0.04550712], 
     [-0.  , 0.54564656, -0.8297757 , -0.11722679]]) 

此輸出表示各兩個主成分的每個原始特徵的重要性(見this僅供參考)。換句話說,對於第一個主成分,特徵2是最重要的,然後是特徵3.對於第二個主成分,特徵3看起來最重要。

問題是,哪個功能最重要,最重要的是哪一秒?我可以使用component_屬性嗎?或者我錯了,PCA不是做這種分析的正確方法(我應該使用特徵選擇方法)?

回答

2

component_屬性不是查找特徵重要性的正確位置。兩個陣列(即兩個組件PC1和PC2)中的加載告訴你,每個特徵如何轉換原始矩陣(一起組成一個旋轉矩陣)。但是他們沒有告訴你每個組件對描述轉換後的特徵空間有多大貢獻,所以你還不知道如何比較兩個組件的加載。

但是,您鏈接的answer實際上告訴您要使用什麼:explained_variance_ratio_屬性。這個屬性告訴你多少差異在您的功能空間是通過各主成分解釋:

In [5]: pca.explained_variance_ratio_ 
Out[5]: array([ 0.98934303, 0.00757996]) 

這意味着第一prinicpal組件explaines方差的近99%。您從components_知道PC1的第二個功能的載入量最高。因此,特徵2是數據空間中最重要的特徵。特徵3是下一個最重要的特徵,因爲它在PC1中具有第二高的負載。

在PC2中,絕對加載幾乎在特徵2和特徵3之間交換。但是由於PC2幾乎沒有解釋整體差異,所以這可以忽略不計。

+0

我們可以對特徵2的這個特徵重要性做一個測量嗎?類似0.9893 * 0.8376? – Guido

+0

我從來沒有見過任何人以你描述的方式使用解釋的方差和加載。你正在做的是基本上通過組件的貢獻來衡量負載。這是不尋常的,但它應該工作。 – Schmuddi

+0

既然你說這很不尋常,我對其他人對這個問題的看法非常感興趣 – Guido

相關問題