Chu*_*aka 26 python pca scikit-learn
大师,
当选择主成分数(k)时,我们选择k作为最小值,以便保留例如99%的方差.
但是,在Python Scikit学习中,我不是100%肯定pca.explained_variance_ratio_ = 0.99等于"99%的方差被保留"?谁能开导?谢谢.
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)