从概率分布的角度推导逻辑回归的损失函数
逻辑回归是一种分类算法。
- y=wTx+by=\mathbf{w^{T} x}+by=wTx+b
- 采用非线性映射:z=11+e−yz=\frac{1}{1+e^{-y}}z=1+e−y1
- 逻辑回归一定选取sigmoid函数,其实就是把y的值从(−∞,+∞)(-\infty,+\infty)(−∞,+∞)压缩到(0,1)(0,1)(0,1)
其实,逻辑回归本质上对应于(0-1)分布,说明如下:
令h(x)=g(θTx)=11+e−θTxh(\mathbf{x})=g(\mathbf{\theta^Tx})=\frac{1}{1+e^{-\mathbf{\theta^Tx}}}h(x)=g(θTx)=1+e−θTx1
则:h(x)h(\mathbf{x})h(x)代表了结果为1的概率。即y取1的概率为h(x),y取0的概率为1-h(x)
P(y=1∣x,θ)=h(x)P(y=0∣x,θ)=1−h(x)
P(y=1|\mathbf{x,\theta})=h(\mathbf{x})\\
P(y=0|\mathbf{x,\theta})=1-h(\mathbf{x})
P(y=1∣x,θ)=h(x)P(y=0∣x,θ)=1−h(x)
于是:
P(y∣x,θ)=h(x)y(1−h(x))1−y
P(y|\mathbf{x,\theta})=h(\mathbf{x})^y(1-h(\mathbf{x}))^{1-y}
P(y∣x,θ)=h(x)y(1−h(x))1−y
似然函数:
L(θ)=∏i=1nh(xi)yi(1−h(xi))1−yi
L(\mathbf{\theta})=\prod_{i=1}^{n}h(\mathbf{x}^i)^{y^i}(1-h(\mathbf{x}^i))^{1-y^i}
L(θ)=i=1∏nh(xi)yi(1−h(xi))1−yi
对数似然函数:
lnL(θ)=∑i=1n[yilnh(xi)+(1−yi)ln(1−h(xi))]
lnL(\mathbf{\theta})=\sum_{i=1}^{n}[y^ilnh(\mathbf{x}^i)+(1-y^i)ln(1-h(\mathbf{x}^i))]
lnL(θ)=i=1∑n[yilnh(xi)+(1−yi)ln(1−h(xi))]
其实,该函数是一个凹函数,也就是说−lnL(θ)-lnL(\mathbf{\theta})−lnL(θ)是一个凸函数,证明如下:
根据“凸函数的非负线性组合依旧是凸函数”的原则,我们只需要证明−ln(h(x))和−ln(1−h(x))-ln(h(\mathbf{x}))和-ln(1-h(\mathbf{x}))−ln(h(x))和−ln(1−h(x))是凸函数即可。
−ln(h(x))=ln(1+e−θTx)∇θln(1+e−θTx)=e−θTx1+e−θTx(−x)=(h(x)−1)x∇θ2ln(1+e−θTx)=h(x)(1−h(x))xxT
\begin{aligned}-ln(h(\mathbf{x}))&=ln(1+e^{-\mathbf{\theta^Tx}})\\
\nabla_{\theta}ln(1+e^{-\mathbf{\theta^Tx}})&=\frac{e^{-\mathbf{\theta^Tx}}}{1+e^{-\mathbf{\theta^Tx}}}(-\mathbf{x})=(h(\mathbf{x})-1)\mathbf{x}\\
\nabla_{\theta}^2ln(1+e^{-\mathbf{\theta^Tx}})&=h(\mathbf{x})(1-h(\mathbf{x}))\mathbf{x}\mathbf{x^T}
\end{aligned}
−ln(h(x))∇θln(1+e−θTx)∇θ2ln(1+e−θTx)=ln(1+e−θTx)=1+e−θTxe−θTx(−x)=(h(x)−1)x=h(x)(1−h(x))xxT
注意:在求Hessian矩阵时,需要对x\mathbf{x}x做转置。
对于任意的向量z\mathbf{z}z,
zTh(x)(1−h(x))xxTz=h(x)(1−h(x))⎵常数(xTz)2⎵常数≥0
\mathbf{z^T}h(\mathbf{x})(1-h(\mathbf{x}))\mathbf{x}\mathbf{x^T}\mathbf{z}=\underbrace{h(\mathbf{x})(1-h(\mathbf{x}))}_{常数}\underbrace{(\mathbf{x^T}\mathbf{z})^2}_{常数} \ge0
zTh(x)(1−h(x))xxTz=常数h(x)(1−h(x))常数(xTz)2≥0
所以hessian矩阵是半正定矩阵,所以该函数是凸函数。
同理,可以证明−ln(1−h(x))-ln(1-h(\mathbf{x}))−ln(1−h(x))是凸函数。
这样,我们接下来就可以用梯度下降法来求解最优的θ\thetaθ值了。
所以我们也可以得出这样的结论:逻辑回归的损失函数就是对数似然函数的负值。
直观理解逻辑回归的损失函数
cost(hθ(x),y)={−log(hθ(x)) if y=1−log(1−hθ(x)) if y=0 \operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right. cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
分析上面的损失函数:
-
当真实值y=1y=1y=1时,预测值h(x)h(x)h(x)越接近1,损失越接近0;预测值越接近0,损失值接近正无穷。
-
当真实值y=0y=0y=0时,预测值h(x)h(x)h(x)越接近0,损失越接近0;预测值越接近1,损失值接近正无穷。
因此,符合要求。
从图中也可以看出,两个函数均是凸函数,因此凸函数的线性组合依旧是凸函数,可以得知损失函数是凸函数,可以直接采用梯度下降法等优化算法求解。整理后,损失函数如下:
J=−∑i=1n[yilnh(xi)+(1−yi)ln(1−h(xi))]
J=-\sum_{i=1}^{n}[y^ilnh(\mathbf{x}^i)+(1-y^i)ln(1-h(\mathbf{x}^i))]
J=−i=1∑n[yilnh(xi)+(1−yi)ln(1−h(xi))]
向量形式为:
J=−1m[lnh(x)Ty+ln(1−h(x))T(1−y)]
J=-\frac{1}{m}[lnh(\mathbf{x})^T\mathbf{y}+ln(1-h(\mathbf{x}))^T\mathbf{(1-y)}]
J=−m1[lnh(x)Ty+ln(1−h(x))T(1−y)]
对损失函数求梯度可以得到:
∂J(θ)∂θj=1m∑i=1m(hθ(x(i))−y(i))xj(i)
\frac{\partial J(\theta)}{\partial\theta_{j}} = \frac{1}{m}\sum_{i=1}^{m} ( h_\theta (x^{(i)})-y^{(i)})x^{(i)}_{j}
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
向量形式为:(向量形式不好直接推导,可以先推导上面的结果,然后转为向量形式)向量化的结果在变成时特别方便。
∂J(θ)∂θ=1mXT(g(Xθ)−y)
\frac{\partial J(\theta)}{\partial\theta} = \frac{1}{m} X^T(g(X\theta)-y)
∂θ∂J(θ)=m1XT(g(Xθ)−y)
为什么逻辑回归的损失函数不采用最小二乘呢?
- 原因1:逻辑回归本质上是从(0-1)分布而来,而线性回归本质上是从高斯分布而来,二者就不应该混用 。
- 原因2:假设使用最下二乘,那么损失函数为∑i=1n[yi−g(θTxi)]2\sum_{i=1}^{n}[y^i-g(\mathbf{\theta ^Tx}^i)]^2∑i=1n[yi−g(θTxi)]2,但是yiy^iyi的取值只有0和1,而g函数的取值为[0,1][0,1][0,1],两者都不对应,误差肯定很大,这个函数也不是凸函数,有许多局部极小值。
从二分类过渡到多分类
有两种方法,即one vs one 和 one vs rest。
- one vs one。考虑N个类别,c1,c2,c3,c4…cn。这种方法将其中的任意两个类别进行配对,从而产生n(n-1)/2个分类任务。比如,我们为区分c1和c2构建一个分类器,该分类器把c1视为正类,把c2视为负类。在测试阶段,新样本将同时提交给所有分类器,于是,我们就可以得到n(n-1)/2个分类结果,最终结果可以通过投票产生。
- one vs rest。每次将一个类的样例作为正例,所有其它类的样例作为负例。训练N个分类结果。在测试时,计算每个分类器预测为正例的概率,取最大的那一个作为最终结果。这种方法要求算法必须能够输出分类的概率,比如逻辑回归。当算法仅仅给出一个决策性的结果,不能给出分类概率时,这种方法便不适用,比如(svm)
*
参考自《机器学习(周志华)》