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