使用 scikit-learn PCA 找到具有最高方差的维度

Posted

技术标签:

【中文标题】使用 scikit-learn PCA 找到具有最高方差的维度【英文标题】:Finding the dimension with highest variance using scikit-learn PCA 【发布时间】:2013-02-28 10:12:18 【问题描述】:

我需要使用 pca 来识别某组数据中方差最大的维度。我正在使用 scikit-learn 的 pca 来执行此操作,但我无法从 pca 方法的输出中确定我的数据中方差最大的组件是什么。请记住,我不想消除这些维度,只是识别它们。

我的数据被组织成一个包含 150 行数据的矩阵,每行有 4 个维度。我的做法如下:

pca = sklearn.decomposition.PCA()
pca.fit(data_matrix)

当我打印 pca.explained_variance_ratio_ 时,它会输出从最高到最低排序的方差比数组,但它没有告诉我它们对应的数据中的哪个维度(我试过改变矩阵上列的顺序,得到的方差比数组是相同的)。

打印 pca.components_ 给了我一个 4x4 矩阵(我将组件的原始数量作为参数留给 pca),其中一些值我无法理解...根据 scikit 的文档的含义,它们应该是具有最大方差的分量(也许是特征向量?),但没有迹象表明这些值指的是哪个维度。

转换数据也无济于事,因为维度发生了变化,我真的不知道它们最初是哪一个。

有什么方法可以通过 scikit 的 pca 获取这些信息?谢谢

【问题讨论】:

components_ 的第一行是最大方差的方向,如文档所述。我不完全确定有什么不清楚的地方。 explained_variance_ratio_ 中的条目对应于components_ 的行。你的意思是“没有迹象表明这些值指的是哪个维度”? 好吧,我的问题是,考虑到我的数据中有 4 个维度,我只想保留方差最大的 2 个维度的维度,我怎么知道我的数据有哪些维度?如果我使用 n_components=2 应用 PCA,则保留。例如,假设我的数据的第二维和第四维具有最高的方差,但我不知道这一点。我想申请 PCA 并有一些方法可以从结果中获取这些信息。同样,我不需要转换数据! 【参考方案1】:

返回的 pca.explained_variance_ratio_ 是主成分的方差。您可以使用它们来查找您的数据可以通过 pca 更好地转换的维度(组件)。您可以为此使用阈值(例如,您可以计算有多少方差大于 0.5 等)。之后,您可以通过 PCA 使用等于高于所用阈值的主成分的维数(分量)来转换数据。缩减到这些维度的数据与原始数据中的维度数据不同。

您可以从此链接查看代码:

http://scikit-learn.org/dev/tutorial/statistical_inference/unsupervised_learning.html#principal-component-analysis-pca

【讨论】:

有帮助,但不能解决我的问题。当我使用 PCA 转换数据并选择例如 n_components=2 时,我需要知道原始数据的哪些维度将被消除。在这种情况下,将消除 2 个维度,但知道哪些维度是我的问题。 PCA 不会消除维度并将其他维度与原始数据隔离开来。它会在多个维度上转换您的数据,这些维度的数据与原始数据完全不同。 是的,你是对的。我一直在再次阅读 PCA,由于您所说的,我想要阅读的内容没有意义。好吧,我接受你的回答!谢谢。 第一个 PC 指向最大方差的方向。这个向量属于其最大值的索引是最大方差的维度。 @mad 非常感谢您的评论。我意识到 PCA 是如何工作的。另一个问题,如果我确实想删除 OP 提出的功能,我应该使用什么方法?

以上是关于使用 scikit-learn PCA 找到具有最高方差的维度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scikit-learn PCA 进行特征缩减并知道哪些特征被丢弃

在 scikit-learn 中从 PCA 中查找和利用特征值和特征向量

scikit-learn 内核 PCA 解释方差

sklearn中的PCA

scikit-learn PCA 没有“分数”方法

scikit-learn 中的 PCA 投影和重建