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

Gui*_*ido 6 python pca feature-selection scikit-learn

我正在做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)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

[[ 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]]
Run Code Online (Sandbox Code Playgroud)

直观地,人们已经可以说特征1和特征4由于它们的低方差而不是非常重要.让我们在这个集合上应用pca:

pca = PCA(n_components=2)
pca.fit_transform(X)
comps = pca.components_
Run Code Online (Sandbox Code Playgroud)

输出:

array([[ 0.        ,  0.8376103 ,  0.54436943,  0.04550712],
       [-0.        ,  0.54564656, -0.8297757 , -0.11722679]])
Run Code Online (Sandbox Code Playgroud)

此输出表示每个原始特征对于两个主要组件中的每一个的重要性(请参阅参考).换句话说,对于第一主成分,特征2是最重要的,然后是特征3.对于第二主成分,特征3看起来最重要.

问题是,哪个功能最重要,哪一个最常见?我可以使用这个component_属性吗?或者我错了,PCA不是进行此类分析的正确方法(我应该使用特征选择方法)吗?

Sch*_*ddi 6

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

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

In [5]: pca.explained_variance_ratio_
Out[5]: array([ 0.98934303,  0.00757996])
Run Code Online (Sandbox Code Playgroud)

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

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

  • 由于此问题在SO上似乎未引起太多关注,因此您可能想在https://stats.stackexchange.com上对此问题进行询问(类似“您能否将PC的因子负载乘以解释了PC的差异,以评估PCA中功能的重要性?”)。我很想看看那里的知识渊博的人对此有何评论。 (2认同)