分类问题的本质是确定样本x属于类别ci的概率p(Ci|x)。在上周整理的分类问题中,我们采用生成式方法,借助贝叶斯公式和极大似然估计,首先计算出p(x|Ci)和p(x,Ci),然后再计算出p(Ci|x)。以二分类为例:
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)(1)
如果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函数的图像如下图所示:
现在还需要确定的是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+N2ln|Σ2|1/2|Σ1|1/2−12[(x−μ1)T(Σ1)−1(x−μ1)−(x−μ2)T(Σ2)−1(x−μ2)]+lnN1N2(μ1−μ2)TΣ−1x−12(μ1)TΣ−1μ1+12(μ2)TΣ−1μ2+lnN1N2(2.4)(2.5)
其中从(2.4)到(2.5)是因为Σ1=Σ2=Σ。再进一步观察式(2.5),(μ1−μ2)TΣ−1的结果是一个向量,而x后面一串是一个数字,因此z可以写成z=wTx+b的形式,所以
p(C1|x)=σ(wTx+b)=11+e−(wTx+b)(3)
上式(3)就称为Logistic 回归。在生成模型中,我们先求出μ1,μ2,Σ,然后求出w和b。这样做难免显得太过复杂,我们希望直接找出w和b。结合机器学习的三个步骤,第一步确定一个模型f(x),这一步已经完成f(x)=p(C1|x)。如果p(C1|x)>0.5,则输出C1,否则输出C2。接下来需要做的是选择一个恰当的损失函数用以度量找出来的w和b的好坏。
Logistic回归损失函数
根据以往回归模型的经验,损失函数的选取第一反应是均方误差函数,因此我们首先尝试使用均方误差。为了使目标标签C1,C2能够参与运算,我们需要将其数字化,规定:样本类别为C1,y^=1;样本类别为C2,y^=0。因此损失函数可以写作:
L(f)=12∑i=1m(f(x(i))−y^(i))2
对其进行求导
∂(f(x)−y^)2∂wi=2(f(x)−y^)f(x)(1−f(x))xi
具体分析,当y^(i)=1,f(x(i))=0,说明模型误差还很大,距离目标很远,但上式导数∂L(f(x(i)))/∂wi=0;另一种情况,当y^(i)=0,f(x(i))=1,同样说明模型误差还很大,距离目标很远,但上式导数∂L(f(x(i)))/∂wi=0。而所有样本或者大多数样本的导数等于零时,∂L/∂wi≈0,参数将不再更新,但此时我们明显没有找到最佳参数,所以均方误差函数不是一个恰当的损失度量函数。
换一个角度思考,既然Logistic回归计算出了p(C1|x),那么对于那些属于C2类别的样本其概率为p(C2|x)=1−p(C1|x)。我们同样可以采用极大似然法来估计w和b,即希望每个样本属于其真实标记的概率越大越好。
L(w,b)==ln∏i=1mp(y^(i)|x(i))∑i=1mlnp(y^(i)|x(i))(4)
又因为
p(y^(i)|x(i))=y^(i)f(x(i))+(1−y^(i))(1−f(x(i)))(5)
将式(5)带入(4),同时将最大化变成最小化,可得
L(w,b)=−∑i=1m[y^(i)lnf(x(i))+(1−y^(i))ln(1−f(x(i)))](6)
上式(6)称为交叉熵(cross entropy)损失函数,同样采用梯度下降法求得最优解
w∗,b∗=argminw,bL(w,b)
寻找最佳参数
交叉熵损失函数虽然看起来形式复杂,但是求导并不复杂
∂L(w,b)∂wj=−∑i=1m(y^(i)−f(x(i)))x(i)j∂L(w,b)∂b=−∑i=1m(y^(i)−f(x(i)))
求导结果与线性回归均方误差的导数一模一样。采用梯度下降算法更新参数
wi=wi−η∑i=1m−(y^(i)−f(x(i)))x(i)jb=b−η∑i=1m−(y^(i)−f(x(i)))
关于交叉熵损失函数与均方误差损失函数的对比可以参考下图
可以看出均方误差损失函数的曲面近乎是平坦的,因此梯度下降很容易停下来,而交叉熵损失函数则不会出现这个问题。
总结
Logistic回归相较于生成式模型操作简单,并且准确率也比较的高,但这并不表明Logistic回归能够解决所有的二分类问题,因为Logistic回归的分界面是一个平面,因此对于线性不可分问题,Logistic回归将束手无策,需要借助更加复杂的分类器。
参考文献
李宏毅机器学习2017年秋