机器学习(二)———逻辑回归

逻辑回归与线性回归

逻辑回归与线性回归虽然都有回归两个字,但两者的作用却大不一样。逻辑回归处理的是分类问题,而线性回归处理的是回归问题。

在逻辑回归的讨论中,我们认为y是因变量,而非$\frac{p}{1-p}$,这便引出了逻辑回归与线性回归的最大的区别,即逻辑回归的因变量为离散的,而线性回归中的因变量是连续的。并且在自变量x与超参数$\theta$确定的情况下,逻辑回归可以看作是广义的线性模型在因变量服从二元分布时的一个特殊情况;而使用最小二乘法求解线性回归,我们认为因变量服从正态分布。

当然两者也有相同之处,首先我们可以认为二者都使用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是在自变量x和超参数确定,因变量y服从正态分布的假设下,使用极大似然估计的一个化简;而逻辑回归中通过对数似然函数$L(\theta)=\prod_{i=1}^NP(y_i|x_i;\theta)=\prod_{i=1}^N(\pi(x_i))^{y_i}(1-\pi(x_i))^{1-y_i}$的学习,得到最佳参数$\theta$。另外,二者求参数过程中,都可以使用梯度下降算法。

逻辑回归的由来

如前面所述,逻辑回归被称为广义线性回归的模型。我们考虑用线性回归的方式去拟合各个类别的概率(二分类问题只要拟合其中一个就能得到另一个)。这个拟合值往往是0和1.而对于线性回归来说,它的y值是没有限制的。为了使我们的输出值能表达概率,取值范围在[0,1]上,这里利用了一个trick,即在原来线性回归的基础上对最后输出的y施加sigmoid函数,这样从sigmoid函数出来的输出值就是可以表示概率了。

Sigmoid函数的形式:

其中$z=wx+b$
Sigmoid

逻辑回归的损失函数(loss function)和成本函数(cost function)

在二分类中,我们假定sigmoid输出结果表示属于1类的概率值,如果按我们前面所述,我们是用线性回归来拟合某一类的概率,则此处会很明显的想到用平方损失函数,即

其中,$z^{(i)}=w^Tx^{(i)}+b$,i表示第i个样本点,$y^{(i)}$表示第i个样本的真实值,$\phi(z^{(i)})$表示第i个样本的预测值。

上述情况会得到下面的图
JW
显然是非凸的,用梯度下降很容易陷入局部最优。所以不太可取。

重新思考

假设sigmoid函数$\phi(z)$表示属于类1的概率,于是做出如下定义:
eq1
将两个式子综合来,可以改写为下式:
eq2
上式将我们的概率表示合二为一了,很显然我们现在的目标是该式子最大化。为了计算方便我们对上式采用log,然后将求最大变为求最小值(凸优化里都是写成min的形式).该式子业界术语叫交叉熵。
eq3
上式只是一个样本的的预测值和实际值的误差,而成本函数是全部样本的预测值和实际值的误差,于是对于所有样本的损失值取平均数得到下式
eq4
此时得到的公式是一个凸函数,有下图的形状
JW2
此时我们可以采用梯度下降了

用极大似然函数求解逻辑回归

利用极大似然的原则,假设所有训练样本独立同分布,则联合概率为所有样本概率的乘积
eq5
eq6
按照极大似然法求极值的方法,分别对w的每个参数求偏导数使其为0,得到对数似然方程组,求解该方程,便可以得到w的参数,如果参数很多,求解方程组复杂,则可考虑梯度下降法

多分类的情况下考虑逻辑回归

思路还是和前面介绍的一样,我们现在考虑用一个线性回归来拟合各类概率的值。这个期望的概率值显然只能是0或1.为了如上述所说,我们希望通过分类器后输出的是一个概率。采用与前面相类似的思想,最后加一个函数f,转换为概率。显然这里f是sigmoid函数是不行的,因为sigmoid函数输入的是一个标量,得到的也是一个标量,一个标量只能表示一个类别的概率。对于二分类问题来说,一个标量表示一个类的概率,也就很容易的得到另一个类别的概率。但对于多分类(大于等于3类的分类),你知道一个类别的概率,并不能得到另外两个类别的概率。显然我们这里需要的是一个f函数,其输入为一个向量(长度不确定),输出是一个向量(长度为分类数),且该向量每个值都大于等于0小于等于1.

softmax函数

softmax
softmax函数形式

当我们得到各个类别的概率之后希望得到损失函数和成本函数。而这过程和前面的二分类一样。我们可以用交叉熵来表示我们的损失函数。用各个样本的损失函数的平均值来表示该训练集的成本函数。
可以写成下式:

其中,$p(y^{(i)}=j|x^{(i)};\theta)=\frac{exp(\theta_i^Tx)}{\sum_{k=1}^Kexp(\theta_k^Tx)}$

逻辑回归与神经网络

最早的神经网络,应该算得上是感知机了。

感知机

感知机同样也是一个二分类的问题,它与逻辑回归的区别在于,它并有求各个类别的概率。而是比较定性的构造目标函数,当输出的y与实际标签$\hat{y}$是同符号(正或负),则说明分类正确。如果输出y与实际标签$\hat{y}$不同符号,则说明分类错误,目标函数要加上它们两者的乘积。我们期望目标函数越大越好(这是一个负值),则说明错分类的越少。

