主成分分析最重要的原始特征

时间:2017-02-23 17:14:45

标签: python scikit-learn pca feature-selection

我正在做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不是进行此类分析的正确方法(我应该使用特征选择方法)吗?

1 个答案:

答案 0 :(得分:5)

component_属性不是查找要素重要性的正确位置。两个阵列(即两个组件PC1和PC2)中的载荷告诉您原始矩阵如何被每个特征转换(合在一起,它们形成一个旋转矩阵)。但是他们没有告诉你每个组件对描述转换的特征空间有多大贡献,所以你还不知道如何比较两个组件的负载。

但是,您链接的answer实际上会告诉您要使用的内容:explained_variance_ratio_属性。此属性告诉您每个主要组件解释了您的要素空间中有多少差异:

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

这意味着第一个原则组件几乎可以解释99%的方差。您从components_知道PC1具有第二个功能的最高负载。因此,功能2是数据空间中最重要的功能。功能3是下一个最重要的功能,因为它在PC1中具有第二高的负载。

在PC2中,绝对载荷几乎在要素2和要素3之间交换。但是,由于PC2几乎没有解释整体方差,这可以忽略不计。