scikit-learn PCA方法中百分比值的说明



在scikit-learn中,有一种叫做PCA的方法。此方法采用百分比参数。此站点对此参数解释如下:

请注意,下面的代码包含 .95 的组件数参数。 这意味着scikit-learn选择最少的校长人数 保留 95% 差异的分量。

> from sklearn.decomposition import PCA
> # Make an instance of the Model 
> pca = PCA(.95)

我对这种解释的解释有点一无所知。假设 PCA 的输出如下所示:

  • PC1 解释了 70% 的完全方差
  • PC2 解释了 15% 的完全方差
  • PC3 解释了 10% 的完全方差
  • PC4 解释了 4% 的完全方差
  • PC5 解释了 1% 的完全方差

语句 PCA(0.71( 会返回 PC1 和 PC5(因为它们都准确地解释了 71% 的方差(还是会返回 PC1 和 PC2?如果我想检索 0.5% 的方差,即语句 PCA(0.005( 将返回哪台 PC,会发生什么情况?

你触及了一个更普遍的观点,尽管在实践中一直使用,但它很少被明确提及,甚至在教程和介绍性阐述中也没有。虽然我从来没有想过这样的问题,但从初学者的角度来看,这是完全有道理的(初学者通常没有一些惯例,更有经验的从业者认为这是理所当然的,他们往往甚至没有注意到它们......

通常,当我们选择主成分的编号(例如降维、可视化等(时,我们选择一个数字k,隐含的意思是"从 PC1 开始并按顺序继续,直到(并包括(PCk"。例如,这就是 R 中caret包的preProcess函数背后的原理(可以说是在任何软件包中执行类似任务的所有函数的背后(。

换句话说,至少据我所知,在你描述的情况中,我们从不通过挑选来选择PC(例如PC2,PC4和PC5(。相反,我们总是选择一个k < n(这里n=5(,然后我们继续采用所有前kPC,即从 PC1 开始。

文档在下面说明了0 < n_components < 1的情况:

如果0 < n_components < 1和svd_solver=='full',

选择号码 的分量,使得需要的方差量 解释大于 n_components 指定的百分比。

如果这样提到它会更清楚:

如果0 < n_components < 1和svd_solver=='full',

从排序列表中选择最小组件数(降序( 根据它们各自解释的方差值,使得 需要解释的差异大于 n_components 指定的百分比

这样就不会有歧义。

之后:

PCA(0.71)将返回 PC1 和 PC2

PCA(0.005)-(不太可能的情况(将返回 PC1

最新更新