在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
(,然后我们继续采用所有前k
PC,即从 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