逻辑回归的大致过程_14 逻辑回归的本质及损失函数的推导、求解

eb2cbe422b3bd5dbd125020589e8a24b.png

0 前言

在上一篇文章介绍了逻辑回归的模型,并详细讲了其推导过程。为了加深印象,在这篇文章中从对数几率的角度再次探索逻辑回归的推导过程,看看逻辑回归为什么要使用sigmoid函数作为假设。

逻辑回归损失函数的推导,也是面试时经常被问到的一个点,我们也从两个角度去学习其损失函数的推导过程。然后再计算损失函数的导数。

1 从对数几率看逻辑回归

1.1 推导过程

一句话总结逻辑回归:

逻辑回归假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

逻辑回归是一个非线性模型,但是是其背后是以线性回归为理论支撑的。

提出一个与线性模型

equation?tex=y+%3D+%5Ctheta%5ET+%5Ccenterdot+X_b长相类似但不同的新公式:假设特征X所对应的y值是在指数上变化,那么就可以将结果y值取对数,作为其线性模型逼近的目标。也就是所谓的“对数线性回归”:
equation?tex=ln%28y%29+%3D+%5Ctheta%5ET+%5Ccenterdot+X_b

在“对数线性回归”的公式中,可以改写为

equation?tex=y+%3D+e%5E%7B%5Ctheta%5ET+%5Ccenterdot+X_b%7D。实际上是在求输入空间X到输出空间y的
非线性函数映射。对数函数的作用是 将线性回归模型的预测值与真实标记联系起来

因此可以得到一个一般意义上的单调可微的“联系函数”:

equation?tex=g%28a%29%3Dln%28a%29。其
本质就是给原来线性变换加上一个非线性变换(或者说映射), 使得模拟的函数有非线性的属性,但本质上调参还是线性的,主体是内部线性的调参

那么对于解决分类问题的逻辑回归来说,我们需要找到一个“联系函数”,将线性回归模型的预测值与真实标记联系起来

将“概率”转换为“分类”的工具事“阶梯函数”

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

但是这个阶梯函数不连续,不能作为“联系函数”g,因此使用对数几率函数来在一定程度上近似阶梯函数,将线性回归模型的预测值转化为分类所对应的概率。

equation?tex=%5Csigma%28t%29+%3D+%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-t%7D%7D+%5C%5C

如果另y为正例,1-y为负例,所谓的“几率”就是二者的比值

equation?tex=%5Cfrac+%7By%7D+%7B1-y%7D。几率反映了样本x为正例的相对可能性。

“对数几率”就是对几率取对数

equation?tex=ln%5Cfrac+%7By%7D+%7B1-y%7D,对数几率实际上就是之前提到的sigmoid函数,将线性模型转化为分类。

如果另

equation?tex=y%3D%5Cfrac%7B1%7D+%7B1%2Be%5E%7B-%5Ctheta%5ET+%5Ccenterdot+X_b%7D%7D
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。带入到对数几率中
equation?tex=ln%5Cfrac+%7By%7D+%7B1-y%7D%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

那么,如何求出未知参数

equation?tex=%5Ctheta呢?

首先回顾一下线性回归。在线性回归中,做法如下:

由于已知
equation?tex=%5Ctheta%5ET+%5Ccenterdot+x_b 是估计值,于是用估计值与真值的差来度量模型的好坏。使用MSE(差值的平方和再平均)作为损失函数。 然后就可以通过导数求极值的方法,找到令损失函数最小的
equation?tex=%5Ctheta了。

那么在逻辑回归中,解决思路也大致类似。

逻辑回归和线性回归最大的区别就是:逻辑回归解决的是分类问题,得到的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

c42cf12f4eecc358172ff5fc485b90e0.png

