如何用判别函数绘制3个类之间的决策边界

2024-09-28 05:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个判别函数,把二维空间分成3个区域。我想画出这些区域之间的决策边界。我无法在python中使用matplotlib meshgrid来实现这一点。在

在2个判别函数的情况下,过程简单。我计算函数和等高线图之间的差值,值为0。在

lin_param = (-5, 5, 100)
xx = np.linspace(*lin_param)
yy = np.linspace(*lin_param)

x, y = np.meshgrid(xx, yy)

z = g1(x, y) - g2(x, y)
cp = plt.contour(x, y, z, levels=[0], colors="k")

plt.scatter(0, 0)
plt.scatter(2, 2)
plt.show()

其中g1和g2是平均值为(0,0)和(2,2)的多元高斯分布。(分布并不重要,我想将其应用于任何判别函数)

^{pr2}$

Decision boundaries between two classes

这一边是消极的,另一边是积极的。沿决策边界的值都为零。现在我要加上第三个函数g3,它的平均值是(-2,2)。绘制结果决策边界并不简单。我试着取3个函数的最大2个值,并将它们的差值指定为z值,但无法实现我想要的结果。在

我想看到的是与下图类似的内容:

Desired output with 3 function

有没有可能用类似的网格等值线图方法来实现?我不想显式计算直线。在

更新

利用轮廓法,可以用不同的颜色填充区域。然而,绘制边界线仍然是个问题。在

Fill Plot


Tags: 函数区域paramnpplt边界决策xx
1条回答
网友
1楼 · 发布于 2024-09-28 05:28:46

我想我达到了预期的产量。在

我并没有将函数之间的差异赋给z数组,而是指定了具有最大值的函数的索引。然后我使用类标签(或函数索引)之间的数字作为levels参数。例如,为了在类0和类1之间绘制边界,我在levels参数中添加了0.5。在

z = np.array((g1(x, y), g2(x, y), g3(x, y)))
z = np.argmax(z, axis=0)
cp = plt.contour(x, y, z, colors="k", levels=[0.5, 1.5, 2.5])

enter image description here

相关问题 更多 >

    热门问题