Python PCA sklearn

Python PCA sklearn

我正在尝试将 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%也是可以接受的。 这只是一个奇妙的机缘巧合?

非常感谢

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

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

综上所述,您观察到的只是 PCA 分解的数学 属性。