我正在尝试将PCA降维应用于684x1800(观察值x特征)的数据集。我想减少功能的数量。当我执行PCA时,它告诉我要获得解释的100%方差,应该有684个特征,所以我的数据应该是684x684。是不是太奇怪了?我是说,完全一样的数字...
有没有什么解释,或者我用错了PCA?
我知道需要684个分量来解释整个方差,因为我绘制了.explained_variance_ratio的累积和,结果是1乘以684个分量。也是因为下面的代码。
我的代码基本上是:
pca = PCA(0.99999999999)
pca.fit(data_rescaled)
reduced = pca.transform(data_rescaled)
print(reduced.shape)
print(pca.n_components_)当然,我不想保留整个方差,95%也是可以接受的。这只是一个奇妙的意外发现吗?
非常感谢
发布于 2020-12-14 03:30:42
您正确地使用了PCA,这是预期的行为。对此的解释与PCA背后的数学基础有关,当然也不是巧合,100%的方差可以用684个分量来解释,这是观察值的数量。
代数中有一个定理告诉你,如果你有一个维数为(n, m)的矩阵,那么rank(A) <= min(n, m)。在您的例子中,您的数据矩阵的排名最多为684,这是观察值的数量。为什么这是相关的?因为这告诉你,基本上,你可以用这样的方式重写你的数据,最多有684个特征是线性独立的,这意味着所有剩余的特征都是其他特征的线性组合。因此,在这个新的空间中,您可以使用不超过684个特征来保留有关样本的所有信息。这也是PCA所做的。
总而言之,您所观察到的只是PCA分解的一个数学属性。
https://stackoverflow.com/questions/65279353
复制相似问题