繁体   English   中英

sklearn.pca()和n_components,线性代数难题

[英]sklearn.pca() and n_components, linear algebra dilemma

假设我想在使用sklearn的Python3中进行PCA时找到最佳组件数量。

我可以通过迭代一些n_components并在验证模型时为每个值计算总的绝对预测误差来做到这一点。

我的问题是,将n_components参数传递到PCA并从那里去有什么区别,而不是不传递它,而仅使用它从隐式最大值中获得的第一个(i)分量。

我的线性代数有点动摇,但如果我没记错的话,在两种情况下单个向量都应该相同,并按升序排列,并提供相同数量的解释方差。

很抱歉,没有提供任何代码,也没有编写两种情况来测试它们自己,但是我坐火车很长,笔记本电脑的电池在过程中用光了。 现在,我一直保持好奇心。

您对PCA的记忆是正确的。 对于所包含的每个组件,奇异值将相同。

考虑以下思想实验。 您具有少量功能。 拟合完整的PCA并迭代以找到可为您的估计器/分类器创建最佳转换的n_components的值是微不足道的。 现在,您的数据中有1,000个功能。 10,000? 十万? 1,000,000? 看到我要去哪里? 此类数据的完整PCA既琐碎又计算量大。 这就是在遍历找到最佳转换之前。

一种常见的做法是设置PCA来解释90%的方差( n_components-.9 ),这有助于避免这种情况,同时仍然提供有价值的输出。

另一个选择是使用GridSearchCV并输入要测试的n_components的值列表。 请注意,此方法还将要求您使用“ Pipeline来构造一个对象,该对象既适合PCA又适合网格中给定点的训练数据上的估计器/分类器。

顺便说一句,我将指出PCA在降维方面并不总是最佳选择,因为在某些情况下,低方差主成分具有较高的预测价值。 有一些现有的CrossValidated问题可以很好地解决这一问题。 PCA的示例中,低方差的PC是“有用的”,PCA中的低方差分量真的是噪声吗? 有什么方法可以测试吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM