逻辑回归(Logistic Regression)是机器学习中的一种分类模型,由于算法的简单和高效,在实际中应用非常广泛。
模型
sigmoid 函数
在介绍逻辑回归模型之前,我们先引入sigmoid函数,其数学形式是:
g(x)=11+e−x
对应的函数曲线如下图所示:
从上图可以看到sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1。这个性质使我们能够以概率的方式来解释(后边延伸部分会简单讨论为什么用该函数做概率建模是合理的)。
决策函数
一个机器学习的模型,实际上是把决策函数限定在某一组条件下,这组限定条件就决定了模型的假设空间。当然,我们还希望这组限定条件简单而合理。而逻辑回归模型所做的假设是:
P(y=1|x;θ)=g(θTx)=11+e−θT∗x
这里的 g(h)g(h)
y∗=1,ifP(y=1|x)>0.5
选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些。
参数求解
模型的数学形式确定后,剩下就是如何去求解模型中的参数。统计学中常用的一种方法是最大似然估计,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)越大。在逻辑回归模型中,似然度可表示为:
L(θ)=P(D|θ)=∏P(y|x;θ)=∏g(θTx)y(1−g(θTx))1−y
取对数可以得到对数似然度:
l(θ)=∑ylogg(θTx)+(1−y)log(1−g(θTx))
另一方面,在机器学习领域,我们更经常遇到的是损失函数的概念,其衡量的是模型预测错误的程度。常用的损失函数有0-1损失,log损失,hinge损失等。其中log损失在单个数据点上的定义为
−ylogp(y|x)−(1−y)log1−p(y|x)
如果取整个数据集上的平均log损失,我们可以得到
J(θ)=−1Nl(θ)
即在逻辑回归模型中,我们最大化似然函数和最小化log损失函数实际上是等价的。对于该优化问题,存在多种求解方法,这里以梯度下降的为例说明。梯度下降(Gradient Descent)又叫作最速梯度下降,是一种迭代求解的方法,通过在每一步选取使目标函数变化最快的一个方向调整参数的值来逼近最优值。基本步骤如下:
- 选择下降方向(梯度方向,∇J(θ)∇J(θ))
- 选择步长,更新参数 θi=θi−1−αi∇J(θi−1)θi=θi−1−αi∇J(θi−1)
- 重复以上两步直到满足终止条件
其中损失函数的梯度计算方法为:
∂J∂θ=−1n∑i(yi−y∗i)xi+λθ
沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等
分类边界
知道如何求解参数后,我们来看一下模型得到的最后结果是什么样的。很容易可以从sigmoid函数看出,当θTx>0θTx>0 时,y=1y=1,否则 y=0y=0。θTx=0θTx=0
左图是一个线性可分的数据集,右图在原始空间中线性不可分,但是在特征转换 [x1,x2]=>[x1,x2,x21,x22,x1x2][x1,x2]=>[x1,x2,x12,x22,x1x2]
正则化
当模型的参数过多时,很容易遇到过拟合的问题。这时就需要有一种方法来控制模型的复杂度,典型的做法在优化目标中加入正则项,通过惩罚过大的参数来防止过拟合:
J(θ)=−1N∑ylogg(θTx)+(1−y)log(1−g(θTx))+λ∥w∥pJ(θ)=−1N∑ylogg(θTx)+(1−y)log(1−g(θTx))+λ‖w‖p
一般情况下,取p=1p=1或p=2p=2,分别对应L1,L2正则化,两者的区别可以从下图中看出来,L1正则化(左图)倾向于使参数变为0,因此能产生稀疏解。
实际应用时,由于我们数据的维度可能非常高,L1正则化因为能产生稀疏解,使用的更为广泛一些。
- 选择下降方向(梯度方向,∇J(θ)∇J(θ))
- 选择步长,更新参数 θi=θi−1−αi∇J(θi−1)θi=θi−1−αi∇J(θi−1)
- 重复以上两步直到满足终止条件
其中损失函数的梯度计算方法为:
∂J∂θ=−1n∑i(yi−y∗i)xi+λθ∂J∂θ=−1n∑i(yi−yi∗)xi+λθ
沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等。
延伸
生成模型和判别模型
逻辑回归是一种判别模型,表现为直接对条件概率P(y|x)建模,而不关心背后的数据分布P(x,y)。而高斯贝叶斯模型(Gaussian Naive Bayes)是一种生成模型,先对数据的联合分布建模,再通过贝叶斯公式来计算样本属于各个类别的后验概率,即:
p(y|x)=P(x|y)P(y)∑P(x|y)P(y)p(y|x)=P(x|y)P(y)∑P(x|y)P(y)
通常假设P(x|y)是高斯分布,P(y)是多项式分布,相应的参数都可以通过最大似然估计得到。如果我们考虑二分类问题,通过简单的变化可以得到:
logP(y=1|x)P(y=0|x)=logP(x|y=1)P(x|y=0)+logP(y=1)P(y=0) =−(x−μ1)22σ21+(x−μ0)22σ20 +θ0logP(y=1|x)P(y=0|x)=logP(x|y=1)P(x|y=0)+logP(y=1)P(y=0) =−(x−μ1)22σ12+(x−μ0)22σ02 +θ0
如果 σ1=σ0σ1=σ0,二次项会抵消,我们得到一个简单的线性关系:
logP(y=1|x)P(y=0|x)=θTxlogP(y=1|x)P(y=0|x)=θTx
由上式进一步可以得到:
P(y=1|x)=eθTx1+eθTx=11+e−θTxP(y=1|x)=eθTx1+eθTx=11+e−θTx
可以看到,这个概率和逻辑回归中的形式是一样的。这种情况下GNB 和 LR 会学习到同一个模型。实际上,在更一般的假设(P(x|y)的分布属于指数分布族)下,我们都可以得到类似的结论。
多分类(softmax)
如果yy不是在[0,1]中取值,而是在KK个类别中取值,这时问题就变为一个多分类问题。有两种方式可以出处理该类问题:一种是我们对每个类别训练一个二元分类器(One-vs-all),当KK个类别不是互斥的时候,比如用户会购买哪种品类,这种方法是合适的。如果KK个类别是互斥的,即 y=iy=i 的时候意味着 yy
P(y=i|x,θ)=eθTix∑KjeθTjxP(y=i|x,θ)=eθiTx∑jKeθjTx
而决策函数为:y∗=argmaxiP(y=i|x,θ)y∗=argmaxiP(y=i|x,θ)
对应的损失函数为:
J(θ)=−1N∑iN∑jK1[yi=j]logeθTix∑eθTkxJ(θ)=−1N∑iN∑jK1[yi=j]logeθiTx∑eθkTx
类似的,我们也可以通过梯度下降或其他高阶方法来求解该问题,这里不再赘述。
- 选择下降方向(梯度方向,∇J(θ)∇J(θ))
- 选择步长,更新参数 θi=θi−1−αi∇J(θi−1)θi=θi−1−αi∇J(θi−1)
- 重复以上两步直到满足终止条件
其中损失函数的梯度计算方法为:
∂J∂θ=−1n∑i(yi−y∗i)xi+λθ∂J∂θ=−1n∑i(yi−yi∗)xi+λθ
沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等。