sklearn.pca() 和n_components,线性代数困境
sklearn.pca() and n_components, linear algebra dilemma
假设我想在 Python3 中使用 sklearn 进行 PCA 时找到最佳组件数。
我会通过迭代一些 n_components
并在验证模型时计算每个值的总绝对预测误差来做到这一点。
我的问题是,将 n_components
参数传递给 PCA
和从那里传递,与不传递它并仅使用第一个 (i) 组件相比,有什么区别它获得的隐式最大值。
我的线性代数有点不稳定,但如果我没记错的话,单个向量在两种情况下应该是相同的,并且按升序排列,并提供相同数量的解释方差。
很抱歉,我没有提供任何代码,也没有自己编写这两个场景来测试它们,但我正在长途火车旅行中,我的笔记本电脑电池 运行 没电了。现在我被好奇心困住了。
你对 PCA 的记忆是正确的。包含的每个组件的奇异值都相同。
考虑以下思想实验。
你有少量的特征。拟合完整的 PCA 并迭代以找到为 estimator/classifier 创建最佳转换的 n_components
的值是微不足道的。
现在您的数据中有 1,000 个特征。一万?十万?一百万?看到我要去哪里了吗?此类数据的完整 PCA 既无意义又计算量大。那是在迭代以找到最佳转换之前。
一种常见的做法是将 PCA 设置为解释 90% 的方差 (n_components-.9
),这有助于避免这种情况,同时仍然提供有价值的输出。
另一种选择是使用 GridSearchCV
and input a list of values for n_components
that you would like to test. Note that this approach will also require you to use Pipeline
构建一个对象,该对象将适合您的 PCA 和 estimator/classifier 对网格中给定点的训练数据。
顺便说一句,在降维方面,PCA 并不总是最佳选择,因为在某些情况下,低方差主成分具有高预测值。有一些现有的 CrossValidated 问题很好地涵盖了这一点。 Examples of PCA where PCs with low variance are “useful” and Low variance components in PCA, are they really just noise? Is there any way to test for it?
假设我想在 Python3 中使用 sklearn 进行 PCA 时找到最佳组件数。
我会通过迭代一些 n_components
并在验证模型时计算每个值的总绝对预测误差来做到这一点。
我的问题是,将 n_components
参数传递给 PCA
和从那里传递,与不传递它并仅使用第一个 (i) 组件相比,有什么区别它获得的隐式最大值。
我的线性代数有点不稳定,但如果我没记错的话,单个向量在两种情况下应该是相同的,并且按升序排列,并提供相同数量的解释方差。
很抱歉,我没有提供任何代码,也没有自己编写这两个场景来测试它们,但我正在长途火车旅行中,我的笔记本电脑电池 运行 没电了。现在我被好奇心困住了。
你对 PCA 的记忆是正确的。包含的每个组件的奇异值都相同。
考虑以下思想实验。
你有少量的特征。拟合完整的 PCA 并迭代以找到为 estimator/classifier 创建最佳转换的 n_components
的值是微不足道的。
现在您的数据中有 1,000 个特征。一万?十万?一百万?看到我要去哪里了吗?此类数据的完整 PCA 既无意义又计算量大。那是在迭代以找到最佳转换之前。
一种常见的做法是将 PCA 设置为解释 90% 的方差 (n_components-.9
),这有助于避免这种情况,同时仍然提供有价值的输出。
另一种选择是使用 GridSearchCV
and input a list of values for n_components
that you would like to test. Note that this approach will also require you to use Pipeline
构建一个对象,该对象将适合您的 PCA 和 estimator/classifier 对网格中给定点的训练数据。
顺便说一句,在降维方面,PCA 并不总是最佳选择,因为在某些情况下,低方差主成分具有高预测值。有一些现有的 CrossValidated 问题很好地涵盖了这一点。 Examples of PCA where PCs with low variance are “useful” and Low variance components in PCA, are they really just noise? Is there any way to test for it?