3

このドキュメントに基づいて Pythonで使用して、アイリス データ セットの境界線をプロットしようとしています。LDAsklearn

2 次元データの場合、 と を使用LDA.coef_して線を簡単にプロットできますLDA.intercept_

しかし、2 つのコンポーネントに縮小された多次元データLDA.coef_の場合、とLDA.interceptには多くの次元があり、これらを使用して 2D 縮小次元プロットで境界線をプロットする方法がわかりません。

と の最初の 2 つの要素のみを使用してプロットしようとしましたが、うまくいきませLDA.coef_LDA.interceptでした。

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

iris = datasets.load_iris()

X = iris.data
y = iris.target 
target_names = iris.target_names  

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

x = np.array([-10,10])
y_hyperplane = -1*(lda.intercept_[0]+x*lda.coef_[0][0])/lda.coef_[0][1]

plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2

plt.plot(x,y_hyperplane,'k')

for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], alpha=.8, color=color, 
lw=lw,
                label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('LDA of IRIS dataset')

plt.show()

によって生成された境界線の結果は、2 つのクラスを分離する可能性が低い線を示しましlda.coef_[0]lda.intercept[0]

ここに画像の説明を入力

np.meshgrid を使用してクラスの領域を描画しようとしました。しかし、私はこのようなエラーが発生します

ValueError: X にはサンプルごとに 2 つの機能があります。期待 4

メッシュグリッドからの2Dポイントではなく、元のデータの4次元を期待しています。

4

1 に答える 1