このドキュメントに基づいて Pythonで使用して、アイリス データ セットの境界線をプロットしようとしています。LDA
sklearn
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次元を期待しています。