机器学习入门 9-5 决策边界

2020-02-26 16:06:32 浏览数 (1)

要想改变命运,首先改变自己。

全文字数:4239字

阅读时间:15分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节介绍对于分类问题非常重要的决策边界,先对逻辑回归求出决策边界的函数表达式并绘制,但是对于像kNN这种不能求出决策边界表达式的可以通过预测样本特征平面中区间范围内的所有样本点来绘制决策边界。最后通过调整kNN算法的k值,了解模型的复杂与简单对应的决策边界不同。

a

什 么 是 决 策 边 界?

上一小节使用我们自己封装的逻辑回归算法对鸢尾花数据集进行分类实验,实验中的鸢尾花数据集我们只选取了前两个0,1类别(逻辑回归算法只能解决二分类问题),与此同时,只用了样本的前两个特征(为了方便后续的可视化),最终模型在测试集上的准确率达到100%,也就是说模型将测试样本全部预测正确,当然这是因为鸢尾花数据集比较简单。

通过前几个小节的学习可以了解,逻辑回归实质上是在线性回归的基础上进行改进的,逻辑回归将线性回归的输出经过Sigmoid函数转换为(0, 1)之间的概率值,通过与阈值0.5进行判断决定样本属于哪一个类别。两种算法最终求解的都是相应的θ系数,因此类似线性回归我们可以将逻辑回归中的系数coef_和截距intercept_打印出来。

这一小节来介绍一个对分类任务非常重要的概念~决策边界。首先来回顾一下用逻辑回归算法进行分类的基本原理。

▲逻辑回归算法

在训练集上训练逻辑回归算法,最终求出θ系数。θ是一个向量,如果每个样本有n个特征,最终求出的θ向量中就有(n 1)个元素,因为此时我们需要多添加一个θ0元素。

每当来一个新样本的时候,这个样本xb和θ向量进行点乘,点乘后的结果再经过Sigmoid函数得到一个(0, 1)之间的概率值(如果将正类设置为1,可以将这个概率值看成是P(y = 1 | xb)的条件概率),将这个概率值与0.5进行比较:

  • 如果这个概率值大于等于0.5,就将这个样本xb分类成"类别1";
  • 如果这个概率值小于0.5,就将这个样本xb分类成"类别0";

再来回顾一下Sigmoid函数,这里将参数称为t,将p定义为Sigmoid函数的结果,那么如果:

  1. t > 0的时候,最终Sigmoid的结果p > 0.5;
  2. t < 0的时候,最终Sigmoid的结果p < 0.5;

▲Sigmoid函数

很明显分界点为t = 0的时候,其实从Sigmoid函数图像也可以看出,t = 0的时候,Sigmoid结果为0.5。我们将这个结论代入到下图左边的式子中:

▲将右边Sigmoid代入左边逻辑回归中

此时的t就是逻辑回归中的θT · xb,所以我们可以很容易的得到一个结论:

  • 当θT· xb ≥ 0的时候,模型估计的概率值p_hat > 0.5,此时将样本xb分类为"类别1",即y_hat = 1;
  • 当θT· xb < 0的时候,模型估计的概率值p_hat < 0.5,此时将样本xb分类为"类别0",即y_hat = 0;

▲决策边界

总的来说,将这个样本xb分类成"类别1"还是"类别0"的分界点就在θT · xb = 0的位置,这个位置被称为决策边界。非常好理解,也就是说θT· xb > 0的时候将样本分成一类,当θT· xb < 0的时候,将样本分成另外一类,划分成两个类别边界就在θT · xb = 0的位置。

我们知道θT · xb代表的是一条直线。比如此时每个样本有两个特征x1和x2,可以将θT · xb写成θ0 θ1x1 θ2x2 = 0。

▲θT · xb表示一条直线

