2015-09-30 5 views
9

教祖、Pythonはpca.explained_variance_ratio_遮断

主成分(k)の数を選択する際、我々は、例えば、分散の99%が、保持されるように最小値にKを選択し学ぶscikit。

しかし、Python Scikitでは、pca.explained_variance_ratio_ = 0.99が「分散の99%が保持されている」と100%確信していません。誰でも啓発できますか?ありがとう。

  • ザ・パイソンScikit PCAマニュアルを学ぶはい、あなたはほぼ正しいですここ

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

答えて

29

です。 pca.explained_variance_ratio_パラメータは、各次元によって説明される分散のベクトルを返します。したがって、pca.explained_variance_ratio_[i]は、i + 1次元だけによって説明される分散を与える。

おそらく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パーセントを維持するだろう。

+1

Tでありますあなたをとてもハンクします!素晴らしい説明!時には、Pythonマニュアルの記述/記述が不十分な場合があります。私は完全に啓発されています! – Chubaka

+0

もう1つ質問:PCA(n_components = 1)を実行すると、scikit learn PCAコマンドは「正規化データから共分散行列を計算する」&「固有値分解を使用して単一値分解(SVD)を計算する」コマンドを実行します。私は、Python scikit PCAモジュールで固有ベクトルを計算するために他の方法を選択する場所は見当たりません。 – Chubaka

+1

すばらしい答え!これは本当に私を助けた – Mikim

3

この質問は2年以上経過していますが、私はこれに関する更新情報を提供したいと思います。 同じことをやりたかったので、sklearnのように見えて、この機能をすぐに利用できるようになりました。

docs

< 0ならn_components < 1及びsvd_solver ==「満杯」で述べたように、説明される必要がある分散量がパーセンテージよりも大きくなるように構成要素の数を選択しますn_components

で指定されたので、必要なコードは今

my_model = PCA(n_components=0.99, svd_solver='full') 
my_model.fit_transform(my_matrix) 
関連する問題