原文链接
一、模型介绍
Logistic Regression虽然被称为回归,实际上是分类模型,并常用于二分类。Logistic Regression简单并可行化。
Logistic Regression的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。
1.1Logistic分布
Logistic 分布是一种连续型的概率分布,其分布函数和密度函数分别为:
其中,表示位置参数,
为形状参数。我们观察其图像特征:
Logistic分布是由其位置和尺度参数定义的连续分布,Logistic分布的形态与正太分布的形状相似,但是Logistic分布的尾部更长,所以我们可以使用Logistic分布来建模正态分布具有更长尾部和更高波峰的数据。深度学习中常用到的Sigmoid函数就是Logistic的分布函数在的特殊形式。
1.2Logistic回归
之前说到Logistic回归主要完成分类问题,我们以二分类为例,对于所给数据集假设存在这样的一条直线可以将数据完成线性可分。
决策边界可以表示为,假设某个样本点
那么可以判断它的类别为1,这个过程其实是感知机。
Logistic回归还需要加一层,它要找到分类概率P(Y=1)与输入向量x的直接关系,然后通过比较概率值来判断类别。
考虑二分类问题,给定数据集
考虑到是连续的,因此它不能拟合离散变量。可以考虑用它来拟合条件概率
,因为概率的取值也是连续的。
但是对于(若等于零向量则是没有什么求解的价值),
取值为R,不符合概率为0到1,因此考虑采用广义线性模型。
最理想的是单位阶跃函数,但是这个阶跃函数不可微,对数几率函数是一个常用的替代函数。
于是有:
我们将y视为x为正例的概率,则1-y为x为其反例的概率。两者的比值均为几率(odds),指该事件发生与不发生的概率比值,若事件发生的概率为p。则对数几率:
将y视为类后验概率估计,重写公式有:
也就是说,输出Y=1的对数几率是由输入x的线性函数表示的模型,这就是逻辑回归模型。当的值越接近于正无穷,P(Y=1|x)的概率值也就越接近于1.因此逻辑回归的思路是,先拟合决策边界(不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到二分类情况下的概率。
在这我们思考个问题,我们使用对数几率的意义在哪?通过上述推导我们可以看到Logistic Regression实际上是使用线性回归模型的预测值逼近分类任务真是标记的对数几率。其优点有:
1.直接对分类的概率建模,无需事先假设数据分布,从而避免了假设分布不准确性带来的问题;
2.不仅可预测出类别,还能得到该预测的概率,这对于一些利用概率辅助决策的任务很有用;
3.对数几率函数是任意阶可到的凸函数,有许多数值优化算法都可以求出最优解。
1.3代价函数
逻辑回归模型的数字形式确定以后,剩下就是如何去求解模型中的参数。在统计学中,常常使用极大似然估计法来求解,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)最大。
设:
似然函数:
为了更方便求解,我们对等式两边同时取对数,写成对数似然函数:
在机器学习中我们有损失函数的概念,其衡量的是模型预测错误的程度。如果取整个数据集上的平均对数似然函数,我们可以得到:
即在逻辑回归模型中,我们最大化似然函数和最小化损失函数实际上是等价的。
1.4求解
求解逻辑回归的方法有非常多,我们这里主要聊下梯度下降和牛顿法。优化的主要目标是找到一个方向,参数朝这个方向移动之后是的损失函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。逻辑回归的损失函数是:
1.4.1随机梯度下降
梯度下降是通过J(w)对w的一阶导数来找下降方向,并且以迭代的方式来更新参数,更新方式为:
其中k为迭代次数,每次更新参数后,可以通过比较小于阈值或者到达最大迭代次数来停止迭代。
1.4.2牛顿法
牛顿法的基本思路是,在现有极小点估计值的附近对f(x)做二阶泰勒展开,进而找到极小点的下一个估计值。假设为当前的极小值估计值,那么有:
然后令,得到了
。因此有迭代更新式:
其中为海森矩阵:
此外,这个方法需要目标函数是二阶连续可谓的,本文中的J(w)是符合要求的。
1.5正则化
正则化是一个通用的算法和思想,所以会产生过拟合现象的算法都可以使用正则化来避免过拟合。
在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,可以有效提高泛化预测精度。如果模型过于复杂,变量值稍微有点改动,就会引起预测精度问题,正则化之所以有效,就是因为其降低了特征的权重,使得模型更为简单。正则化一般会采用L1范式或是L2范式,其形式分别为和
。
1.5.1L1正则化
LASSO回归,相当于为模型添加了这样一个先验知识:w服从零均值拉普拉斯分布。首先看看拉普拉斯分布长什么样子:
由于引入了先验知识,所以似然函数这样写:
取log再取负,得到目标函数:
等价于原始损失函数的后面加上了L1正则,因此L1正则的本质其实是为了模型增加了“模型参数服从于零均值拉普拉斯分布”这一先验知识。
1.5.2L2正则化
Ridge回归,相当于为模型添加了一个先验知识:w服从零均值正态分布。
首先来看看正态分布长什么样子:
由于引入了先验知识,所以似然函数这样写:
取ln在取负,得到目标函数:
等价于原始的损失函数后面加上了L2正则,因此L2正则的本质其实是为模型增加了“模型参数服从零均值正太分布”这一先验知识。
1.5.3L1和L2的区别
从上面的分析中我们可以看到,L1正则化增加了所有权重w参数的绝对值之和逼迫更多w为0,也就是变稀疏(L2因为其倒数也区域0,奔向0的速度不如L1给力了)。我们对稀疏规则趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,大部分特征都是和最终的输出
没有关系或者是不提供任何信息的。在最小化目标函数的时候考虑
这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的特征权重反而会被考虑,从而干扰了对正确
的预测。
L1的正则化就是为了完成特征自动选择的光荣使命,他会学习地去掉这些无用的特征,也就是把这些特征对应的权重置为0.
L2正则化中增加了所有权重w参数的平方之和,逼迫所有w尽可能趋向0但不为0(L2的导数趋于零)。这是因为在未加入L2正则化发生过拟合时,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,在某些很小的区间里,函数值的变化就很剧烈,就是某些w值非常大。因此,L2正则化的加入就惩罚了权重变大的趋势。
我们以二维样本为例,图解阐述加入了L1正则化和L2正则化之后目标函数求解时发生的变化。
- 原函数曲线高等线(同颜色曲线上,每一组w1,w2带入后值都相同)
那现在我们看下加了 L1 正则化和 L2 正则化之后,目标函数求解的时候,最终解会有什么变化。
从上面两幅图中我们可以看出:
- 如果不加L1和L2正则化的时候,对于线性回归这种目标函数凸函数的话,我们最终的结果就是最里面的紫色的小圆圈等高线上的点。
- 当加入L1正则化的时候,我们先画出
的图像,也就是一个菱形,代表这些曲线上的点算出来的L1范数
。那么我们现在的目标是不仅是原曲线算的值要小(越来越接近中心的紫色圆圈),还要使得这个菱形越小越好(F越小越好)。那么还和原来一样的话,过中心紫色圆圈的那个菱形明显很大,因此我们要取到一个恰好的值。那么如何求值呢?
1.以同一条原曲线目标高等线来说,现在以最外圈的红色高等线为例,我们看到,对于红色曲线上的每个点都可以做成一个菱形,根据上图可知,当这个菱形与某条高等线相切时,这个菱形最小。上图相割对比较大的两个菱形对应的L1范数更大。用公式说这个时候能使得在相同的,由于相切的时候C||w||1小,即|w1|+|w2|所以能够使得
更小;
2.有了第一条的说明我们可以看出,最终加入L1范数得到的解一定是某个菱形和某条原函数高等线的切点。现在有个重要的结论来了,我们经过观察得到,几乎对于很多原函数高等曲线,和某个菱形相交的时候及其容易相交在坐标轴,也就是说最终的结果,解的某些维度及其容易为0,比如上图最终解为,这也就是我们所说的L1更容易得到稀疏解(解向量中0比较多的原因)。
3.当然光看着图说,L1的菱形更容易和等高线相交在坐标轴上一点都没有说服力,只是个感性的认知,我们接下来从更严谨的方式来证明,简而言之就是假设现在我们是在一维的情况下,其中h(w)是目标函数,f(w)是没加L1正则化前的目标函数,C|w|是L1正则项,要使得0点成为最值可能的点,虽然在0点不可导,但是我们只需要让0点左右的导数异号,即
即也就是
的情况下,0点都是可能的最值点。
- 当加入L2正则化的时候,分析与L1正则化是类似的,也就是说我们仅仅是从菱形变成了圆形,同样是求曲线和圆形的切点作为最终解。当然与L1范数比,我们这样求的L2范数从图上来看不容易交在坐标轴上,但是仍然比较靠近坐标轴。因此,这就是我们老说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0).
综上所述,我们可以看见,加入正则化,在最小化经验误差的情况下,可以让我们选择更简单(趋向于0)的解。
结构风险最小化:在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,以此来提高泛化预测精度。
因此,加入正则化就是结构风险最小化的一种实现。
正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。
简单总结下:
给loss function加上正则化项,能够使新得到的优化函数,需要f和||w||中做一个权衡,如果还像原来只优化f的情况下,那可能得到一组解比较复杂,使得正则项||w||比较大,那么h就不是最优化,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。
L1正则化就是在loss function后边所加正则项为L1范数,加入L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(接近于0),但是同样能够保证解中接近于0的维数比较多,降低模型的复杂度。
1.6并行化
从逻辑回归的求解方法中我们可以看到,无论是随机梯度下降还是牛顿法,或者是没有提到的拟牛顿法,都是需要计算梯度的,因此逻辑回归的并行化最主要的就是对目标函数梯度计算的并行化。
我们看到目标函数的梯度向量计算中只需要进行向量间的点乘和相加,可以很容易将每个迭代过程拆分成相互独立的计算步骤,由不同的节点进行独立运算,然后归并计算结果。
下图是一个标签和样本矩阵,行为特征向量,列为特征维度。
样本矩阵按行列划分,将样本特征向量分不到不同的计算节点,由各计算节点完成自己所负责样本的点成和求和计算,然后将计算结果进行归并,则实现了按行并行的logistic regression。按行并行的logistic regression解决了样本数量的问题,但是实际情况中会存在针对高维特征向量进行逻辑回归的场景,仅仅按行进行并行处理,无法满足这类场景的需要,因此还需要按列将高维的特征向量拆分成若干小的向量进行求解。
并行计算总共会被分为两个并行化计算步骤和两个结果归并步骤:
步骤一:各节点并行计算点乘,计算,其中
表示第t次迭代中节点(r,c)上的第k个特征向量与特征权重分量的点乘,Wc,t为第t次迭代中特征权重向量在第c列节点上的分量;步骤二:对行号相同的节点归并点乘结果:
步骤三:各节点独立算标量与特征向量相乘:
G可以理解为由第r行节点上部分样本计算出的目标函数梯度向量在第c列节点上的分量。
步骤四:对列号相同的节点进行归并就是目标函数的梯度向量
在第c列节点上的分量,对其进行回归并得到目标函数的梯度向量:
这个过程如下
所以并行计算LR的流程图如下:
所以并行LR实际上就是在求解损失函数最优解的过程中,针对寻找损失函数下降方向中的梯度方向计算作了并行化处理,而在利用梯度确定下降方向的过程中也可以采用并行化。
二、与其他模型的对比
2.1与线性回归
逻辑回归实在线性回归的基础上加了一个Sigmoid函数(非线性)映射,使得逻辑回归称为了一个优秀的分类算法。本质上来说,两者都属于广义线性模型,但他们两个要解决的问题不一样,逻辑回归解决的是分类问题,输出的是离散值,线性回归解决的是回归问题,,输出的连续值。
我们需要明确Sigmoid函数到底起了社么作用:
- 线性回归是在实数域范围内进行预测,二分类范围则需要在[0,1],逻辑回归减少了预测范围;
- 线性回归在实数域上敏感度一致,而逻辑回归在0附近敏感,在远离0点位置不敏感,这个的好处就是模型更加关注分类边界,,可以增加模型的鲁棒性。
2.2与最大熵模型
逻辑回归和最大熵模型本质上没有区别,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。
首先进行符号定义:
1.表示,输入时x,输出的y=u的概率;
2.是一个指示函数,若u=v,则A(u,v)=1,否则A(u,v)=0;
3.我们的目标就是从训练数据中,学习得到一个模型,使得最大化,也就是输入x,预测结果是y的概率最大,也就是使得
最大。
对于逻辑回归而言:
我们这里可以用更泛化的形式来表示
回到我们的目标,令最大,可以用极大似然估计的方法来求解。
然后我们求偏导:
令偏导数为0:
想要证明逻辑回归跟最大熵模型是等价的,那么,只要证明他们的是相同的,结论自然就出来了。现在,我们不知道最大熵模型的
,但是我们知道下面的一些性质。
利用信息论,我们可以得到的熵,定义如下:
现在我们有了目标:最大,也有了上面的4个约束条件。求解约束最优化问题,可以通过拉格朗日乘子,将约束最优化问题转换为无约束最优化的对偶问题。我们的拉格朗日式子可以写成如下:
令偏导=0,得到
从而得到:
因为有约束条件:
所以:
因此可以得到:
把代入
,并且简化一下式子:
这就是逻辑回归中提到的那个泛化的式子,这就证明了逻辑回归是最大熵模型的一个特殊例子.到此,逻辑回归与最大熵模型的关系就解释完毕了.2.3与SVM的差别
相同点:
- 都是分类算法,本质上都是在找最佳分类超平面;
- 都是监督学习算法;
- 都是判别式模型,判别模型不关心数据是怎么生成的,它只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;
- 都可以增加不同的正则项;
不同点:
- LR是一个统计的方法,SVM是一个几何的方法;
- SVM的处理方法是只考虑Support Vectors,也就是和分类最相关的少数点去学习分类器.而逻辑回归通过非线性映射减少了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;
- 损失函数不同:LR的损失函数是交叉熵,SVM的损失函数是LingeLoss,这两个损失函数的目的都是增加对分类影响比较大的数据点的权重,减少与分类关系较小的数据点的权重.对LingeLoss来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这正是支持向量机最大的优势所在,对训练样本数目依赖大大减少,而且提高了训练效率;
- LR是参数模型,SVM是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正态分布由均值和方差决定),在此基础上构建的模型成为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有给定一些样本的条件下,能够依据非参数统计的方法进行推断.所以LR受数据分布影响,尤其是样本不均衡的时候影响很大,需要先做平衡,而SVM不直接依赖于分布;
- LR可以产生概率,SVM不能;
- LR不依赖于样本之间的距离,SVM是基于距离的;
- LR相对来说更简单好理解,特别是大规模线性分类时并行计算比较方便.而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势明显,能够大大简化模型和计算.