说我想在使用sklearn的Python3中进行PCA时找到最佳的组件数量。
我将通过迭代一些n_components
并在验证模型时为每个值计算总的绝对预测误差来做到这一点。
我的问题是,将n_components
参数传递到PCA
和从那里去有什么区别,而不是不传递它,而仅使用隐式max中的前(i)个分量珍惜它。
我的线性代数有点不稳定,但是如果我没记错的话,两种情况下的单个向量都应该相同,并按升序排列,并提供相同数量的解释方差。
很抱歉,我没有提供任何代码,也没有编写这两种方案进行自我测试,但是我坐火车很长,笔记本电脑的电池在过程中用光了。现在,我被好奇心所困。
答案 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?