2017-02-23 86 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

相关问题