在阅读本文前,请确保你已经掌握代价函数、假设函数等常用机器学习术语,最好已经学习线性回归算法,前情提要可参考

分类问题是十分广泛的一个问题,其代表问题是:

  • 一个邮件是否为垃圾邮件
  • 一个肿瘤是否为恶性肿瘤

我们通常用y来表示分类结果,其中最简单y值集合为深度学习回归算法合集 回归问题算法_机器学习,比如对于一个邮件是否为垃圾邮件,有“是垃圾邮件(1)”和“不是垃圾邮件(0)”两种y的取值。假设以肿瘤大小为x轴,是否为恶性肿瘤为y轴,并且有如下一个数据集:

深度学习回归算法合集 回归问题算法_深度学习回归算法合集_02


很显然,这个数据集合是无法使用之前学习的线性回归集合进行拟合的。因为一旦将直线延长,就会出现一个大概率是恶性肿瘤的数据被判定为良性,如下图所示

深度学习回归算法合集 回归问题算法_数据集_03


要解决这个问题,可以使用logistic回归算法,下面我们将会学习这个算法。

Logistic回归算法

作为一个回归算法,Logistics回归算法当然也有假设函数深度学习回归算法合集 回归问题算法_回归_04(其中x是一个向量),我们将数据集输入到x中,最后会输出个预测结果y。当然,由于我们要解决的是分类问题,如上面分析所示,我们的深度学习回归算法合集 回归问题算法_回归_05的取值应该是位于深度学习回归算法合集 回归问题算法_机器学习_06之间,而传统的深度学习回归算法合集 回归问题算法_回归_05函数的取值范围是整个实数域,因此我们要改造下深度学习回归算法合集 回归问题算法_回归_05函数,让他的取值范围落在深度学习回归算法合集 回归问题算法_机器学习_06之间。因此我们定义Logistic回归算法的深度学习回归算法合集 回归问题算法_回归_05函数如下所示:

深度学习回归算法合集 回归问题算法_深度学习回归算法合集_11深度学习回归算法合集 回归问题算法_深度学习回归算法合集_12上面的2式被称之为Logistic函数,或者称为Sigmoid函数。该函数的图像如下:

深度学习回归算法合集 回归问题算法_分类_13


对于深度学习回归算法合集 回归问题算法_分类_14,Logistics函数的取值范围是深度学习回归算法合集 回归问题算法_机器学习_06,因此,将(1)(2)结合起来可以得到深度学习回归算法合集 回归问题算法_数据集_16该函数的取值范围为[0,1]

我们需要做的,和之前线性回归一样,就是选定合适的参数深度学习回归算法合集 回归问题算法_机器学习_17来拟合我们的数据,从而在输入一定特征x的时候,可以获得正确的输出结果y。我们知道分类问题的结果一般只有0或1,而假设函数深度学习回归算法合集 回归问题算法_回归_05的结果则代表着在输入特征为x的情况下,y=1的概率是多少,比如说,向量深度学习回归算法合集 回归问题算法_分类_19代表着0号肿瘤的所有特征,深度学习回归算法合集 回归问题算法_数据集_20也就意味着该肿瘤为恶行的几率为0.7。

决策界限

那么当深度学习回归算法合集 回归问题算法_回归_05等于多少的时候,我们会认为y=1呢?一个最简单的办法就是:当深度学习回归算法合集 回归问题算法_分类_22的时候,我们认为当前情况下y=1;当深度学习回归算法合集 回归问题算法_分类_23的时候,我们认为y=0。我们再观察回Logistics函数,可以发现,当深度学习回归算法合集 回归问题算法_回归_24的时候深度学习回归算法合集 回归问题算法_分类_22,也就是当深度学习回归算法合集 回归问题算法_机器学习_26

现在假设我们有如下的数据集,并且假设函数深度学习回归算法合集 回归问题算法_回归_05如下:

深度学习回归算法合集 回归问题算法_回归_28


我们假设深度学习回归算法合集 回归问题算法_深度学习回归算法合集_29,那么我们可以在数据集上画出这样的一条线:

深度学习回归算法合集 回归问题算法_机器学习_30


这将平面分为了两部分,其中在直线之下的会使得深度学习回归算法合集 回归问题算法_分类_23,我们会估计落在这部分的数据y=0。这一条切分平面的直线,我们称之为决策边界

Logistic下的代价函数

接下来我们需要分析Logistics回归算法的代价函数,让我们来复习下,代价函数主要是用来衡量算法输出结果和实际的正确值的拟合程度,代价函数深度学习回归算法合集 回归问题算法_深度学习回归算法合集_32主要作用就是找到合适的深度学习回归算法合集 回归问题算法_机器学习_17值,使得代价函数深度学习回归算法合集 回归问题算法_深度学习回归算法合集_32最小,从而使得算法拟合效果最优。 一般的代价函数表达式如下:

