目录
逻辑回归(logistics regression)
本文将通过以下几部分来讲解逻辑回归:
1、分类和回归任务的区别
我们可以按照任务的种类,将任务分为回归任务和分类任务.那这两者的区别是什么呢?按照较官方些的说法,输入变量与输出变量均为连续变量的预测问题是回归问题,输出变量为有限个离散变量的预测问题成为分类问题.
通俗一点讲,我们要预测的结果是一个数,比如要通过一个人的饮食预测一个人的体重,体重的值可以有无限多个,有的人50kg,有的人51kg,在50和51之间也有无限多个数.这种预测结果是某一个确定数,而具体是哪个数有无限多种可能的问题,我们会训练出一个模型,传入参数后得到这个确定的数,这类问题我们称为回归问题.预测的这个变量(体重)因为有无限多种可能,在数轴上是连续的,所以我们称这种变量为连续变量.
我们要预测一个人身体健康或者不健康,预测会得癌症或者不会得癌症,预测他是水瓶座,天蝎座还是射手座,这种结果只有几个值或者多个值的问题,我们可以把每个值都当做一类,预测对象到底属于哪一类.这样的问题称为分类问题.如果一个分类问题的结果只有两个,比如"是"和"不是"两个结果,我们把结果为"是"的样例数据称为"正例",讲结果为"不是"的样例数据称为"负例",对应的,这种结果的变量称为离散型变量.
2、逻辑回归不是回归
至于回归,我们前一段讲到回归任务是结果为连续型变量的任务,logistics regression是用来做分类任务的,为什么叫回归呢?那我们是不是可以假设,逻辑回归就是用回归的办法来做分类的呢.
3、回归到分类
假设刚刚的思路是正确的,逻辑回归就是在用回归的办法做分类任务,那有什么办法可以做到呢,此时我们就先考虑最简单的二分类,结果是正例或者负例的任务.
按照多元线性回归的思路,我们可以先对这个任务进行线性回归,学习出这个事情结果的规律,比如根据人的饮食,作息,工作和生存环境等条件预测一个人"有"或者"没有"得恶性肿瘤,可以先通过回归任务来预测人体内肿瘤的大小,取一个平均值作为阈值,假如平均值为y,肿瘤大小超过y为恶心肿瘤,无肿瘤或大小小于y的,为非恶性.这样通过线性回归加设定阈值的办法,就可以完成一个简单的二分类任务.如下图:
上图中,红色的x轴为肿瘤大小,粉色的线为回归出的函数的图像,绿色的线为阈值.
预测肿瘤大小还是一个回归问题,得到的结果(肿瘤的大小)也是一个连续型变量.通过设定阈值,就成功将回归问题转化为了分类问题.
但是,这样做还存在一个问题. 我们上面的假设,依赖于所有的肿瘤大小都不会特别离谱,如果有一个超大的肿瘤在我们的例子中,阈值就很难设定.加入还是取平均大小为阈值,则会出现下图的情况:
从上边的例子可以看出,使用线性的函数来拟合规律后取阈值的办法是行不通的,行不通的原因在于拟合的函数太直,离群值(也叫异常值)对结果的影响过大,但是我们的整体思路是没有错的,错的是用了太"直"的拟合函数,如果我们用来拟合的函数是非线性的,不这么直,是不是就好一些呢?
所以我们下面来做两件事:
1-找到一个办法解决掉回归的函数严重受离群值影响的办法.
2-选定一个阈值.
4、把回归函数掰弯
没错,本小节用来解决上边说的第一个问题.开玩笑了,无论如何我也不可能掰弯这个函数.我们能做的呢,就是换一个.原来的判别函数我们用线性的y = wx,逻辑回归的函数呢,我们目前就用sigmod函数,函数如下:
Z就是我们熟悉的多元线性回归中的,建议现阶段大家先记住逻辑回归的判别函数用它就好了.
sigmod函数的图像如下:
该函数具有很强的鲁棒性(鲁棒是Robust的音译,也就是健壮和强壮的意思),并且将函数的输入范围(∞,-∞)映射到了输出的(0,1)之间且具有概率意义.具有概率意义是怎么理解呢:将一个样本输入到我们学习到的函数中,输出0.7,意思就是这个样本有70%的概率是正例,1-70%就是30%的概率为负例.
再次强调一下,如果你的数学功底很好,可以看一下我上边分享的为什么是sigmod函数的连接,如果数学一般,我们这个时候没有必要纠结为什么是sigmod,函数那么多为什么选他.学习到后边你自然就理解了.
总结一下上边所讲:我们利用线性回归的办法来拟合然后设置阈值的办法容易受到离群值的影响,sigmod函数可以有效的帮助我们解决这一个问题,所以我们只要在拟合的时候把y = 换成sigmod函数即可
它输出的结果也不再是预测结果,而是一个值预测为正例的概率,预测为负例的概率就是1-g(z).
函数形式表达:
P(y=0|w,x) = 1 – g(z)
P(y=1|w,x) = g(z)
到这里,我们得到一个回归函数,它不再像y=wT * x一样受离群值影响,他的输出结果是样本预测为正例的概率(0到1之间的小数).我们接下来解决第二个问题:选定一个阈值.
5、选定阈值
选定阈值的意思就是,当我选阈值为0.5,那么小于0.5的一定是负例,哪怕他是0.49.此时我们判断一个样本为负例一定是准确的吗?其实不一定,因为它还是有49%的概率为正利的.但是即便他是正例的概率为0.1,我们随机选择1w个样本来做预测,还是会有接近100个预测它是负例结果它实际是正例的误差.无论怎么选,误差都是存在的.所以我们选定阈值的时候就是在选择可以接受误差的程度.
我们现在知道了sigmod函数预测结果为一个0到1之间的小数,选定阈值的第一反应,大多都是选0.5,其实实际工作中并不一定是0.5,阈值的设定往往是根据实际情况来判断的.本小节我们只举例让大家理解为什么不完全是0.5,并不会有一个万能的答案,都是根据实际工作情况来定的.
0到1之间的数阈值选作0.5当然是看着最舒服的,可是假设此时我们的业务是像前边的例子一样,做一个肿瘤的良性恶性判断.选定阈值为0.5就意味着,如果一个患者得恶性肿瘤的概率为0.49,模型依旧认为他没有患恶性肿瘤,结果就是造成了严重的医疗事故.此类情况我们应该将阈值设置的小一些.阈值设置的小,加入0.3,一个人患恶性肿瘤的概率超过0.3我们的算法就会报警,造成的结果就是这个人做一个全面检查,比起医疗事故来讲,显然这个更容易接受.
第二种情况,加入我们用来识别验证码,输出的概率为这个验证码识别正确的概率.此时我们大可以将概率设置的高一些.因为即便识别错了又能如何,造成的结果就是在一个session时间段内重试一次.机器识别验证码就是一个不断尝试的过程,错误率本身就很高.
以上两个例子可能不大准确,只做意会,你懂了就好.
1. LR的直观表述
1.1 直观表述
今天我们来深入了解一个工业界应用最多,虽然思想简单但也遮挡不住它NB光芒的绽放的一个分类预测模型,它就是LR模型。LR模型可以被认为就是一个被Sigmoid函数(logistic方程)所归一化后的线性回归模型!为啥这么说呢?我们来看一下它的假设函数的样子:
首先来解释一下的表示的是啥?它表示的就是将因变量预测成1(阳性)的概率,具体来说它所要表达的是在给定x条件下事件y发生的条件概率,而
是该条件概率的参数。看到这个公式可能一脸懵逼,那我们将它分解一下:
很容易看出将(1)代入到(2)中是不是就得到了LR模型的假设函数啦。(1)式就是我们介绍的线性回归的假设函数,那(2)式就是我们的Sigmoid函数啦。什么?为什么会用Sigmoid函数?因为它引入了非线性映射,将线性回归值域映射到0-1之间,有助于直观的做出预测类型的判断:大于等于0.5表示阳性,小于0.5表示阴性。
其实,从本质来说:在分类情况下,经过学习后的LR分类器其实就是一组权值,当有测试样本输入时,这组权值与测试数据按照加权得到
这里的就是每个测试样本的n个特征值。之后在按照Sigmoid函数的形式求出
,从而去判断每个测试样本所属的类别。
由此看见,LR模型学习最关键的问题就是研究如何求解这组权值!
1.2 决策边界
经过上面的讲解,我们应该对LR要做什么,有个一个大体上的把握。接下来,我们在深入一下,介绍一下决策边界(Decision Boundary)的概念,这将会有助于我们能更好的理解LR的假设函数究竟是在计算什么。
在上节我们了解到逻辑回归的假设函数可以表示为
,其中
在LR模型中我们知道:当假设函数,即
,此时我们预测成正类;反之预测为负类。由图来看,我们可以得到更加清晰的认识。下图为Sigmoid函数,也是LR的外层函数。我们看到当
时,此时
(即内层函数
),然而此时也正是将y预测为1的时候;同理,我们可以得出内层函数
时,我们将其预测成0(即负类)。
于是我们得到了这样的关系式:
这一步应该明白吧,不明白再回去看一看,它对于我们后面的理解非常重要!下面我们再举一个例子,假设我们有许多样本,并在图中表示出来了,并且假设我们已经通过某种方法求出了LR模型的参数(如下图)。
根据上面得到的关系式,我们可以得到:
而我们再图像上画出得到:
这时,直线上方所有样本都是正样本y=1,直线下方所有样本都是负样本y=0。因此我们可以把这条直线成为决策边界。
同理,对于非线性可分的情况,我们只需要引入多项式特征就可以很好的去做分类预测,如下图:
值得注意的一点,决策边界并不是训练集的属性,而是假设本身和参数的属性。因为训练集不可以定义决策边界,它只负责拟合参数;而只有参数确定了,决策边界才得以确定。
LR回归给我的直观感受就是 它利用Sigmoid的一些性质,使得线性回归(多项式回归)从拟合数据神奇的转变成了拟合数据的边界,使其更加有助于分类!就一个感触:NB!
2. 权值求解
2.1 代价函数(似然函数)
前面我们介绍线性回归模型时,给出了线性回归的代价函数的形式(误差平方和函数),具体形式如下:
这里我们想到逻辑回归也可以视为一个广义的线性模型,那么线性模型中应用最广泛的代价函数-误差平方和函数,可不可以应用到逻辑回归呢?首先告诉你答案:是不可以的! 那么为什么呢? 这是因为LR的假设函数的外层函数是Sigmoid函数,Sigmoid函数是一个复杂的非线性函数,这就使得我们将逻辑回归的假设函数带入 (1)式时,我们得到的
是一个非凸函数,如下图:
这样的函数拥有多个局部极小值,这就会使得我们在使用梯度下降法求解函数最小值时,所得到的结果并非总是全局最小,而有更大的可能得到的是局部最小值。这样解释应该理解了吧。
虽然前面的解释否定了我们猜想,但是也给我们指明了思路,那就是我们现在要做的就是为LR找到一个凸的代价函数! 在逻辑回归中,我们最常用的损失函数为对数损失函数,对数损失函数可以为LR提供一个凸的代价函数,有利于使用梯度下降对参数求解。为什么对数函数可以做到这点呢? 我们先看一下对数函数的图像:
蓝色的曲线表示的是对数函数的图像,红色的曲线表示的是负对数的图像,该图像在0-1区间上有一个很好的性质,如图粉红色曲线部分。在0-1区间上当z=1时,函数值为0,而z=0时,函数值为无穷大。这就可以和代价函数联系起来,在预测分类中当算法预测正确其代价函数应该为0;当预测错误,我们就应该用一个很大代价(无穷大)来惩罚我们的学习算法,使其不要轻易预测错误。这个函数很符合我们选择代价函数的要求,因此可以试着将其应用于LR中。对数损失在LR中表现形式如下:
对于惩罚函数Cost的这两种情况:
给我们的直观感受就是:当实际标签和预测结果相同时,即y和同时为1或0,此时代价最小为0; 当实际标签和预测标签恰好相反时,也就是恰好给出了错误的答案,此时惩罚最大为正无穷。现在应该可以感受到对数损失之于LR的好了。
为了可以更加方便的进行后面的参数估计求解,我们可以把Cost表示在一行:
这与我们之前给出的两行表示的形式是等价的。因此,我们的代价函数最终形式为:
该函数是一个凸函数,这也达到了我们的要求。这也是LR代价函数最终形式。
2.2 似然函数的求解-梯度下降
前面我们得到了LR代价函数的表示形式,接下来要做的就是使用梯度下降估计参数值或参数组合。
梯度下降算法我们之前介绍过了:
通过求导,我们得到:
咋一看,LR的梯度下降算法和线性回归算法的形式一样呀! 没错,表现形式就是一样,但是由于假设函数的不同,注定了它们就是不同的算法。代价函数的求导过程是怎么样的呢?--- 请翻到第4部分 【代价函数的求导过程】!
3. LR模型优缺点分析
优点:
1. 实现简单,广泛应用于工业界。
2. 输出结果并不是一个离散值或确切的类型,而是一个与每个输入样本相关的概率列表,这样我们可以任意设定阈值,从而得到我们想要的分类输入。
3. LR对数据中的小噪音的鲁棒性很好,并且轻微的多重共线性不会对其结果产生特别的影响。严重的多重共线性可以使用LR+l2正则来解决。
缺点:
1. 当样本量很大时,LR的性能并不是很好。
2. 不能很好的处理大量的多类特征和变量。
3. 容易欠拟合
4. 传统的LR只能处理二分类,在此基础上衍生的Softmax才能处理多分类。
5. 对于非线性特征,需要进行转换。
总结: 知道了LR有什么优缺点了,那么我们什么情况下,最应该选择LR模型作为我们的分类预测算法呢?
应用条件有:
1. 当你需要一个概率的框架时
2. 当你希望以后可以将更多的训练数据快速整合到模型中去时
满足这两点应用条件,那就选择LR吧。
4. 代价函数的求导过程
Sigmoid函数的求导过程:
故,sigmoid函数的导数
损失函数梯度求解过程:
故,参数更新公式为: