我正在做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]])

这个输出代表了两个主要组件中每一个原始特征的重要性(参见AA>以供参考)。换言之,对于第一主成分,特征2是最重要的,然后是特征3。对于第二主成分,特征3看起来最重要。
问题是,哪一个特征最重要,哪一个最重要?我可以使用component_属性吗?或者我错了,PCA不是进行这种分析的正确方法(我应该改用特征选择方法吗)?

最佳答案

属性不是查找功能重要性的正确位置。两个数组中的负载(即两个组件PC1和PC2)告诉你如何通过每个特征变换原始矩阵(它们一起形成旋转矩阵)。但是它们并没有告诉你每个组件对描述转换的特征空间有多少贡献,所以你还不知道如何比较这两个组件的负载。
但是,您链接的answer实际上告诉您应该使用什么:component_属性。这个属性告诉你,每个主成分解释了你的特征空间中的差异有多大:

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

这意味着第一个PrimeCar分量解释了几乎99%的方差。从explained_variance_ratio_中可以知道,pc1对于第二个特性具有最高的负载。因此,特征2是数据空间中最重要的特征。特征3是下一个最重要的特征,因为它在PC1中具有第二高负载。
在PC2中,绝对负载几乎在特征2和特征3之间交换。但是由于PC2几乎没有解释总体方差,这是可以忽略的。

关于python - 主成分分析的最重要的原始功能),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42422201/

10-12 19:37