Python PCA sklearn

Posted

技术标签:

【中文标题】Python PCA sklearn【英文标题】: 【发布时间】:2021-03-24 12:31:48 【问题描述】:

我正在尝试将 PCA 降维应用于 684 x 1800(观察 x 特征)的数据集。我想减少功能的数量。当我执行 PCA 时,它告诉我要获得 100% 的解释方差,应该有 684 个特征,所以我的数据应该是 684 x 684。 是不是太奇怪了?我的意思是,完全相同的数字...

是否有任何解释或我错误地应用了 PCA?

我知道需要 684 个分量来解释整个方差,因为我绘制了 .explained_variance_ratio 的累积总和,它用 684 个分量求和 1。也因为下面的代码。

我的代码基本上是:

pca = PCA(0.99999999999)
pca.fit(data_rescaled)
reduced = pca.transform(data_rescaled)
print(reduced.shape)
print(pca.n_components_)

当然,我不想保留整个方差,95% 也是可以接受的。 这只是一个奇妙的意外吗?

非常感谢

【问题讨论】:

【参考方案1】:

您正确使用了PCA,这是预期的行为。对此的解释与 PCA 背后的基础数学有关,用 684 个分量(即观察数)来解释 100% 的方差当然不是巧合。

代数中有一个定理告诉你,如果你有一个维度为(n, m)的矩阵A,那么rank(A) <= min(n, m)。在您的情况下,您的数据矩阵的秩最多为 684,即观察数。为什么这是相关的?因为这从本质上告诉您,您可以重写数据,使最多 684 个特征是线性独立的,这意味着所有剩余特征都是其他特征的线性组合。因此,在这个新空间中,您可以保留有关您的样本的所有信息,其中不超过 684 个特征。这也是 PCA 所做的。

总而言之,您观察到的只是 PCA 分解的数学属性。

【讨论】:

非常感谢MaximeKan!!但重点是我的数据集不是684维的,而是1800维的数据集和684个观测值。这就是我觉得奇怪的地方,PCA 给我的组件数量与观察结果完全相同。最后,如果我想解释所有差异,他会返回一个 684 X 684 数据集。 @Ale,感谢您的评论,我意识到我误读了您的问题,我会在这里更新这些内容:) 再次感谢!你这么一说,好像就很明显了!非常感谢,真的。

以上是关于Python PCA sklearn的主要内容,如果未能解决你的问题,请参考以下文章

树莓派下安装PCA9685的python驱动程序

Python:是否可以对具有多个维度的向量进行PCA?

使用 Python 进行 PCA 分析和绘图

[python机器学习及实践]Sklearn实现主成分分析(PCA)

PCA主成分分析算法专题Python机器学习系列(十五)

带有 Python 的 PCA:特征向量不是正交的