2016-05-20 1 views
2

PCAを使用するMNISTデータセットのサイズを縮小しようとしています。トリックは、私はディメンションを減らしながら分散の特定のパーセンテージ(例えば80%)を維持しなければならないということです。私はScikitを使用して学びます。私はpca.get_variance の比率をやっていますが、それは9.7や.97や.097のような異なるドットの位置で私に同じ値を与えます。私もpca.get_variance()を試していますが、私はそれが答えではないと仮定します。私の質問は、私が一定の分散率で次元を減らしていることを保証する方法です。次元削減分散をパーセンテージで維持しながらPCAを使用する

答えて

1

n_components引数を渡さずにPCAを適用すると、PCAオブジェクトのexplained_variance_ratio_属性が必要な情報を提供します。この属性は、対応する固有ベクトルに関連付けられた分散の割合を示します。ここでは、現在の安定したPCAドキュメントから直接コピーの例である:あなたのケースでは

>>> import numpy as np 
>>> from sklearn.decomposition import PCA 
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) 
>>> pca = PCA(n_components=2) 
>>> pca.fit(X) 
PCA(copy=True, n_components=2, whiten=False) 
>>> print(pca.explained_variance_ratio_) 
[ 0.99244... 0.00755...] 

、あなたがexplained_variance_ratio_属性にnp.cumsumを適用する場合は、主成分の数は、あなたが最初の位置に対応しておく必要があります要素が0.832以上のnp.cumsum(pca.explained_variance_ratio_)にあります。

+0

これは物事を少しはっきりさせるものですが、50%、60%などのように一定の割合で分散を保存するにはどうすればよいですか?私は、PCAのn_componentをチューニングすることと関係があると思います。 – decipher

+0

LDAを実行するには、n_componentsを指定せずに保持する必要がある数を特定し、必要なレベルの分散を達成するために必要なコンポーネント数を使用してLDAを再実行します。あるいは、LDAによって生成された固有ベクトルのサブセットを使用して、データから平均を減算し、行列を乗算することによって、変換を自分で行うことができます。後者はより効率的ですが、より多くのコードが必要です。 – bogatron

関連する問題