Python scikit学习pca.explained_variance_ratio_ cutoff

Chu*_*aka 26 python pca scikit-learn

大师,

当选择主成分数(k)时,我们选择k作为最小值,以便保留例如99%的方差.

但是,在Python Scikit学习中,我不是100%肯定pca.explained_variance_ratio_ = 0.99等于"99%的方差被保留"?谁能开导?谢谢.

  • Python Scikit学习PCA手册就在这里

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

Cur*_* F. 55

是的,你几乎是对的.该pca.explained_variance_ratio_参数返回由每个维度解释的方差的向量.因此,pca.explained_variance_ratio_[i] 给出仅由i + 1st维度解释的方差.

你可能想做pca.explained_variance_ratio_.cumsum().这将返回一个向量x,以x[i]返回由第一个i + 1维度解释的累积方差.

import numpy as np
from sklearn.decomposition import PCA

np.random.seed(0)
my_matrix = np.random.randn(20, 5)

my_model = PCA(n_components=5)
my_model.fit_transform(my_matrix)

print my_model.explained_variance_
print my_model.explained_variance_ratio_
print my_model.explained_variance_ratio_.cumsum()
Run Code Online (Sandbox Code Playgroud)
[ 1.50756565  1.29374452  0.97042041  0.61712667  0.31529082]
[ 0.32047581  0.27502207  0.20629036  0.13118776  0.067024  ]
[ 0.32047581  0.59549787  0.80178824  0.932976    1.        ]
Run Code Online (Sandbox Code Playgroud)

因此,在我的随机玩具数据中,如果我选择,k=4我会保留93.3%的差异.


Yan*_*lem 22

虽然这个问题超过2年,但我想提供更新.我想做同样的事情,看起来sklearn现在提供了开箱即用的功能.

正如文档中所述

如果0 <n_components <1且svd_solver =='full',请选择组件数,使得需要解释的方差量大于n_components指定的百分比

所以现在需要的代码

my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
Run Code Online (Sandbox Code Playgroud)