我正在尝试根据此文档在Python 中使用Iris 数据集绘制边界线。LDA
sklearn
对于二维数据LDA.coef_
,我们可以使用和轻松绘制线条LDA.intercept_
。
但是对于已缩减为两个分量的多维数据LDA.coef_
,和LDA.intercept
有很多维度,我不知道如何使用这些维度在二维缩减维度图中绘制边界线。
我尝试仅使用 and 的前两个元素进行绘图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()
边界线的结果由生成lda.coef_[0]
并lda.intercept[0]
显示一条不太可能在两个类别之间分开的线
我试过使用 np.meshgrid 来绘制类的区域。但我收到这样的错误
ValueError: X 每个样本有 2 个特征;期待 4
它期望原始数据的 4 维,而不是来自网格网格的 2D 点。