首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python PCA sklearn

Python PCA sklearn
EN

Stack Overflow用户
提问于 2020-12-14 02:48:32
回答 1查看 100关注 0票数 1

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

有没有什么解释,或者我用错了PCA?

我知道需要684个分量来解释整个方差,因为我绘制了.explained_variance_ratio的累积和,结果是1乘以684个分量。也是因为下面的代码。

我的代码基本上是:

代码语言:javascript
复制
pca = PCA(0.99999999999)
pca.fit(data_rescaled)
reduced = pca.transform(data_rescaled)
print(reduced.shape)
print(pca.n_components_)

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

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 03:30:42

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65279353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档