一、介绍
回归模型中,处理的因变量都是数值型区间变量,建立的模型描述是因变量的期望与自变量之间的线性关系,比如常见的线性回归模型。而在采用回归模型分析实际问题中,所研究的变量往往不全是区间变量而是顺序变量或属性变量,比如二项分布问题。通过分析年龄、性别、体质指数、平均血压、疾病指数等指标,判断一个人是否换糖尿病,Y=0表示未患病,Y=1表示患病,这里的响应变量是一个两点(0-1)分布变量,它就不能用h函数连续的值来预测因变量Y(只能取0或1)。
总之,线性回归模型通常是处理因变量是连续变量的问题,如果因变量是定性变量,线性回归模型就不再适用了,需采用逻辑回归模型解决。
逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。
逻辑回归与线性回归的关系和区别:
逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。
二、逻辑回归的生成思路
1. 初步出现的问题
回归任务是结果为连续型变量的任务,logistics regression是用来做分类任务的,为什么叫回归呢?那我们是不是可以假设,逻辑回归就是用回归的办法来做分类的呢?是的,逻辑回归就是在用回归的办法做分类任务。
举一个例子:预测肿瘤大小还是一个回归问题,得到的线性回归模型的结果(肿瘤的大小)也是一个连续型变量.通过设定阈值,就成功将回归问题转化为了分类问题.但是,这样做还存在一个问题:如果有一个超大的肿瘤,阈值就很难设定,加入还是取平均大小为阈值。
使用线性的函数来拟合规律后取阈值的办法是行不通的,行不通的原因在于拟合的函数太直,离群值(也叫异常值)对结果的影响过大,但是我们的整体思路是没有错的,错的是用了太"直"的拟合函数,如果我们用来拟合的函数是非线性的,不这么直,是不是就好一些呢?
所以我们下面来做两件事:
1-找到一个办法解决掉回归的函数严重受离群值影响的办法.
2-选定一个阈值.
2. 问题解决
2.1 把回归函数掰弯
虽然不能把原来很直的线性回归函数掰弯,但是我们可以换一个判别函数。就是现在使用的Sigmoid函数,也称为逻辑函数(Logistic function):
其中:
函数的定义域为全体实数,值域在[0,1]之间,x轴在0点对应的结果为0.5。当x取值足够大的时候,可以看成0或1两类问题,大于0.5可以认为是1类问题,反之是0类问题,而刚好是0.5,则可以划分至0类或1类。
该函数具有很强的鲁棒性(鲁棒是Robust的音译,也就是健壮和强壮的意思),并且将函数的输入范围(∞,-∞)映射到了输出的(0,1)之间且具有概率意义.具有概率意义是怎么理解呢:将一个样本输入到我们学习到的函数中,输出0.7,意思就是这个样本有70%的概率是正例,1-70%就是30%的概率为负例.
总结:
2.2 选定阈值
选定阈值的意思就是,当我选阈值为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时间段内重试一次.机器识别验证码就是一个不断尝试的过程,错误率本身就很高.
三、逻辑回归的算法
结合第二部分中判别函数和阈值选择,现在我们需要找到一组可以让sigmod函数全都预测正确的概率最大的W。
1. 损失函数
若想让预测出的结果全部正确的概率最大,根据最大似然估计,就是所有样本预测正确的概率相乘得到的P(总体正确)最大。
一个连乘的函数是不好计算的,我们可以通过两边同时取log的形式让其变成连加。
得到的这个函数越大,证明我们得到的W就越好.因为在函数最优化的时候习惯让一个函数越小越好,所以我们在前边加一个负号。公式如下:
这个函数就是我们逻辑回归(logistics regression)的损失函数,我们叫它交叉熵损失函数。
2. 梯度下降法求解交叉熵损失函数
求解步骤如下:
1-随机一组W.
2-将W带入交叉熵损失函数,让得到的点沿着负梯度的方向移动.
3-循环第二步.
求解梯度部分同样是对损失函数求偏导,过程如下:
四、逻辑回归为什么对切斜的数据特别敏感(正负例数据比例相差悬殊时预测效果不好)
首先从文章开头部分的举例可以看到,使用线性模型进行分类第一个要面对的问题就是如何降低离群值的影响,而第二大问题就是,在正负例数据比例相差悬殊时预测效果不好.为什么会出现这种情况呢?原因来自于逻辑回归交叉熵损失函数是通过最大似然估计来推导出的.
使用最大似然估计来推导损失函数,那无疑,我们得到的结果就是所有样本被预测正确的最大概率.注意重点是我们得到的结果是预测正确率最大的结果,100个样本预测正确90个和预测正确91个的两组w,我们会选正确91个的这一组.那么,当我们的业务场景是来预测垃圾邮件,预测黄色图片时,我们数据中99%的都是负例(不是垃圾邮件不是黄色图片),如果有两组w,第一组为所有的负例都预测正确,而正利预测错误,正确率为99%,第二组是正利预测正确了,但是负例只预测出了97个,正确率为98%.此时我们算法会认为第一组w是比较好的.但实际我们业务需要的是第二组,因为正例检测结果才是业务的根本.
此时我们需要对数据进行欠采样/重采样来让正负例保持一个差不多的平衡,或者使用树型算法来做分类.一般树型分类的算法对数据倾斜并不是很敏感,但我们在使用的时候还是要对数据进行欠采样/重采样来观察结果是不是有变好.
五、逻辑回归的适用场景及优缺点
应用:
用于分类:适合做很多分类算法的基础组件。
用于预测:预测事件发生的概率(输出)。
用于分析:单一因素对某一个事件发生的影响因素分析(特征参数值)。
适用:
基本假设:输出类别服从伯努利二项分布。
样本线性可分。
特征空间不是很大的情况。
不必在意特征间相关性的情景。
后续会有大量新数据的情况。
解决过拟合的方法:
增加数据量(万能办法)
减少特征:手动剔除;特征选择算法
正则化:结构风险最小化策略
数据稀疏:L1正则化
其他情况:L2正则化
优点:
(模型)模型清晰,背后的概率推导经得住推敲。
(输出)输出值自然地落在0到1之间,并且有概率意义(逻辑回归的输出是概率么?https://www.jianshu.com/p/a8d6b40da0cf)。
(参数)参数代表每个特征对输出的影响,可解释性强。
(简单高效)实施简单,非常高效(计算量小、存储占用低),可以在大数据场景中使用。
(可扩展)可以使用online learning的方式更新轻松更新参数,不需要重新训练整个模型。
(过拟合)解决过拟合的方法很多,如L1、L2正则化。
(多重共线性)L2正则化就可以解决多重共线性问题。
缺点:
(特征相关情况)因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。
(特征空间)特征空间很大时,性能不好。
(精度)容易欠拟合,精度不高。
和其他分类方法的比较:https://zhuanlan.zhihu.com/p/54197906
六、逻辑回归方法
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
参数说明:
https://blog.csdn.net/jagbiam1000/article/details/79764012
参考:
https://zhuanlan.zhihu.com/p/28408516
https://blog.csdn.net/weixin_39445556/article/details/83930186