深度学习回归算法合集 回归问题算法_数据集_35我们之前学习的线性回归算法的Cost函数为深度学习回归算法合集 回归问题算法_分类_36但是如果在Logistics中使用这种Cost函数会导致代价函数为一个非凸函数,这主要是因为Logistics的假设函数深度学习回归算法合集 回归问题算法_回归_05中含有指数项的原因,在这不展开阐述,总之,其函数可能会类似于下图的形状。

深度学习回归算法合集 回归问题算法_数据集_38


可以看到上面有很多的局部最优值,如果使用梯度下降函数,它在大多数情况是无法拟合到最优值的。那么我们的需求就很清晰了,我们希望可以找到一个Cost函数,可以使得深度学习回归算法合集 回归问题算法_深度学习回归算法合集_32的函数是一个凸函数,或者单弓型函数。那么实际上,他的Cost函数如下:

深度学习回归算法合集 回归问题算法_数据集_40

看起来式子十分复杂,但是容我仔细分析下:上文提到,h(x)代表的是算法认为y=1的概率是多少,并且深度学习回归算法合集 回归问题算法_回归_41,那么当y=1的时候,Cost曲线如下图所示:

深度学习回归算法合集 回归问题算法_数据集_42


当h(x)越接近1,Cost函数的值越接近0,这样得出来的代价函数也越小。也就是在真实结果y=1的情况下,如果h(x)=1,也就是函数认为该实例一定为1,证明它完全预测成功了,那么Cost=0,最终得出的代价函数也会非常小,即使h(x)=0.9,也就是函数认为有90%的概率该实例为1,那Cost的值还不到0.05,最终代价函数的增加幅度也很小,因为它确实也大概率预测成功了。如果他对于一个y=1的实例预测值为0,也就是他认为该实例不可能为1,那么Cost函数将会狠狠地"惩罚"这个学习算法,Cost的值会直接趋于无穷大,从而导致代价函数也无穷大,很明显,这是一个很糟糕的深度学习回归算法合集 回归问题算法_机器学习_17取值反之,如果y=0的时候其函数图像如下:

深度学习回归算法合集 回归问题算法_回归_44


很显然,这和上面刚好相反。举一反三即可。

代价函数的简化和梯度下降

上面的Logistics代价函数可以总结为两个式子:
深度学习回归算法合集 回归问题算法_分类_45
深度学习回归算法合集 回归问题算法_分类_46
当然,由于y只有等于1或者等于0两种取值,我们可以将2式简化为如下形式:深度学习回归算法合集 回归问题算法_深度学习回归算法合集_47观察可以知道,3式和2式是等价的。

将他们合起来就得到了代价函数深度学习回归算法合集 回归问题算法_深度学习回归算法合集_32深度学习回归算法合集 回归问题算法_机器学习_49

求得最小代价函数的任务自然就交给了梯度下降算法,对于每一个变量深度学习回归算法合集 回归问题算法_数据集_50反复采取以下式子处理:深度学习回归算法合集 回归问题算法_回归_51另外我们已经知道深度学习回归算法合集 回归问题算法_深度学习回归算法合集_32,对导数进行计算可以得出深度学习回归算法合集 回归问题算法_回归_53则可以得出梯度下降的实际函数为深度学习回归算法合集 回归问题算法_分类_54由于我们的代价函数已经是一个凹函数了,那梯度下降是可以得到最优值的。上述的例子中,为了方便理解,深度学习回归算法合集 回归问题算法_机器学习_17中只有一个值,一个数据实例中也只有一个特征x来用于预测y的取值,实际上运用的时候,深度学习回归算法合集 回归问题算法_机器学习_17可以是一个含有多个元素的向量,当数据集给出若干个特征深度学习回归算法合集 回归问题算法_回归_57的时候,可以用Logistics来进行拟合

之前我们介绍了二元分类问题,但是现实的很多分类问题并非是只需要将某一事物分类成两类,而是要划分为好多种类别。比如天气预报需要根据天气数据,将天气大致分为晴天、阴天、下雨、下雪等若干类别。下面我们开始介绍一对多分类问题的基本原理。

多元分类问题

深度学习回归算法合集 回归问题算法_分类_58


假设我们需要将数据集中的数据分为三类:正方形、三角形和叉。那么我们采取的做法是,将正方形和叉视作一类,将三角形分离出来,然后将三角形和叉视作一类,使用一个二元分类算法将正方形分离出来,再将三角形和正方形视作一类,将叉分离出来。

上述的做法使用了3次二元分类算法,最终将三个类别分离了出来。