【问题标题】:How to find most contributing features to PCA?如何找到对 PCA 贡献最大的功能?
【发布时间】:2016-10-27 23:45:35
【问题描述】:

我正在对我的数据(约 250 个特征)运行 PCA,并看到所有点都聚集在 3 个 blob 中。

是否可以查看 250 个功能中的哪一个对结果的贡献最大?如果有怎么办?

(使用 Scikit-learn 实现)

【问题讨论】:

标签: scikit-learn pca


【解决方案1】:

让我们看看维基百科是怎么说的:

PCA 在数学上被定义为一种正交线性变换,它将数据变换到一个新坐标系统,使得数据的某个投影的最大方差位于第一个坐标(称为第一个坐标)上主成分),第二个坐标上的第二大方差,依此类推。

要从较小的原始空间中了解向量的“影响”程度,您还必须对它们进行投影。由以下人员完成:

res = pca.transform(np.eye(D))
  • np.eye(n) 创建一个 n x n 对角矩阵(对角线为 1,否则为 0)。
  • 因此,np.eye(D) 是您在原始特征空间中的特征
  • res 是您的特征在较低空间的投影。

有趣的是res 是一个D x d 矩阵,其中 res[i][j] 表示“i 对组件 j 贡献了多少特征”

然后,您可以将列相加得到一个D x 1 矩阵(称之为贡献,其中每个contribution[i] 是特征i 的总贡献。

对它进行排序,您会发现贡献最大的功能:)

不清楚,可以添加任何类型的附加信息。

希望这会有所帮助, 点滴

【讨论】:

  • 感谢详细的解释,很有帮助!
  • 为什么np.eye(D) 特征在原始特征空间中?
  • 只是因为它们形成了一个正交集。想想 3D 空间中的 (x, y, z)。它们的坐标是 (0, 0, 1), (0, 1, 0), (1, 0, 0) 对吧? np.eye 创建对角线为 1,否则为 0 的矩阵,因此,[ [1, 0, 0] [0, 1, 0], [0, 0, 1]]。如果你没有直觉,它可能看起来像它的魔法,但它不是。那只是应用一些定义。无法在评论中详细说明。需要时询问
  • @pltrdy 我明白了。但是对于scikit-learnpca.components_ 可以简单地得到你的res 的转置。
  • 嗯,我不太明白你的意思。 pca.components_ & transpose(res) 不是一回事。
猜你喜欢
  • 2013-12-14
  • 2021-05-13
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2014-12-08
  • 2013-06-17
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多