θ0 θ1x1 θ2x2 = 0是一根直线的表达式,在二维坐标系中,横坐标是x1这个特征,而纵坐标是x2这个特征,不过通常在绘制一条直线的时候,更习惯将直线写成y = kx b的形式,那在这里y就是x2特征,而x就是x1特征,将θ0 θ1x1 θ2x2 = 0写成y = kx b的形式,转换为y = kx b的形式是为了能够在程序中将决策边界真实的绘制出来。接下来就来实际绘制一下逻辑回归的决策边界,感性的认识一下决策边界。

b

绘 制 逻 辑 回 归 的 决 策 边 界

鸢尾花数据集的样本分布如下所示:

▲鸢尾花数据集的样本分布

上面的图示就是鸢尾花数据集中每一个样本在样本空间中的分布(此时的鸢尾花只选取了两个类别的前两个特征)。由于此时我们处理的是分类任务,所以上面的横纵坐标分别代表了一个特征,横坐标轴代表特征x1,纵坐标轴代表特征x2,而每个样本的颜色就是相应的分类输出结果。

为了绘制决策边界,首先构造一个名为x2的新函数,这个函数的就是上面推导出的x2的表达式:

定义好了x2函数之后,接下来的事情就变的简单了。由于此时的鸢尾花样本特征整体在4到8之间,所以这里的x1_plot用linspace从4到8均匀取值,为了让直线更加光滑,这里取点取的稍微密一点,取1000个点。而相对应的x2_plot只需要将x1_plot传入x2函数中即可,与此同时将训练数据集也绘制出来。

上面图示中浅蓝色的直线就是所谓的决策边界,通过图示也可以看出这个决策边界大体上将红色点和蓝色点划分成了两个部分。如果此时新来一个样本的话,将这个样本的每一个特征与θ值相乘:

  • 如果结果大于0,则将样本分类成"类别1"。换句话说,如果样本点在决策边界这根直线的上面的话,就将这个样本分类成"类别1";
  • 如果结果小于0,则将样本分类成"类别0"。换句话说,如果样本点在决策边界这根直线的下面的话,就将这个样本分类成"类别0";
  • 如果结果等于0,则这个样本正好落在决策边界上,此时我们无论把这个样本分类成"类别0"还是分类成"类别1"都是正确的。不过在实际实践中这种情况很少发生。其中它背后的数学意义非常好理解,如果一个样本落在决策边界上,也就是θT · xb = 0,此时的概率估计值p_hat = 0.5,它的意思就是将样本分类成"类别0"的概率是50%,将样本分类成"类别1"的概率也是50%,两边都是50%,将样本分类到哪里都是可以的。

不过会发现图示中还有一个比较特殊的红色点,这个红色点和其它红色点不在决策边界的同一侧,很显然这是一个分类错误的情况。可能会有人疑惑?分类的准确度不是100%吗?前面提到过此时绘制的是训练数据集(绘制训练集,我们可以通过决策边界来看模型是否过拟合)而不是测试数据集,而前面实验中得到的100%分类准确率是在测试数据集上。这里简单的来验证一下:

c

另 一 种 绘 制 决 策 边 界 的 方 式

对于逻辑回归算法来说,它的决策边界是一根非常简单的直线,所以逻辑回归算法本身还是属于线性回归算法的一种。逻辑回归的分类本质其实就是对于样本点来说是落在决策边界的上面还是决策边界的下面。如果样本点落在决策边界的上面则将样本分成一类,如果样本点落在决策边界的下面则将样本分成另外一类。

逻辑回归算法的决策边界是一根很简单的直线,但是对于之前学习到的kNN算法以及后面将会介绍的加入多项式的逻辑回归算法,这些算法的决策边界不再是一根简单的直线。对于这种情况,决策边界不能用数学表达式表示出来,相应的就不能够直接绘制出来。

我们需要找到一种能够绘制不规则决策边界的方法,这个方法其实很简单,只需要将分布无数个点的特征平面细分成很多个点,对于每一个点都使用训练好的模型来判断属于哪一个类别。比如对于下面的特征平面图,横向划分为12个间隔,纵向划分成8个间隔,相对应的一共有12 * 8 = 96个样本点,相应的每一个点都用训练好的模型估计判断一下,如果下图所示,其中蓝色代表一类,红色代表另外一类。

