当选择主成分数(k)时,我们选择k作为最小值,例如99%的方差被保留。
但是,在Python学习中,我不能100%确定pca.explained_variance_ratio_ = 0.99是否等于"99%的方差被保留“?有人能启发一下吗?谢谢。
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA
发布于 2015-09-30 03:32:38
是的,你几乎是对的。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()[ 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. ]因此,在我的随机玩具数据中,如果我选择k=4,我将保留93.3%的方差。
发布于 2017-11-16 08:46:30
虽然这个问题已经超过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)发布于 2020-03-26 23:49:04
这对我有效,更少的打字在PCA部分。其馀部分是为了方便而增加的。只需要在早期阶段定义“数据”。
import sklearn as sl
from sklearn.preprocessing import StandardScaler as ss
from sklearn.decomposition import PCA
st = ss().fit_transform(data)
pca = PCA(0.80)
pc = pca.fit_transform(st) # << to retain the components in an object
pc
#pca.explained_variance_ratio_
print ( "Components = ", pca.n_components_ , ";\nTotal explained variance = ",
round(pca.explained_variance_ratio_.sum(),5) )https://stackoverflow.com/questions/32857029
复制相似问题