使用Python进行PCA分解:特征相关性
我现在在学习下一个主题:如何在Python中使用PCA/SVD进行特征选择和识别? 现在,我们使用PCA方法在Python中对数据集进行分解,使用的是sklearn.decomposition.PCA
。通过使用属性components_
,我们可以得到所有的成分。现在,我们有一个非常相似的目标:想要只取前几个成分(这部分不成问题),并查看每个PCA成分所占的输入特征比例(以了解哪些特征对我们来说更重要)。这该怎么做呢? 另一个问题是,Python库中是否还有其他主成分分析的实现?
1 个回答
7
每个主成分分析(PCA)组件的输入特征比例是什么?我们怎么知道哪些特征对我们来说更重要?
在这个 components_
数组中,它的形状是 (n_components, n_features)
,所以 components_[i, j]
其实已经告诉你特征 j
对于组件 i
的贡献权重(带符号的)。
如果你想找出对组件 i
贡献最大的三个特征的索引,不管它们的符号如何,你可以这样做:
numpy.abs(pca.component_[i]).argsort()[::-1][:3]
注意:[::-1]
这个写法可以反转数组的顺序:
>>> import numpy as np
>>> np.array([1, 2, 3])[::-1]
array([3, 2, 1])
还有一个问题是,Python库里有没有其他的主成分分析实现?
PCA 实际上就是对中心化数据集进行的截断奇异值分解。如果你愿意,可以直接使用 numpy.linalg.svd
。想了解更多细节,可以查看 scikit-learn 中 PCA 的源代码。