作者 | DD-Kylin
来源 | 木东居士
0x00 前言
我们知道,回归模型可以解决因变量为连续变量的问题,但是,如果因变量为分类变量的话,用回归的方法就行不通了。这个时候我们就得选择用其他的分类方法了,如决策树、随机森林、SVM 等。而本篇文章要说的逻辑回归也是一种很好的分类方法。我们需要明确的一点是,逻辑回归虽然是“回归”,但是它本质上是一种二分类算法,用来处理二分类问题的。
0x01 走近逻辑回归
问题 1:你能说说什么是逻辑回归吗?
回答:逻辑回归是一种二分类算法,一般用来解决二分类问题,但是它也可以用来解决多分类问题,当使用它来解决多分类问题的时候,由于逻辑回归的特点,我们一般将多分类问题转化为二分类问题。这里多分类问题的转化有三种拆分策略,分别是一对一、一对其余和多对多。通过多分类拆分策略,我们可以使用逻辑回归来进行多分类问题的预测。但是这种方法我们一般不用,因为多分类问题我们可以使用随机森林、朴素贝叶斯、神经网络这些更好的算法进行预测。
问题 2:逻辑回归是二分类算法,那它究竟是如何进行分类的?
回答:逻辑回归是通过判断数据属于某一类的概率值大小来决定要将该数据判为哪一类。这里需要引入 sigmoid 函数 (Y = 1/(1+e-z) , 其中 z = wTx+b
),而 sigmoid 函数有一个很特殊的性质,那就是它可以将任意的输入值都转为(0,1) 上的输出。逻辑回归通过 sigmoid 函数来逼近后验概率 p(y =1 |x), 一般地,会将 sigmoid 函数输出值大于 0.5 的判为正例(即 1),将输出值小于 0.5 的判为反例(即 0)。
sigmoid 函数的图像如下:
0x02 再会逻辑回归
问题 1:逻辑回归进行分类时的阈值是一定的吗?可不可以人为地进行调整呢?
回答:不一定。可以通过人为地进行修改的。逻辑回归输出的是概率,即将 Sigmoid 函数输出的 y 视为正例的可能性,我们可以自定义分类阈值来改变分类的结果。
举个栗子,在邮件分类中,如果 sigmoid 函数输出某个邮件属于垃圾邮件的 y 值是 0.6,属于有用邮件的 y 值是 0.4。即 P (y = 垃圾邮件 | 已知条件) = 0.6,
相对应的 p(y = 有用邮件 | 已知条件) = 0.4。
在本例中,如果是将 p >0.5 视为垃圾邮件,那么判这封邮件为垃圾邮件;如果是将 p >0.7 视为垃圾邮件,那么会判这封邮件为有用邮件。一般情况下默认数据属于哪一类的可能性较大就将数据判为哪一类,但是由于逻辑回归输出的是概率值的这一特性,所以我们可以根据具体的情况自定义阈值来得到更切合实际应用场景的模型。
问题 2:逻辑回归中的极大似然法是用来做什么的?
回答:因为 sigmoid 函数中,z = wTx+b, 其中 w 和 b 都是未知的,使用极大似然估计法是为了求出 w 和 b 使得每个样本属于其真实标记的概率值越大越好。 但是最大化似然函数的求解有点困难,所以将其转为求解最小值,即在求得的目标似然函数前面加上一个负号转为求解最小值。由于改变符号后的目标函数是高阶可导连续凸函数,于是可以使用梯度下降法、牛顿法等来求解它的最小值,通过函数的转化就可以较为轻松地求出 w 和 b,进而也就能知道 sigmoid 函数的输出了。
注:逻辑回归是一种判别模型
问题 3: 逻辑回归有哪些应用?
回答:逻辑回归的应用其实跟它的算法特点有很大的关系。由于逻辑回归是一种性能很好的二分类算法。所以逻辑回归几乎可以应用于任何需要二分类的问题。如癌症检测、垃圾邮件分类、广告点击预测、医疗效果分析等。
0x03 优点 VS 缺点
问题: 逻辑回归的优点是什么?缺点又是什么?
回答:
逻辑回归的优点分别是:
- 1、形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对结果的影响程度。如果特征的权重较大,则说明这个特征对数据结果的影响程度较大。
- 2、它不是仅仅预测出类别,还能知道近似概率预测,这对许多需利用概率辅助决策的任务很有用。
- 3、逻辑回归求解的目标函数是任意可导的凸函数,有很好的数学性质,现有的许多优化算法都能直接用于求解最优值
逻辑回归的缺点分别是:
- 1、很难处理数据不平衡的问题。举个栗子,如果某个平台用户不下单与用户下单的数量比为 10000:50,那么这个数据是一个类别很不平衡的数据,机器可以把所有的样本都预测为用户不下单,这样也可以使损失函数变得很小。但是作为一个分类器,它对正负样本的分类就显得很不友好了。
- 2、逻辑回归本身无法筛选特征,如果特征高度相关,会拉低训练的速度。而特征数量过多的时候,则会造成过拟合现象。
- 3、逻辑回归处理非线性的问题较为麻烦。逻辑回归在不引入其它方法的情况下,只能处理线性可分的问题或者说是二分类的问题。
0x04 总结
关于逻辑回归,我一直觉得它是一个很简单但是很强大的算法,直到在写这篇文章的时候,才发现原来它有那么多知识点需要理解。本文也只是起到一个抛砖引玉的作用,如果大家想了解更多的话,建议各位可以去看一下书,练一下真实的案例,肯定可以收获更多的理解!下面留几个讨论题:
- 1、逻辑回归输出的概率值是真实的概率吗?
- 2、逻辑回归中是如何区别正例跟反例的呢?
- 3、如何衡量逻辑回归的模型效果?
- 4、手推逻辑回归