2017-05-19 13 views
1

scikit-learn線形判別分析オブジェクトから基底変化行列を得るにはどうすればよいですか?scikit-learnを使った線形判別分析から固有ベクトルを得る方法

形状m x p有するアレイXmサンプルおよびp機能)とNクラスの場合、スケーリング行列はp行とN-1列を有しています。この行列は、元の空間から線形の部分空間にデータを変換するために使用できます。

のは、次の例を考えてみましょう:

from sklearn.datasets import make_blobs 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA 

X, label = make_blobs(n_samples=100, n_features=2, centers=5, cluster_std=0.10, random_state=0) 
lda = LDA() 
Xlda = lda.fit(X, label) 
Xlda.scalings_ 
#array([[ 7.35157288, 6.76874473], 
#  [-6.45391558, 7.97604449]]) 
Xlda.scalings_.shape 
#(2, 2) 

私は2つの機能と持っているように、私がすべきscalings_のマトリクス状(2,4)を期待アーヤの回答後に編集


LDAは5-1のコンポーネントを提供します。

答えて

1

LinearDiscriminantAnalysisオブジェクトldaとしましょう。スケーリングマトリックスにはlda.scalings_としてアクセスできます。これを説明するドキュメントはhereです。

import sklearn.datasets as ds 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA 

iris = ds.load_iris() 
iris.data.shape 
# (150, 4) 
len(iris.target_names) 
# 3 

lda = LDA() 
lda.fit(iris.data, iris.target) 
lda.scalings_ 
# array([[-0.81926852, 0.03285975], 
#  [-1.5478732 , 2.15471106], 
#  [ 2.18494056, -0.93024679], 
#  [ 2.85385002, 2.8060046 ]]) 
lda.scalings_.shape 
# (4, 2) 
+0

大変ありがとうございます。虹彩データセットの場合、それはうまくいくようです(結果はRから取得した結果とは異なりますが、これは正規化前処理によるものだと思います)。しかし、別の例として、スケーリング行列私の答えはmake_blobsを使って見てください。 –

+0

scaling_マトリクスの形状が間違っているような例を示すために私の質問を編集しました。 –

+1

これはscikit-learnのメンテナーに[issue](https://github.com/scikit-learn/scikit-learn/issues/new)を提出する価値があります。 –

関連する問題