5分钟带你读懂机器学习---线性模型(二)
前面一章我们了解了线性模型中的线性回归,今天,我们走进分类问题。对于常见的分类任务,我们分为两种情况:二分类和多分类。
比如,我现在手中有一堆西瓜,我想分出好瓜和坏瓜,这就是典型的二分类问题。那如果我现在手里还是有一堆西瓜,我现在要分成超甜瓜、较甜瓜、不甜瓜,这就变成了多分类问题。
那对于不同类型的分类任务我们的考量是不一样的。我们想这样一件事,当我们面对的是二分类问题时,我们可以让好瓜为1,坏瓜为0,通过输出1和0来对输出结果进行分类。而多分类任务要稍微复杂一些,我们会将多分类任务拆分成几个二分类任务,然后再进行合并。
好了,现在我们就来具体学习一下分类问题。
二.知识导入
接着我们上一章的内容,上一章我们讲了线性回归,在最后我们还拓展了非线性回归。同学们还记得我们是怎么讲的吗?
我们将预测值往真实值的变形方向拟合,在前一章的最后,我们将预测值拟合到了一个联系函数,还记得吗,广义线性模型。
为什么今天讲分类问题还要提上一章的线性回归的知识点,因为我们可以通过变形,让我们的线性函数去解决分类问题。
上面我们说了,二分类问题输出结果就是0或者1,这很像什么,是不是很像我们以前学过的分段函数。好,我们点到为止,现在我们正式进入分类问题。
三.二分类问题
在讲解之前,我们先来看一个例题背景。

这是一个关于课程学习投入时间和是否通过考试的数据,0代表没有通过考试,1代表通过了考试。如果将这些数据描点放到一个平面直角坐标系中,就会是这个样子。

很明显,坐标轴中不是0就是1,这样的分布真的很像分段函数。这张图同学们只需要先看黑点就行,不用管中间的那条蓝色的线。

我们将上面的数据写成分段函数的形式就是这样。如果变成图像,肯定就是一段一段的平行线。但是这个分段函数有一个什么特点,当临界值时可以随意判别,就如上面的1.75,我将它划分给了1,但是其实是不对的,而且这个函数,不可导不可微,很不利于我们进行数学计算,因此我们想找一个功能类似的函数去代替它。

因此这里我们引入sigmoid函数。我们再来梳理一下,我们的转变过程。

因为前一章知道线性回归的预测值可以拟合变形的真实值,因此我们想要让它拟合今天我们要解决的分类问题,我们的分类问题输出结果是0或1,因此我们选择让它拟合单位阶跃函数(前面我们使用的是分段函数,但是道理是一样的)。
后来发现,单位阶跃函数不连续也不可微,不太好,我希望有一个函数能够替代它,最终选择了sigmoid函数。

但是sigmoid函数是一个大类,我们具体选择的是其中的对数几率函数。对数几率函数也叫做“对率函数”,它能将我们在线性回归中得到的预测值全部映射到[0,1]区间,这样就完成了我们的二分类任务,因此这个模型被称为对数几率回归也叫做逻辑回归。
这时细心的同学就会发现一些问题,不对啊老师,你说我们那这个连续的对数几率函数替代单位阶跃函数,虽然都是映射到了[0,1],但是很明显对数几率函数是连续的,它的返回值应该也是0和1之间的所有数字吧。
没错,很正确。当我们用对数几率函数代替单位阶跃函数时,我们的输出值就发生了改变,从原来的只有0和1,变成了0和1以及之间所有实数。那同学们就会问了,如果变成这样,还能叫做是分类吗?
我们来分析一下这个问题,就拿我们上面最初的拿到例题来说,以前当我们的课程学习时间达到2.25小时,就会返回1,也就是一定可以通过考试。但是现在,当我们再输入2.25时,可能返回值就会变成0.6,也就是说课程学习时间达到2.25小时,有60%的几率通过考试。那如果一定要分类成“能通过和不能通过”,我们只需要设置一个阈值,此时我们令阈值为0.5,那0.6>0.5,说明可以通过考试。看,还是解决了我们的分类问题。

