Python scikit 学习 pca.explained_variance_ratio_ 截止
Python scikit learn pca.explained_variance_ratio_ cutoff
在选择主成分数 (k) 时,我们选择 k 为最小值,以便保留例如 99% 的方差。
但是,在 Python Scikit learn 中,我不是 100% 确定 pca.explained_variance_ratio_ = 0.99
等于“保留 99% 的方差”?有谁能指教吗?谢谢
- Python Scikit 学习 PCA 手册在这里
是的,你几乎是对的。 pca.explained_variance_ratio_
参数 return 是每个维度解释的方差向量。因此 pca.explained_variance_ratio_[i]
给出仅由第 i+1 维解释的方差。
您可能想要 pca.explained_variance_ratio_.cumsum()
。这将 return 一个向量 x
使得 x[i]
return 由第一个 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% 的方差。
虽然这个问题已经存在了 2 年多了,但我想提供一个更新。
我想做同样的事情,看起来 sklearn 现在提供了这个开箱即用的功能。
如 docs
中所述
if 0 < n_components < 1 and svd_solver == ‘full’, select the number of components such that the amount of variance that needs to be explained is greater than the percentage specified by n_components
所以现在需要的代码是
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
这对我很有用,在 PCA 部分打字更少。
其余的是为了方便而添加的。只有'data'需要在前期定义。
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) )
在选择主成分数 (k) 时,我们选择 k 为最小值,以便保留例如 99% 的方差。
但是,在 Python Scikit learn 中,我不是 100% 确定 pca.explained_variance_ratio_ = 0.99
等于“保留 99% 的方差”?有谁能指教吗?谢谢
- Python Scikit 学习 PCA 手册在这里
是的,你几乎是对的。 pca.explained_variance_ratio_
参数 return 是每个维度解释的方差向量。因此 pca.explained_variance_ratio_[i]
给出仅由第 i+1 维解释的方差。
您可能想要 pca.explained_variance_ratio_.cumsum()
。这将 return 一个向量 x
使得 x[i]
return 由第一个 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% 的方差。
虽然这个问题已经存在了 2 年多了,但我想提供一个更新。 我想做同样的事情,看起来 sklearn 现在提供了这个开箱即用的功能。
如 docs
中所述if 0 < n_components < 1 and svd_solver == ‘full’, select the number of components such that the amount of variance that needs to be explained is greater than the percentage specified by n_components
所以现在需要的代码是
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
这对我很有用,在 PCA 部分打字更少。 其余的是为了方便而添加的。只有'data'需要在前期定义。
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) )