達人、
主成分の数(k)を選択するとき、たとえば99%の分散が保持されるように、kを最小値に選択します。
ただし、Python Scikitの学習では、pca.explained_variance_ratio_ = 0.99が「分散の99%が保持されている」と等しいかどうかは100%確信できませんか。
はい、あなたはほぼ正しいです。 _pca.explained_variance_ratio_
_パラメーターは、各次元で説明される分散のベクトルを返します。したがって、_pca.explained_variance_ratio_[i]
_は、i + 1番目の次元のみによって説明される分散を与えます。
おそらくpca.explained_variance_ratio_.cumsum()
を実行したいでしょう。これは、_x[i]
_が最初のi + 1次元で説明される累積分散を返すようなベクトルx
を返します。
_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 で述べられているように
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)