相比于只返回0或1的分类解决方法,我们的对数几率回归模型更有优势。优点一:不需要假设数据分布,直接映射到sigmoid函数上;优点二:就是我们上面说的,可以得出概率值;优点三:对数几率函数是凸函数,也就是存在全局最低点并且任意阶可导,方便我们后续优化求解。
好了,现在我们已经找到了我们最终要形成得到的函数,就是。我们知道,下一步就应该是求解未知参数了,那现在同学们观察一下这个函数的形式,是不是和我们上一章看到的不太一样了,我们上一章做的一系列变形都是在y的基础上做的,因此我们要先做一个变形。

通过变形,得到了上面的式子,这就和我们上一章的变形一致了。那我们再观察这个式子,前面我们说,逻辑回归输出结果是[0,1]之间的任意实数,是概率,因此我们想要求解的出来的其实最后就是,只不过简写成了y,这里,我们将
看作一个整体,我们将它叫做“对率”,它表示的就是x取正例的相对可能性,这里的
就叫做对数几率。
可能有些复杂,不要担心同学们,我们一起再来梳理一下这里。
还记得吗,同学们,我们前面一开始就是想要通过线性回归进行变形,然后完成分类任务。我们发现想要完成任务得让线性回归变形成单位阶跃函数,但是因为这个函数不可微不连续,因此我们找了一个替代函数sigmoid函数。虽然它的输出结果不是直接的0或1,但是它具有更好的性能。因此我们选用了它,但是在一开始,我们就是要对线性回归进行变形,因此要把式子变成类似的形式,说的更直白一些,其实就是这里做了一个假设,假设对数几率和特征成线性关系。最后就变成了我们上面的那个式子。
我们使用sigmoid函数得出的是概率,因此y代表的就是一个概率,所以我们将命名为几率,而“几率”取对数的形式
叫做“对数几率”,这正好和我们的模型名对应。

接下来就是求解未知参数和b了。这里用到了的优化思想是极大似然法,极大似然法本质就是让所有正例的预测概率尽可能大、所有负例的预测概率尽可能小,从而让模型的预测和真实标签 “贴合”。这里我们不展开讲解极大似然法的推导过程了,后面章节我会详细讲解。
现在我们来讲一个小总结,听完这个小总结,同学们应该会对线性模型的建模求解步骤的理解更上一个台阶。
我们来回忆一下前面讲解的线性回归,我们是假设y和特征有线性关系,因此确定了我们最终要求解出来的线性函数。为了求解未知参数,我们用到了回归函数的评估,选择了均方误差作为目标函数,并用最小二乘法和梯度下降法进行求解。是这样的吧,但是,今天我想给大家换一个角度想,我们知道最小二乘法的思想是用 “所有样本的预测误差平方和” 作为衡量 “拟合好坏” 的标准,找到让这个平方和最小的参数。有的同学就发现了,这不就是均方误差最小化吗,没错,其实我们的目标函数也可以是用最小二乘法推导出来的,因为最小二乘法就是线性回归的优化思路。那我们来看今天讲的逻辑回归。
其实学完之后,我们也仿照着上面的思路来梳理一下的话,就是,我们先假设对数几率和特征成线性关系,因此得出最终的线性函数。为了求解未知参数,我们让损失函数最小化,逻辑回归的目标参数是交叉熵损失,其实就是用极大似然法推导出来的。极大似然法的优化思想就是在这组参数下,观测到所有样本的概率(似然值)最大。和我们前面讲的一样,就是让预测概率值尽可能接近真实标签。
四.多分类问题
讲完二分类问题,终于来到了多分类问题。在本章最前面就说过,多分类的解题思路是,先将它拆成多个二分类,求出结果后再合并。因此,多分类任务的拆分有三种情况。

分别是一对一、一对多、多对多。这三种拆分策略中,一对一、一对多相对简单,但是多对多有些复杂,我们一个一个看。这些拆分策略,我们不光要明白原理,还要在遇到具体问题时,能够选择出最合适的策略进行分类。