分析上面的公式:

  • 当y=1时,损失函数为
    equation?tex=-log%28%5Chat+p%29。特点是:
    equation?tex=%5Chat+p越趋于0,损失(loss)越大;越趋于1,损失(loss)越小
    • 分析如下:
      equation?tex=J%3D-log%28%5Chat+p%29是一个单调递减函数,且概率p的值域之能是[0,1]之间,因此只有函数的上半部分。我们看到当概率p取0(即预估的分类结果y=0)时,loss值是趋近于正无穷的,表明我们分错了(实际分类结果是1)。
  • 当y=0时,损失函数为
    equation?tex=-log%281+-+%5Chat+p%29。特点是:
    equation?tex=%5Chat+p越趋于1,损失(loss)越大;越趋于0,损失(loss)越小
    • 分析如下:
      equation?tex=J%3D-log%281-%5Chat+p%29是一个单调递减函数,且概率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

以上是对于单个样本的误差值,那么求整个集合内的损失可以取平均值:

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

然后,我们将

equation?tex=%5Chat+p 替换成sigmoid函数,得到
逻辑回归的损失函数如下

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

2.2 另一种推导方式

我们已经知道了逻辑损失函数的推导过程,但是就像在数学课上老师在黑板中写下的解题过程一样,我们费解的是“这个思路究竟是怎么来的”?

逻辑回归的损失函数当然不是凭空出现的,而是根据逻辑回归本身式子中系数的最大似然估计推导而来的。

最大似然估计就是通过已知结果去反推最大概率导致该结果的参数。极大似然估计是概率论在统计学中的应用,它提供了一种给定观察数据来评估模型参数的方法,即 “模型已定,参数未知”,通过若干次试验,观察其结果,利用实验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。

逻辑回归是一种监督式学习,是有训练标签的,就是有已知结果的,从这个已知结果入手,去推导能获得最大概率的结果参数,只要我们得出了这个参数,那我们的模型就自然可以很准确的预测未知的数据了。

令逻辑回归的模型为

equation?tex=h_0%28x%3B%5Ctheta%29,则可以将其视为类1的后验概率,所以有:

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

以上两个式子,可以改写为一般形式:

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

因此根据最大似然估计,可以得到:

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

为了简化计算,取对数将得到:

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

我们希望极大似然越大越好,就是说,对于给定样本数量m,希望

equation?tex=-%5Cfrac+%7B1%7D+%7Bm%7D+log%28J%28%5Ctheta%29%29越小越好,得到
逻辑回归的损失函数如下

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

所以说逻辑回归的损失函数不是定义出来的,而是根据最大似然估计推导出来的。

下面的目标就是:找到一组参数

equation?tex=theta,使得损失函数
equation?tex=J%28theta%29达到最小值。

这个损失函数是没有标准方程解的,因此在实际的优化中,我们往往直接使用梯度下降法来不断逼近最优解。

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

使用梯度下降法,就要求出梯度,对每一个向量

equation?tex=%5Ctheta中每一个参数,都求出对应的导数:
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

对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

然后对外层的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

然后进行整理:

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

下面就可以对损失函数前半部分的表达式:

equation?tex=y%5E%7B%28i%29%7D+log%28%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29%29
equation?tex=%5Ctheta进行求导了。带入上面的结果,得到:

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

同样地,可以对损失函数的后半部分做求导,跟上面类似。

最终求的损失函数

equation?tex=L%28%5Ctheta%29
equation?tex=%5Ctheta的导数如下,即逻辑回归的损失函数经过梯度下降法对一个参数进行求导,得到结果如下:

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

其中

equation?tex=%5Csigma%28%5Ctheta%5ET+%5Ccenterdot+X_b%5E%7B%28i%29%7D%29就是逻辑回归模型的预测值。

在求得对一个参数的导数之后,则可以对所有特征维度上对损失函数进行求导,得到向量化后的结果如下:

9c92c410574d6a0ceb8b457bf510b189.png

总结

逻辑回归的原理以及损失函数的推导过程都是非常重要的知识点。大家可以从不同角度去学习其中的本质。

说了这么多的理论,下一篇可以手动实现逻辑回归算法了。

fa0a3d968164b8fb06a79864a8f83be3.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值