使用Python进行PCA分解:特征相关性

2 投票
1 回答
1848 浏览
提问于 2025-04-17 21:55

我现在在学习下一个主题:如何在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 的源代码

撰写回答