一对一的拆分策略主要就是将类别两两配对,然后每组训练一个分类器,每个分类器输出一个预测结果,最终选出数量最多的类别最为分类结果。

一对多的拆分策略,主要是,在这堆类别中随机选一个作为正例,其余作为反例,形成一个分类器。接着继续随机选一个作为正例,直到将这堆类别每一个都选作一次正例为止。因此最终由N个分类器,让分类器预测结果,如果输出结果只有一个正例,则其对应的类别为最终类别。如果输出结果有多个正例,选择置信度大的结果对应的类别为最终结果。
光这么讲同学们肯定听着很吃力,我们用一道例题一起来看一下。

这张图左边是一对一拆分策略,右边是一对多拆分策略。我们先来看一对一,现在我们想要讲数据分成、
、
、
四类,这时我们尽量两两配对,一共配成6对,也就是6个分类器,分类器预测结果中有2个
,3个
和1个
,我们选数量最多的作为最后的分类,因此是
。
接着我们来看一对多,在图片的右侧。我们在四类中随机选一个类别作为正例,每一个类别都要被选为一次正例,因此最后形成了4个分类器,预测结果中只有一个正例,因此为。上面说还有一种情况,如果当
和
都为正例时,我们就要看谁的置信度更高,再判断了。
在学习多对多之前,我们先来对比一下这两种拆分策略。

一对一的拆分策略因为需要类别两两配对,因此形成的分类器比较多,存储分类器的开销和时间也大,但是因为每个分类器中只有两个类别,因此训练时间较短。
一对多的拆分策略需要让每一个类都当一遍正例,因此形成的分类器数量较少,因此存储开销和时间小,但是每一个分类器都要训练所有类别,因此训练时间长。
但是一般两种拆分策略的性能差别并不大,它们的性能取决于数据分布。当类别不平衡时,可能会出现分类器偏好,当类别差异过大时,也会影响划分。

面对不同的情况,我们要选择不同的拆分策略。

多对多的拆分策略相对来说复杂一些,还涉及到编码和解码的问题。多对多的拆分策略主要分为编码和解码两步,我们先来说编码。编码就是,将我们的N个类别进行M次划分,一部分类别划分成正例,一部分划分成反例,这里的M和N没有关系,也就是可大于可小于。然后训练出M个分类器。接着是解码,我们用测试样例作为输入,通过这M个分类器然后得出预测结果。这个预测结果组成了一个编码,将这个预测编码和每个类别的编码进行比较,距离最小的就是结果。

上面光这样说,可能还是有些复杂,后面我会单独出一期视频在b站给大家讲解,包括一些其他例题和代码。多对多有两种编码,二元和三元,这里还有一些需要注意的。

这里的ECOC就是纠错编码,就相当于身份证。来给大家用简单一点的话解释一下,我们编码的过程其实就是给每一个类别发一个身份证。拿上面那个例题来说,我们先来说二元码,二元码就是只有(0、1),所以的编码,也就是身份证是(-1,1,-1,1,1),依此类推,得到了每个类别的身份证,然后我们拿一个测试样例放到分类器中,得到了测试样例的身份证,接着我们对比这个测试样例的身份证和哪个类别的身份证最相像,就属于哪一类。而三元,就是有(0、1、-1)。那为什么会有纠错能力呢,是这样的,我举一个简单的例子,现在有三个类别A、B、C,它们的身份证分别是010、111、101,这时我们的测试样例的身份证本来应该是010,正好和A一样,属于A类别,但是有位出错了,最终身份证变成了000,但是因为相比于B、C,测试样例还是和A最相像,因此最终还是分到了A类别,这就是纠错能力。
就如上面的图片中一样,纠错编码越长,纠错能力也就越强。
但是相应的,计算机的开销也就越大。对于同样长度的编码,如果类别之间距离较远,也就是相差较远,不相似,那纠错能力会更强。
这就是我们的分类问题,我们下一章继续。
更多推荐
所有评论(0)