用Matplotlib绘制决策边界

6

我对matplotlib非常陌生,正在做一些简单的项目来熟悉它。我想知道如何使用matplotlib绘制决策边界,即形式为[w1,w2]的权重向量,该向量基本上将两个类别C1和C2分开。

是否只需从(0,0)到点(w1,w2)绘制一条直线(因为W是权重“向量”)?如果需要,如何在两个方向上延伸这个向量?

目前,我所做的只有:

 import matplotlib.pyplot as plt
   plt.plot([0,w1],[0,w2])
   plt.show()

感谢您的提前帮助。

这个问题在https://dev59.com/aGEh5IYBdhLWcg3wjD_n上有一些不错的答案。 - phhu
1个回答

19

决策边界通常比一条直线更为复杂,因此(在二维情况下),最好使用适用于一般分类器的代码,这样也可以很好地处理线性分类器。最简单的想法是绘制决策函数的轮廓图。

# X - some data in 2dimensional np.array

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

# here "model" is your model's prediction (classification) function
Z = model(np.c_[xx.ravel(), yy.ravel()]) 

# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=pl.cm.Paired)
plt.axis('off')

# Plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=pl.cm.Paired)

来自 sklearn 文档的一些示例

在此输入图像描述


那么这里Z将是最终的权重向量? - anonuser0428
不,Z 是分类矩阵,如果你的神经网络只有两个权重(没有偏置),则 Z(x,y)=sgn(w1*x+w2*y) - lejlot
我不理解你的问题。提供的答案展示了如何绘制当前模型的决策边界,你可以在训练期间或训练完成后绘制随机(刚初始化)模型的决策边界(它可视化当前边界)。 - lejlot
如果我的模型只有2个类别,那么z将是一个列表,其中包含我的模型为每个输入返回的+1或-1值。这些值为+1或-1,因为感知器的输出取决于权重向量和特征向量的点积是否具有正或负值。 - anonuser0428
1
Y是您的分类,例如clf.predict(X)的结果。"pl"只是对pyplot的引用,您可能已经将其导入为plt,但这取决于您。 - lejlot
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接