首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python学习pca.explained_variance_ratio_截止

Python学习pca.explained_variance_ratio_截止
EN

Stack Overflow用户
提问于 2015-09-30 03:00:12
回答 3查看 85.3K关注 0票数 45

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

但是,在Python学习中,我不能100%确定pca.explained_variance_ratio_ = 0.99是否等于"99%的方差被保留“?有人能启发一下吗?谢谢。

  • 学习PCA手册在这里

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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维度解释的累积方差。

代码语言:javascript
复制
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()
代码语言:javascript
复制
[ 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%的方差。

票数 103
EN

Stack Overflow用户

发布于 2017-11-16 08:46:30

虽然这个问题已经超过2年了,但我想提供一个关于这个问题的更新。我也想做同样的事情,现在看来,sklearn提供了这个现成的功能。

文档所述

如果0< n_components <1,而svd_solver ==‘full’,则选择组件数,以便需要解释的方差量大于n_components指定的百分比

所以所需的代码现在是

代码语言:javascript
复制
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
票数 53
EN

Stack Overflow用户

发布于 2020-03-26 23:49:04

这对我有效,更少的打字在PCA部分。其馀部分是为了方便而增加的。只需要在早期阶段定义“数据”。

代码语言:javascript
复制
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)  )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32857029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档