这里M是误分类点的集合。

事实上除了最后一个构造目标函数的操作不同,感知器与逻辑回归是相同的。

神经元模型

神经元模型是神经网络学习中最基本的成分。下图可以抽象的看成神经元模型。
neuron

如果把感知器看成是上述神经元模型的形式的话。需要注意的就是这里的激活函数是一个Heaviside函数(阶跃函数)。当输入信号大于阈值,神经元兴奋,输出1;否则抑制输出0

而逻辑回归也可以表示成神经元模型的形式,但激活函数变成了sigmoid函数(二分类问题)
LR
显然如果多分类的话激活函数就是softmax.

总结

总的来说,逻辑回归可以被当成浅层神经网络(2层,输入层和输出层)。但该算法最重要的一点就是激活函数的选择,这里用到了sigmoid和softmax.

面试

  1. 一句话概括逻辑回归:
    逻辑回归是假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降来求解参数,来达到数据二分类的目的.

  2. 逻辑回归为什么要用极大似然函数作为损失函数
    损失函数一般有:平方损失函数,对数损失函数,HingeLoss0-1函数,绝对值损失函数.将极大似然函数取对数以后等同于对数似然函数.在逻辑回归这个模型下,对数损失函数的训练求解参数的速度比较快.之所以不选择平方损失函数,因为如果使用平方损失函数,会发现梯度更新和sigmoid函数本身的梯度有关.sigmoid函数在其定义域内的梯度都不大于0.25,训练会很慢.

  3. 为什么要在训练的过程中将高度相关的特征去掉?

  • 去掉高度相关的特征会让模型的可解释性更好
  • 可以大大提高训练的速度,如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度,其次是特征多了,本身就会增大训练的时间.
  1. 逻辑回归的优缺点总结
    总结一些逻辑回归应用到工业当中的一些优点:
    (1)形式简单,模型的可解释性非常好.某个特征的权重比较高,那么这个特征最后对结果的影响会比较大
    (2)模型效果不错.在工程上可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度
    (3)训练速度快.分类的时候,计算量只与特征的数目有关。
    (4)资源占用小,尤其是内存.
    (5)方便输出结果调整.因为输出的都是概率值.
    但逻辑回归本身也有许多缺点:
    (1)准确率并不是很高,因为形式非常简单,很难拟合数据的真实分布
    (2)很难处理数据不平衡的问题.举例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比10000:1,我们把所有样本都预测为正也能使损失函数的值比较小.但作为一个分类器,它对正负样本的区分能力不会很好.
    (3)处理非线性数据较麻烦.逻辑回归也不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题.
    (4)逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归.

  2. 逻辑回归为什么要对特征进行离散化处理?
    在工业界,很少直接将连续值作为逻辑回归的特征输入,而是将连续特征离散化为一系列0,1特征再交给逻辑回归模型,这样做的优势有以下几点
    (1)离散特征的增加和减少都很容易,易于模型的快速迭代;
    (2)稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
    (3)离散化后的特征对异常数据有很强的 鲁棒性:比如一个特征是年龄>30是1,否则0.如果特征没有离散化,一个异常数据年龄300岁,会给模型造成很大的干扰;
    (4)逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量都有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合.
    (5)离散化后可以进行 特征交叉,由M+N个向量变为M×N个变量,进一步引入非线性,提升表达能力
    (6)特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人.当然处于区间相邻的样本会刚好相反,所以怎么划分区间是门学问;
    (7)特征离散化以后,起到了简化逻辑回归模型的作用,降低了过拟合的风险


模型是使用离散特征还是连续特征,其实是一个”海量离散特征”+”简单模型”同”少量连续特征”+”复杂模型”的权衡.可以离散化用线性模型,也可以用连续特征加深度学习,就看是喜欢折腾特征还是折腾模型了。


SVM与LR的异同点

相同点:

  1. LR和SVM都是分类算法
  2. 若不考虑核函数,SVM与LR都是线性分类算法
  3. LR和SVM都是监督学习算法
  4. LR和SVM都是判别模型
  5. LR和SVM在学术界和工业界都引用广泛

不同点:

  1. 本质上,它们两的loss function不同:
    LR:基于概率理论,样本的概率可以用sigmoid函数表示,然后求极大似然函数
    SVM:基于集合间隔最大化原理.

  2. 支持向量机只考虑局部边界线附近的点(支持向量),LR受所有的数据点影响

  3. 非线性问题,SVM采用核函数机制,而LR通常会采用特征构造,组合交叉特征引入非线性

  4. 线性SVM依赖数据表达的距离测度,故需要先对数据进行归一化,而LR不受影响

  5. SVM的损失函数自带正则化项$\frac{1}{2}||w||^2$,这是SVM的结构化风险最小化算法的原因,而LR必须另外在损失函数上添加正则化项

-------------本文结束感谢您的阅读-------------

本文标题:机器学习(二)———逻辑回归

文章作者:Yif Du

发布时间:2018年11月28日 - 00:11

最后更新:2019年04月02日 - 14:04

原始链接:http://yifdu.github.io/2018/11/28/机器学习(二)———逻辑回归/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。