▲不规则的决策边界的绘制方法

这里只是随便举了一个例子,上图中红色点与蓝色点的边界处就是决策边界,可以看出此时的决策边界非常的不规则。下面来通过具体的编程看一看如何使用这种方式来绘制逻辑回归的决策边界。

当然上面绘制函数plot_decision_boundary并不要求掌握,我们只需要传入一个训练好的模型以及相应要绘制的横纵坐标轴的范围,这里需要注意此时传入的axis参数是一个包含四个元素的列表,前两个元素对应的是横坐标轴的范围,而后两个元素对应的是纵坐标轴的范围。对于上面的函数比较关键的是求出x0和x1,其中x0是将横坐标范围的差值均分成100个间隔,同理x1纵坐标轴范围的差值也均分成100个间隔,也就是说此时有100 * 100 = 10000个不同特征的样本点,每一个样本点都有两个特征。对于这10000个不同特征的样本点,每一个都使用训练好的模型进行预测,预测结果的不同类别用不同颜色加以区分。

有了绘制函数,接下来就可以实际的来调用绘制函数。调用函数需要传入两个参数,其中model就是我们训练好的逻辑回归模型lin_reg,axis就是相应坐标轴的范围,这里绘制横坐标轴的范围是(4, 7.5),纵坐标轴的范围是(1.5, 4.5),所以传入的axis列表为[4, 7.5, 1.5, 4.5]。

上面的图示就是使用另一种方式绘制出来的逻辑回归决策边界。

d

kNN 算 法 的 决 策 边 界

前面也提到,对于第四章介绍的kNN算法,显然不能像逻辑回归算法那样直接计算出决策边界的函数表达式。不过现在有了另一种不需要找出决策边界的函数表达式的绘制决策边界的方式,接下来就来具体的通过编程实现kNN算法的决策边界。

首先训练kNN算法的分类器,并验证在测试集上的分类准确率。

接下来绘制kNN算法的决策边界。

最终绘制出来的kNN算法的决策边界如上图所示。此时的决策边界是一根弯曲的曲线:

  • 当样本点偏离曲线上面的时候,用k近邻的思路,得到的就是蓝色点对应的类别;
  • 当样本点偏离曲线下面的时候,用k近邻的思路,得到的就是橙色点对应的类别;

kNN算法是支持多分类的,所以接下来将kNN算法应用在三个类别的数据集上,看看三个类别的决策边界。这里需要注意,由于将鸢尾花数据集的三个类别的前两个特征都用上了,有些样本点的特征第一个特征要比7.5大一些,因此这里将范围确定到4到8之间。

上图就是kNN算法在三分类上的决策边界,这个决策边界非常的不规则。注意到上图黄蓝相间的位置,这个图像非常奇怪,甚至在黄色区域内还存在一些蓝色部分,这样弯弯曲曲的形状,显然是模型过拟合的表现(过渡拟合训练样本点)。

第四章提到过当使用sklearn构造kNN模型的时候默认参数k为5,也就是看样本点周围最近的5个样本点,对于kNN算法来说,参数k值越小,对应模型本身也就越复杂。通过可视化的方式看到了这个复杂的含义,也就是过拟合模型的决策边界非常的不规整,所以接下来尝试一下给k值设置一个比较大的值50,来具体的看一下此时的决策边界是什么样子的?

相比于k为5时候的决策边界要规整很多,整体分成三个大块,非常清晰。通过这样的一个例子,再次样本了对于kNN算法来说,k值越大相应的模型越简单,对应到决策边界上,决策边界整体上越规整,分块越明显。通过可视化的方式看到了对于kNN算法来说,模型复杂和简单意味着相应的决策边界的不同。

下一小节将尝试使用多项式回归的思路,改进现有的逻辑回归算法,使得逻辑回归算法能够针对非线性的数据进行更好的分类。也就是说,此时逻辑回归得到的决策边界不仅仅是一根简单的直线。

0 人点赞