【问题标题】:How to interpret Scikit-learn's PCA when n_components are None?当 n_components 为 None 时如何解释 Scikit-learn 的 PCA?
【发布时间】:2020-11-23 08:29:45
【问题描述】:
我对标题中提到的问题感到困惑。 n_components=None 是否意味着输入中没有进行任何转换,或者它已经转换到新的维度空间,而不是通常的“减少”(保留少数具有高特征值的组件)并保留所有新的合成特征? documentation 为我推荐前者:
因此,None 情况导致:n_components == min(n_samples, n_features) - 1
但这并不完全清楚,另外,如果这确实意味着保留所有组件,为什么这些组件的数量等于n_components == min(n_samples, n_features) - 1,为什么不等于n_features?
但是,我找到了另一种选择(如果是 None,则放弃整个 PCA 步骤),我从未听说过在不省略一些特征向量的情况下应用 PCA...
【问题讨论】:
标签:
python
scikit-learn
pca
dimensionality-reduction
【解决方案1】:
根据官方文档-
如果 svd_solver == 'arpack',组件的数量必须严格小于 n_features 和 n_samples 的最小值。
因此, None 情况导致:
n_components == min(n_samples, n_features) - 1
所以它取决于用于特征向量的求解器的类型(可以通过参数设置)。
如果 arpack :运行 SVD 被截断为 n_components 通过 scipy.sparse.linalg.svds 调用 ARPACK 求解器。它严格要求 0
关于您关于删除整个 PCA 步骤的第二个查询,这完全取决于您要解决的问题。由于 PCA 组件按降序解释数据的变化(第一个组件解释最大方差,最后一个组件解释最小方差),因此对于特定任务来说,具有一些解释更多方差的特征可能很有用。