2016-06-27 8 views
1

2000-Dデータの次元を2Dデータに縮小しようとしています。だからここでサンプルコードを使用した:http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html 2-D出力の代わりに、私はLDAから1-D出力を得る。誰かが原因についての提案をしていますか?それぞれ、次のとおりであり、X、YのNumpyの1次元LDA出力次元

lda = LinearDiscriminantAnalysis(n_components=2) 
X_r2 = lda.fit(X, y).transform(X) 

形状、およびX_r2:

(33139, 2000) (33139,) (33139, 1) 

あなたがX_r2を見たように1-Dで、私はそれがあることを期待wherase は、ここに私のコードです2-D、私はn_components=2を設定しています。

答えて

0

the documentationと言うと、n_componentsは「次元数削減のコンポーネント数(< n_classes - 1)」です。

LDAはn_classes-1より多くのディメンションを使用しないため、このパラメータはn_classes-1以上の場合は効果がありません。数学的説明はWikipediaです。非公式には、1つの次元では2つの点を分離するだけで十分です(クラスを現在の点と考える)、2つの次元で3つの点で十分です。

したがって、データに2つのクラスしかない場合、LDA transform 1次元になります。出力は、6 1によってアレイである

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 
X = [[0,0,0], [0,0,1], [1,0,0], [0,1,0], [0,1,1], [1,2,3]] 
y = [0,0,0,1,1,1] 
lda = LinearDiscriminantAnalysis(n_components=2) 
print(lda.fit(X, y).transform(X)) 

:ここ

は、自己完結型の例です。 yから

y = [0,0,1,1,2,2] 

の出力は6行2列になります。

+0

私の場合、クラスの数は2000ではありません。 –

+0

それはクラスではなく機能です。クラスの数は配列 'y'の別個の項目の数です。 –

+0

あなたは正しいです。私は2つを混乱させた。 –