机器学习系列(八)——Logistic回归解决二分类问题

分类问题的本质是确定样本x属于类别ci的概率p(Ci|x)。在上周整理的分类问题中,我们采用生成式方法,借助贝叶斯公式和极大似然估计,首先计算出p(x|Ci)p(x,Ci),然后再计算出p(Ci|x)。以二分类为例:

(1)p(C1|x)=p(C1,x)p(x)=p(x|C1)p(C1)p(x)=p(x|C1)p(C1)p(x|C1)p(C1)+p(x|C2)p(C2)

如果p(C1|x)>0.5,则将x归入类别C1;如果p(C1|x)<0.5,则将x归入类别C2。一般情况下,我们将p(x|C1)p(x|C2)假设成服从不同μ1μ2但是相同Σ的高斯分布。因为高斯分布是自然界中最常见的一种分布,两个分布同用一个协方差矩阵Σ有助于减少参数数目,防止过拟合。

Logistic回归推导

现在我们尝试对上述后验概率(1)进行变形

p(C1|x)=p(x|C1)p(C1)p(x|C1)p(C1)+p(x|C2)p(C2)=11+p(x|C2)p(C2)p(x|C1)p(C1)=11+exp(z)=σ(z)

其中z=lnp(x|C1)p(C1)p(x|C2)p(C2)。上面σ(z)=11+exp(z)正是Sigmoid函数,该函数具有良好的性质,能够将z值转化为一个(0,1)区间内的值,并且z=0时,σ(z)=0.5。同时该函数是单调连续可微的。Sigmoid函数的图像如下图所示:

机器学习系列(八)——Logistic回归解决二分类问题

现在还需要确定的是z是什么,我们继续对z进行推导

z=lnp(x|C1)p(C1)p(x|C2)p(C2)=lnp(x|C1)p(x|C2)+lnp(C1)p(C2)=ln1(2π)D/21|Σ1|1/2exp{12(xμ1)T(Σ1)1(xμ1)}1(2π)D/21|Σ2|1/2exp{12(xμ2)T(Σ2)1(xμ2)}+lnN1N1+N2N2N1+N2(2.4)=ln|Σ2|1/2|Σ1|1/212[(xμ1)T(Σ1)1(xμ1)(xμ2)T(Σ2)1(xμ2)]+lnN1N2(2.5)=(μ1μ2)TΣ1x12(μ1)TΣ1μ1+12(μ2)TΣ1μ2+lnN1N2

其中从(2.4)到(2.5)是因为Σ1=Σ2=Σ。再进一步观察式(2.5),(μ1μ2)TΣ1的结果是一个向量,而x后面一串是一个数字,因此z可以写成z=wTx+b的形式,所以

(3)p(C1|x)=σ(wTx+b)=11+e(wTx+b)

上式(3)就称为Logistic 回归。在生成模型中,我们先求出μ1μ2Σ,然后求出wb。这样做难免显得太过复杂,我们希望直接找出wb。结合机器学习的三个步骤,第一步确定一个模型f(x),这一步已经完成f(x)=p(C1|x)如果p(C1|x)>0.5,则输出C1,否则输出C2。接下来需要做的是选择一个恰当的损失函数用以度量找出来的wb的好坏。

Logistic回归损失函数

根据以往回归模型的经验,损失函数的选取第一反应是均方误差函数,因此我们首先尝试使用均方误差。为了使目标标签C1C2能够参与运算,我们需要将其数字化,规定:样本类别为C1y^=1;样本类别为C2y^=0。因此损失函数可以写作:

L(f)=12i=1m(f(x(i))y^(i))2

对其进行求导

(f(x)y^)2wi=2(f(x)y^)f(x)(1f(x))xi

具体分析,当y^(i)=1f(x(i))=0,说明模型误差还很大,距离目标很远,但上式导数L(f(x(i)))/wi=0;另一种情况,当y^(i)=0f(x(i))=1,同样说明模型误差还很大,距离目标很远,但上式导数L(f(x(i)))/wi=0。而所有样本或者大多数样本的导数等于零时,L/wi0,参数将不再更新,但此时我们明显没有找到最佳参数,所以均方误差函数不是一个恰当的损失度量函数。

换一个角度思考,既然Logistic回归计算出了p(C1|x),那么对于那些属于C2类别的样本其概率为p(C2|x)=1p(C1|x)。我们同样可以采用极大似然法来估计wb,即希望每个样本属于其真实标记的概率越大越好。

(4)L(w,b)=lni=1mp(y^(i)|x(i))=i=1mlnp(y^(i)|x(i))

又因为

(5)p(y^(i)|x(i))=y^(i)f(x(i))+(1y^(i))(1f(x(i)))

将式(5)带入(4),同时将最大化变成最小化,可得

(6)L(w,b)=i=1m[y^(i)lnf(x(i))+(1y^(i))ln(1f(x(i)))]

上式(6)称为交叉熵(cross entropy)损失函数,同样采用梯度下降法求得最优解

w,b=argminw,bL(w,b)

寻找最佳参数

交叉熵损失函数虽然看起来形式复杂,但是求导并不复杂

L(w,b)wj=i=1m(y^(i)f(x(i)))xj(i)L(w,b)b=i=1m(y^(i)f(x(i)))

求导结果与线性回归均方误差的导数一模一样。采用梯度下降算法更新参数

wi=wiηi=1m(y^(i)f(x(i)))xj(i)b=bηi=1m(y^(i)f(x(i)))

关于交叉熵损失函数与均方误差损失函数的对比可以参考下图

机器学习系列(八)——Logistic回归解决二分类问题

可以看出均方误差损失函数的曲面近乎是平坦的,因此梯度下降很容易停下来,而交叉熵损失函数则不会出现这个问题。

总结

Logistic回归相较于生成式模型操作简单,并且准确率也比较的高,但这并不表明Logistic回归能够解决所有的二分类问题,因为Logistic回归的分界面是一个平面,因此对于线性不可分问题,Logistic回归将束手无策,需要借助更加复杂的分类器。

参考文献

李宏毅机器学习2017年秋