1、描述
逻辑(Logistic)回归是分类算法中最基础也是最重要的手段,因此,掌握其内在原理是非常必要的。逻辑回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分问题(即结果要么是0,要么是1)。
2、初识
逻辑回归是在线性回归的基础上,将线性模型通过一个函数,转化为结果只有0/1的分类模型。其建模过程与线性回归相似:
①寻找预测函数
②构造代价函数
③使得代价函数最小并求得回归参数
线性回归能对连续值结果进行预测,而现实生活中常见的另外一类问题,分类问题。最简单的情况是0/1的二分类问题。比如,医生需要判断病人肿瘤是良性的还是恶性的、判断一封电子邮件是否是垃圾邮件,以及Kaggle上的Titanic生存预测判断一个人的生存情况。
如果我们要用线性回归算法来解决一个分类问题,对于分类,y 取值为 0 或者 1,但
如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于 0,即使所有
训练样本的标签 y 都等于 0 或 1。尽管我们知道标签应该取值 0 或者 1,但是如果算法得
到的值远大于 1 或者远小于 0 的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就
叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。
在这里我我们借用Andrew Ng老师上课中的例子,下图X为数据点肿瘤的大小,Y为观察结果是否为恶性肿瘤。通过构建线性回归模型,如hθ(x)所示,构建线性回归模型后,设定一个阙值0.5,预测hθ(x)≥0.5则为恶性肿瘤,而hθ(x)≤0.5为良性肿瘤。
但有许多实际的情况下,我们需要学习的分类数据没有那么精确,如在上述例子中突然有不正常的数据点出现,如下图:
这时,再使用0.5作为阙值来预测肿瘤是良性还是恶性就不太合适了。可以看出,线性回归模型,因为其预测的值超越了[0,1]的范围,并不适合解决这样的问题。
我们引入一个新的模型,逻辑回归(Logistic Regression),代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为:
#Python代码实现:
import numpy as np
def sigmoid(z):
return1 / (1 + np.exp(-z))
该函数的图像为:
从函数图像上看出,函数y=g(z)在z = 0的时候取值为1/2,而随着z的逐渐变小,函数值趋于0,z逐渐变大的同时函数值逐渐趋于1,这则为一个概率的范围。
3. 边界判定
让我们回到最开始,再来回顾一下我们的逻辑回归算法。
开始我们假设了一个线性模型,然后将线性模型带入了sigmoid函数,得到了逻辑回归模型。由sigmoid函数的图像,我们不难得出这样的结论:
那么现在假设线性模型如下,且已求出参数[-3,1,1]。则当-3+x_1+x_2≥0,即x_1+x_2≥3时,模型将预测 y=1。
假设我们的数据呈现这样的分布情况,怎样的模型才能合适呢?
因为需要用曲线才能分隔 y=0 的区域和 y=1 的区域,我们需要二次方特征: 假设参
数:
所以也就是说:只要我们的hθ(x)设计足够合理,就能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来。
4、逻辑回归的有点和缺点
优点:
1)预测结果是介于0和1之间的概率;
2)可以适用于连续性和类别性自变量;
3)容易使用和解释。
缺点:
1)对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性;
2)预测结果呈“S”型,因此从log(odds)向概率转化的过程是非线性的,在两端随着log(odds)值的变化,概率变化很小,边际值太小,slope太小,而中间概率的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阀值。