![eb2cbe422b3bd5dbd125020589e8a24b.png](https://i-blog.csdnimg.cn/blog_migrate/0bdb84be2dec7884f71556c05d763f2b.jpeg)
0 前言
在上一篇文章介绍了逻辑回归的模型,并详细讲了其推导过程。为了加深印象,在这篇文章中从对数几率的角度再次探索逻辑回归的推导过程,看看逻辑回归为什么要使用sigmoid函数作为假设。
逻辑回归损失函数的推导,也是面试时经常被问到的一个点,我们也从两个角度去学习其损失函数的推导过程。然后再计算损失函数的导数。
1 从对数几率看逻辑回归
1.1 推导过程
一句话总结逻辑回归:
逻辑回归假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
逻辑回归是一个非线性模型,但是是其背后是以线性回归为理论支撑的。
提出一个与线性模型
![equation?tex=y+%3D+%5Ctheta%5ET+%5Ccenterdot+X_b](https://i-blog.csdnimg.cn/blog_migrate/2f0833455c8e890f5297e6fea4b73e7e.png)
![equation?tex=ln%28y%29+%3D+%5Ctheta%5ET+%5Ccenterdot+X_b](https://i-blog.csdnimg.cn/blog_migrate/72e331b4de5855ef76128fe98edf2037.png)
在“对数线性回归”的公式中,可以改写为
![equation?tex=y+%3D+e%5E%7B%5Ctheta%5ET+%5Ccenterdot+X_b%7D](https://i-blog.csdnimg.cn/blog_migrate/9d6d75412de02f6972904952227182af.png)
因此可以得到一个一般意义上的单调可微的“联系函数”:
![equation?tex=g%28a%29%3Dln%28a%29](https://i-blog.csdnimg.cn/blog_migrate/d2a23089c72d7a812a246440e69c0844.png)
那么对于解决分类问题的逻辑回归来说,我们需要找到一个“联系函数”,将线性回归模型的预测值与真实标记联系起来。
将“概率”转换为“分类”的工具事“阶梯函数”:
![equation?tex=%5Chat+%7Bp%7D+%3D+f%28x%29+%5Cqquad+%5Chat+y+%3D+%5Cbegin%7Bcases%7D+0%26+%5Chat+p+%5Cleq+0.5+%5C%5C+1%26+%5Chat+p+%3E+0.5+%5Cend%7Bcases%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/f833eaa7b49b18a125ed06af4ac30180.png)
但是这个阶梯函数不连续,不能作为“联系函数”g,因此使用对数几率函数来在一定程度上近似阶梯函数,将线性回归模型的预测值转化为分类所对应的概率。
![equation?tex=%5Csigma%28t%29+%3D+%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-t%7D%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/9cbb869642014a8f08cf687c39f4a522.png)
如果另y为正例,1-y为负例,所谓的“几率”就是二者的比值
![equation?tex=%5Cfrac+%7By%7D+%7B1-y%7D](https://i-blog.csdnimg.cn/blog_migrate/87646438c751cd8b51764f787861890c.png)
“对数几率”就是对几率取对数
![equation?tex=ln%5Cfrac+%7By%7D+%7B1-y%7D](https://i-blog.csdnimg.cn/blog_migrate/aad34012ce2f7b90dc0e4197bca4aac3.png)
如果另
![equation?tex=y%3D%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D](https://i-blog.csdnimg.cn/blog_migrate/5c657e225dbc778ac12b0e1caac897b6.png)
![equation?tex=1-y+%3D+%5Cfrac%7Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D](https://i-blog.csdnimg.cn/blog_migrate/94b9b7b358ea4ac5b4c9018635579561.png)
![equation?tex=ln%5Cfrac+%7By%7D+%7B1-y%7D%3D%5Ctheta%5ET+%5Ccenterdot+X_b](https://i-blog.csdnimg.cn/blog_migrate/aad34012ce2f7b90dc0e4197bca4aac3.png%3D%5Ctheta%5ET+%5Ccenterdot+X_b)
可以看出,sigmoid实际上就是用线性回归模型的预测结果取逼近真实值的对数几率,因此逻辑回归也被称为“对数几率回归”。
1.2 面试问题
在有上述的推导之后,再看一个面试问题:
为什么要使用sigmoid函数作为假设?
现在就可以回答了:
因为线性回归模型的预测值为实数,而样本的类标记为(0,1),我们需要将分类任务的真实标记y与线性回归模型的预测值联系起来,也就是找到广义线性模型中的联系函数。如果选择单位阶跃函数的话,它是不连续的不可微。而如果选择sigmoid函数,它是连续的,而且能够将z转化为一个接近0或1的值。
2 逻辑回归的损失函数
2.1 损失函数推导过程
已经知道逻辑回归的模型:
![equation?tex=%5Chat+p+%3D+%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+x_b%29+%3D+%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D+%5Cqquad+%5Chat+y+%3D+%5Cbegin%7Bcases%7D+1%26+%5Chat+p+%5Cgeq+0.5+%5C%5C+0%26+%5Chat+p+%5Cleq+0.5+%5Cend%7Bcases%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/6b33fc42d7c2420fc8df4aa5669a18fc.png)
那么,如何求出未知参数
![equation?tex=%5Ctheta](https://i-blog.csdnimg.cn/blog_migrate/679f2e1de0bb439ac572e914fed0f16f.png)
首先回顾一下线性回归。在线性回归中,做法如下:
由于已知是估计值,于是用估计值与真值的差来度量模型的好坏。使用MSE(差值的平方和再平均)作为损失函数。 然后就可以通过导数求极值的方法,找到令损失函数最小的
了。
那么在逻辑回归中,解决思路也大致类似。
逻辑回归和线性回归最大的区别就是:逻辑回归解决的是分类问题,得到的y要么是1,要么是0。而我们估计出来的p是概率,通过概率决定估计出来的p到底是1还是0。因此,也可以将损失函数分成两类:
- 如果给定样本的真实类别y=1,则估计出来的概率p越小,损失函数越大(估计错误)
- 如果给定样本的真实类别y=0,则估计出来的概率p越大,损失函数越大(估计错误)
那么将用什么样的函数表示这两种情况呢,可以使用如下函数:
![equation?tex=J+%3D+%5Cbegin%7Bcases%7D+-log%28%5Chat+p%29+%26+if+%5Cquad+y+%3D+1+%5C%5C++-log%281+-+%5Chat+p%29+%26+if+%5Cquad+y+%3D+0+%5Cend%7Bcases%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/da49b66bcdbbbcc7d39b797647c9a526.png)
![c42cf12f4eecc358172ff5fc485b90e0.png](https://i-blog.csdnimg.cn/blog_migrate/5222cd0bdfe81ff32eaf67ed271b4942.png)
分析上面的公式:
- 当y=1时,损失函数为
。特点是:
越趋于0,损失(loss)越大;越趋于1,损失(loss)越小
- 分析如下:
是一个单调递减函数,且概率p的值域之能是[0,1]之间,因此只有函数的上半部分。我们看到当概率p取0(即预估的分类结果y=0)时,loss值是趋近于正无穷的,表明我们分错了(实际分类结果是1)。
- 分析如下:
- 当y=0时,损失函数为
。特点是:
越趋于1,损失(loss)越大;越趋于0,损失(loss)越小
- 分析如下:
是一个单调递减函数,且概率p的值域之能是[0,1]之间,因此只有函数的上半部分。我们看到当概率p取1(即预估的分类结果y=1)时,loss值是趋近于正无穷的,表明我们分错了(实际分类结果是0)。
- 分析如下:
由于模型是个二分类问题,分类结果y非0即1,因此我们可以使用一个巧妙的方法,通过控制系数的方式,将上面的两个式子合并成一个:
![equation?tex=J%28%5Chat+p%2Cy%29+%3D+-log%28%5Chat+p%29%5E%7By%7D-log%281-%5Chat+p%29%5E%7B1-y%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/e0ce6af7120e9a386ddb4aa98952d7d7.png)
以上是对于单个样本的误差值,那么求整个集合内的损失可以取平均值:
![equation?tex=J%28%5Ctheta%29+%3D+-+%5Cfrac+%7B1%7D+%7Bm%7D+%5Csum%5Em_%7Bi%3D1%7D+y%5E%7B%28i%29%7D+log%28%5Chat+p%5E%7B%28i%29%7D%29+%2B+%281-y%5E%7B%28i%29%7D%29log%281-%5Chat+p%5E%7B%28i%29%7D%29+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/9b32062bba0db3ed38fe687ab4dbbef2.png)
然后,我们将
![equation?tex=%5Chat+p](https://i-blog.csdnimg.cn/blog_migrate/eb5c5a8d1451833d947a2b6133040ada.png)
![equation?tex=J%28%5Ctheta%29+%3D+-+%5Cfrac+%7B1%7D+%7Bm%7D+%5Csum%5Em_%7Bi%3D1%7D+y%5E%7B%28i%29%7D+log%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%2B+%281-y%5E%7B%28i%29%7D%29log%281-%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/662ecdc0ddbbfbbbb77c214eefcde134.png)
2.2 另一种推导方式
我们已经知道了逻辑损失函数的推导过程,但是就像在数学课上老师在黑板中写下的解题过程一样,我们费解的是“这个思路究竟是怎么来的”?
逻辑回归的损失函数当然不是凭空出现的,而是根据逻辑回归本身式子中系数的最大似然估计推导而来的。
最大似然估计就是通过已知结果去反推最大概率导致该结果的参数。极大似然估计是概率论在统计学中的应用,它提供了一种给定观察数据来评估模型参数的方法,即 “模型已定,参数未知”,通过若干次试验,观察其结果,利用实验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。
逻辑回归是一种监督式学习,是有训练标签的,就是有已知结果的,从这个已知结果入手,去推导能获得最大概率的结果参数,只要我们得出了这个参数,那我们的模型就自然可以很准确的预测未知的数据了。
令逻辑回归的模型为
![equation?tex=h_0%28x%3B%5Ctheta%29](https://i-blog.csdnimg.cn/blog_migrate/9b94392f7a07813a56c7c9de2f7dd3d8.png)
![equation?tex=p%28y%3D1%7Cx%3B%5Ctheta%29+%3D+%5Cpsi%28t%29+%3D+%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D+%5C%5C+p%28y%3D0%7Cx%3B%5Ctheta%29+%3D+1-%5Cpsi%28t%29+%3D+%5Cfrac%7Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/325a513c0cb6cacffbb815c6c2b13faf.png)
以上两个式子,可以改写为一般形式:
![equation?tex=p%28y%7Cx%3B%5Ctheta%29+%3D+h_0%28x%3B%5Ctheta%29%5Ey%281-h_0%28x%3B%5Ctheta%29%29%5E%7B1-y%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/ca805c2daf3331b6c02302276c335335.png)
因此根据最大似然估计,可以得到:
![equation?tex=J%28%5Ctheta%29+%3D+%5Cprod_%7Bi%3D1%7D%5Em+p%28y%5Ei%7Cx%5Ei%3B%5Ctheta%29+%3D+%5Cprod_%7Bi%3D1%7D%5Em+h_0%28x%5Ei%3B%5Ctheta%29%5E%7By%5Ei%7D%281-h_0%28x%5Ei%3B%5Ctheta%29%29%5E%7B%281-y%29%5Ei%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/2806e171bf7b0eace5fe2f249fa49712.png)
为了简化计算,取对数将得到:
![equation?tex=log%28J%28%5Ctheta%29%29+%3D+%5Csum%5Em_%7Bi%3D1%7D+y%5E%7B%28i%29%7D+log%28%5Chat+p%5E%7B%28i%29%7D%29+%2B+%281-y%5E%7B%28i%29%7D%29log%281-%5Chat+p%5E%7B%28i%29%7D%29+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/3bacb4ed0b3ef6acc3a90b56494e71bf.png)
我们希望极大似然越大越好,就是说,对于给定样本数量m,希望
![equation?tex=-%5Cfrac+%7B1%7D+%7Bm%7D+log%28J%28%5Ctheta%29%29](https://i-blog.csdnimg.cn/blog_migrate/a61827dd7fc0fbe2d91d2b5f379c6166.png)
![equation?tex=J%28%5Ctheta%29+%3D+-+%5Cfrac+%7B1%7D+%7Bm%7D+%5Csum%5Em_%7Bi%3D1%7D+y%5E%7B%28i%29%7D+log%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%2B+%281-y%5E%7B%28i%29%7D%29log%281-%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/662ecdc0ddbbfbbbb77c214eefcde134.png)
所以说逻辑回归的损失函数不是定义出来的,而是根据最大似然估计推导出来的。
下面的目标就是:找到一组参数
![equation?tex=theta](https://i-blog.csdnimg.cn/blog_migrate/294336d0f610ab7d48ab18d2e7f7205c.png)
![equation?tex=J%28theta%29](https://i-blog.csdnimg.cn/blog_migrate/7ecfca40cbd97490c4e8d3832ba9093c.png)
这个损失函数是没有标准方程解的,因此在实际的优化中,我们往往直接使用梯度下降法来不断逼近最优解。
3 损失函数的梯度
对于损失函数:
![equation?tex=L%28%5Ctheta%29+%3D+-+%5Cfrac+%7B1%7D+%7Bm%7D+%5Csum%5Em_%7Bi%3D1%7D+y%5E%7B%28i%29%7D+log%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%2B+%281-y%5E%7B%28i%29%7D%29log%281-%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/84f523eb47be01d5999c24aecab07afd.png)
使用梯度下降法,就要求出梯度,对每一个向量
![equation?tex=%5Ctheta](https://i-blog.csdnimg.cn/blog_migrate/679f2e1de0bb439ac572e914fed0f16f.png)
![equation?tex=%5Ctriangledown+f+%3D+%28%5Cfrac+%7B%5Cpartial+L%28%5Ctheta%29%7D+%7B%5Cpartial+%5Ctheta_0%7D%2C+%5Cfrac+%7B%5Cpartial+L%28%5Ctheta%29%7D+%7B%5Cpartial+%5Ctheta_1%7D%2C+%5Cfrac+%7B%5Cpartial+L%28%5Ctheta%29%7D+%7B%5Cpartial+%5Ctheta_2%7D%2C...%2C+%5Cfrac+%7B%5Cpartial+L%28%5Ctheta%29%7D+%7B%5Cpartial+%5Ctheta_n%7D%29%5ET](https://i-blog.csdnimg.cn/blog_migrate/ebc9a821aec93af15b75944bb16f0f36.png)
对sigmoid函数进行求导(链式求导法则):
![equation?tex=%5Csigma%28t%29+%3D+%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-t%7D%7D+%3D+%281+%2B+e%5E%7B-t%7D%29%5E%7B-1%7D+%5C%5C+%5Csigma%28t%29%5E%7B%27%7D++%3D+-%281%2Be%5E%7B-t%7D%29%5E%7B-2%7D+%5Ccenterdot+e%5E%7B-t%7D+%5Ccenterdot+%28-1%29+%3D+%281%2Be%5E%7B-t%7D%29%5E%7B-2%7D+%5Ccenterdot+e%5E%7B-t%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/e9056c74bd8729bbb9dfc31b36fa4cec.png)
然后对外层的log函数进行求导:
![equation?tex=%5Cbegin%7Balign%2A%7D+++%28log+%5Csigma%28t%29%29%5E%7B%27%7D+%26%3D+%5Cfrac+%7B1%7D+%7B%5Csigma%28t%29%7D+%5Ccenterdot+%5Csigma%28t%29%5E%7B%27%7D+%5C%5C++++%26%3D+%5Cfrac+%7B1%7D+%7B%5Csigma%28t%29%7D+%5Ccenterdot+%281%2Be%5E%7B-t%7D%29%5E%7B-2%7D+%5Ccenterdot+e%5E%7B-t%7D++%5C%5C++++%26%3D+%5Cfrac+%7B1%7D+%7B%281+%2B+e%5E%7B-t%7D%29%5E%7B-1%7D%7D+%5Ccenterdot+%281+%2B+e%5E%7B-t%7D%29%5E%7B-2%7D+%5Ccenterdot+e%5E%7B-t%7D+%5C%5C++%26%3D+%281+%2B+e%5E%7B-t%7D%29%5E%7B-1%7D+%5Ccenterdot+e%5E%7B-t%7D+%5Cend%7Balign%2A%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/c743dcfc38e2b0ba0275325628026d4a.png)
然后进行整理:
![equation?tex=%5Cbegin%7Balign%2A%7D+++%28log+%5Csigma%28t%29%29%5E%7B%27%7D+%26%3D%281+%2B+e%5E%7B-t%7D%29%5E%7B-1%7D+%5Ccenterdot+e%5E%7B-t%7D+%3D+%5Cfrac+%7Be%5E%7B-t%7D%7D+%7B1%2Be%5E%7B-t%7D%7D+%5C%5C++++%26%3D+%5Cfrac+%7B1%2Be%5E%7B-t%7D-1%7D+%7B1%2Be%5E%7B-t%7D%7D+%3D+1+-+%5Cfrac+%7B1%7D+%7B1%2Be%5E%7B-t%7D%7D+%5C%5C++%26%3D+1-%5Csigma%28t%29++%5Cend%7Balign%2A%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/0e6761aa3ba4921098a4f08e32243bf0.png)
下面就可以对损失函数前半部分的表达式:
![equation?tex=y%5E%7B%28i%29%7D+log%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29](https://i-blog.csdnimg.cn/blog_migrate/110507dd6a63e7bf5b162cfd39fd16c2.png)
![equation?tex=%5Ctheta](https://i-blog.csdnimg.cn/blog_migrate/679f2e1de0bb439ac572e914fed0f16f.png)
![equation?tex=y%5E%7B%28i%29%7D%281-%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29+%5Ccenterdot+X_j%5E%7B%28i%29%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/14e6342e8c94e51590f528f94aa9fda1.png)
同样地,可以对损失函数的后半部分做求导,跟上面类似。
最终求的损失函数
![equation?tex=L%28%5Ctheta%29](https://i-blog.csdnimg.cn/blog_migrate/6eecf1ef9d3038b7c33e8a8b8c46aa6f.png)
![equation?tex=%5Ctheta](https://i-blog.csdnimg.cn/blog_migrate/679f2e1de0bb439ac572e914fed0f16f.png)
![equation?tex=%5Cfrac+%7BL%28%5Ctheta%29%7D+%7B%5Ctheta_j%7D+%3D+%5Cfrac+%7B1%7D+%7Bm%7D+%5Csum%5Em_%7Bi%3D1%7D%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29-y%5E%7B%28i%29%7D%29X_j%5E%7B%28i%29%7D+%5C%5C](https://i-blog.csdnimg.cn/blog_migrate/88af5f1949db8fa0be7434dc69e9e994.png)
其中
![equation?tex=%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29](https://i-blog.csdnimg.cn/blog_migrate/1185a27758f6c65acedd3d1b1b406a76.png)
在求得对一个参数的导数之后,则可以对所有特征维度上对损失函数进行求导,得到向量化后的结果如下:
![9c92c410574d6a0ceb8b457bf510b189.png](https://i-blog.csdnimg.cn/blog_migrate/a483eb34c14c29c49f414e6429492233.jpeg)
总结
逻辑回归的原理以及损失函数的推导过程都是非常重要的知识点。大家可以从不同角度去学习其中的本质。
说了这么多的理论,下一篇可以手动实现逻辑回归算法了。
![fa0a3d968164b8fb06a79864a8f83be3.png](https://i-blog.csdnimg.cn/blog_migrate/e9497fe9edfcb1bb26acda349f349e5c.jpeg)