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

时间:2018-07-11 17:18:23

标签: python scikit-learn data-science pca data-analysis

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

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

我的问题是,将n_components参数传递到PCA和从那里去有什么区别,而不是不传递它,而仅使用隐式max中的前(i)个分量珍惜它。

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

很抱歉,我没有提供任何代码,也没有编写这两种方案进行自我测试,但是我坐火车很长,笔记本电脑的电池在过程中用光了。现在,我被好奇心所困。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

顺便说一句,我将指出PCA在降维方面并不总是最佳选择,因为在某些情况下,低方差主成分具有较高的预测价值。有一些现有的CrossValidated问题可以很好地解决这一问题。 Examples of PCA where PCs with low variance are “useful”Low variance components in PCA, are they really just noise? Is there any way to test for it?