欢迎光临散文网 会员登陆 & 注册

绘制非线性分类模型的决策边界

2023-09-07 03:04 作者:小黑黑讲AI  | 我要投稿

不知道大家是否有过这样的困惑。这种绿色的圈,是怎么画出来的?

这里的绿色曲线代表了正例和负例的决策边界。曲线里面是正例,曲线外面是负例,曲线是个椭圆。

如果是线性分类的决策边界,可以按照直线的绘制方法进行绘制。但如果分界平面不是线性的,是这种椭圆型状的,又该怎么办呢?

可能有同学会说,按照同样的方法画。给出x坐标,计算y坐标,再画出曲线。

但现在我们想要画的曲线根本就不是函数,它可能是这样的,或者是这样的。我们没办法找到一个x对应一个y,所以也就没法用画函数的方法,画出这个绿色的边界。

具体怎么画,我先给出结论。这种非线性分类的决策边界,需要基于等高线的概念来绘制。


等高线的基本概念

等高线,也被称为等值线,它是一种在二维平面上表示三维地形的方法。例如,下图使用等高线,描述了某座山的地形图。

其中我们使用黑色三角代表山顶,距离山顶最近的一圈是海拔4000米,然后是3500米,3000米等等到0。每一圈都对应了一个高度。


将等高线视为类别的边界

我们要将等高线,看做是不同类别的分界面。不同类别的样本,需要看做是不同的高度,这样,就可以基于不同样本点的高度,绘制出一条等高线了。

例如,图中的蓝色圆圈对应的高度是1,红色叉子对应的高度是0,它们之间就自然产生一条绿色的等高线,对应分类决策边界。

现在假设基于这些样本数据,训练出了非线性分类的模型。这里忽略掉模型的训练过程,想象此时我们已经有了这个模型。

接着我们要使用这个模型,将平面上所有的样本点,都识别出对应的分类结果,这个结果要么是0,要么是1。

例如,在平面上,如果每隔0.5个单位长度,取一个点,那么从-4到4之间可以取15个点,这样平面上就会产生15乘15一共255个数据点。

将这些数据点作为测试数据,带入到已经训练出的非线性分类的模型。让模型决策这些数据应该是类别0还是类别1,这里类别0是黄色的,类别1是紫色的。而数据的类别,刚好也对应数据在平面上的高度,即高度0还是高度1。

这时,如果我们将测试数据设置足够稠密,例如,每间隔0.01,取一个点,再将这些点画在平面上,自然就形成一个椭圆形的决策边界了。


非线性决策边界的实验代码

实验代码包括了完整的逻辑回归模型训练。这里我会简要介绍代码的整体结构,重点讲解决策边界绘制的部分。

首先是数据点的生成。我们使用make_gaussian生成非线性的数据,其中正样本使用蓝色圆圈标记,负样本使用红色叉子标记。

然后使用logistic_train函数,训练非线性的分类模型。训练后会得到参数列表theta,这个theta列表,实际上就对应绿色的决策边界。接着调用draw_decision_boundary,绘制theta对应的非线性决策边界。

函数draw_decision_boundary,传入的min-x1到max-x1是画板的横轴范围,min-x2到max-x2是画板的纵轴范围。

在函数中,我们会根据已训练出的θ参数,计算对应类别结果,不同类别结果会对应不同的高度,从而基于数据点的坐标与高度数据,绘制等高线。

在函数中,首先调用mesh-grid生成网格数据点。每个点的距离是0.02,这样生成的点可以覆盖平面的全部范围。

然后设置x1s、x2s和z分别表示数据点的横坐标、纵坐标和类别的预测结果。遍历全部样本,调用逻辑回归的预测函数logistic_predict,计算数据的置信度h。

如果h大于0.5,则类别是正例1,否则是负例0。1和0就对应等高线图中,高度1和高度0的数据点。

最后将z重新设置为和xx1相同的形式,并使用plt.contour绘制等高线,这样就得到了椭圆型的决策边界了。

那么到这里,非线性分类的决策边界的绘制方法就讲完了,感谢大家的观看,我们下节课再会。

绘制非线性分类模型的决策边界的评论 (共 条)

分享到微博请遵守国家法律