逻辑回归1_殊途同归的推导——极大似然概率和最小损失函数,以及正则化简介

博客是我个人学习的心得记录——以及挑战,不见得对,欢迎指正。如果有疑问,欢迎留言探讨,我基本都会回复。

逻辑回归系列如下:

序号 内容 完成时间
1 殊途同归的推导——极大似然概率和最小损失函数,以及正则化简介 2018.12.04
2 不要只是掉包侠——手把手实现logistics算法
3 善用现有轮子——sklearn中的logistics如何调参
4 连续特征离散化——改善模型的非线性表达能力
5 WOE转化——变量筛选以及变量转化的其他思路

1. 算法推导

介绍算法比较无聊(敲公式也比较累),但是为了完整性,我们快速过下核心推导过程。

逻辑回归试图找到一个分离间隔来区分0类和1类(一般定义我们关心的类别为1类),分离间隔的表达式如下:

一般用向量表示,即:

判别时将其作为sigmoid函数的输入,得到1类的概率 :

求解逻辑回归的过程,就是求解和 的过程。我们通过最小化损失函数或极大似然概率来求解,先说第一种。

1.1 最小化损失函数

​ 损失函数用来衡量预测值和真实值之间的差异,差异越大,损失函数越大。我们关注损失函数的这种特性,反而不关注具体损失是多少。

​ 逻辑回归输出类别的概率,真实的概率是1,则对该类的预测概率越低,损失函数越大。可用 表示,​的曲线如下:(注意此时​与 ​不是同个概念,​指1类的概率,代表任何一类)

逻辑回归的损失只跟真实类的-log(p)有关

可见:

  • 越小,预测得越不准,损失越大。当趋于0,损失趋于无穷大
  • 越大,预测得越准,损失越小。当​趋于1,损失趋于0

具体对逻辑回归来说

  • 当样本属于1类,即 时,预测结果,损失函数为;
  • 当样本属于0类,即 时,预测结果,损失函数为

统一起来,单样本的损失函数可表示为:

分别把 和 代进去,会发现这个公式的巧妙之处。

​ 这个损失函数被成为交叉熵损失函数。(关于信息熵,交叉熵,联合熵,条件熵等等各种熵,关系千丝万缕,我们会另外开贴聊)

插句题外话,你如果见过其他资料,可能觉得我说得有点复杂,怎么又是又是的。这样的好处是,当以后你遇到多分类,即sofmax回归的损失函数时,会发现其损失也是通过真实类别的预测概率 来表示的,那时候你就会发现这样理解更统一了。

​ 现在我们的目的是最小化损失函数,采用的方法是梯度下降。简单来说就是:我们要求得一组合适的向量和,使得损失函数 最小。但是没办法直接求得答案,我们通过以下方法求解:(取 向量中一个 为例)

  1. 随机初始化 和 ,比如说0
  2. 计算 和 的梯度 、
  3. 设定一个学习率 ,更新 和 的值: ,
  4. 迭代执行2-3步骤
  5. 当满足两个条件之一停止迭代:1)前后两次的值变化小于某个很小的阈值 2)迭代轮次达到某个指定次数。

是一个超参数,需要多次尝试取得最佳值。现在的问题是梯度 、 怎么计算。推导过程如下。

整理一下,现在有如下算式

根据高中学过的复合函数的求导方式(深度学习DNN里称作链式法则——换了个名字我差点认不出你赵二蛋了)
\left\{ \begin{array}{c} \frac{\partial{L}}{\partial{w}} = \frac{\partial{L}}{\partial{a}} \frac{\partial{a}}{\partial{z}} \frac{\partial{z}}{\partial{w}} \\ \frac{\partial{L}}{\partial{b}} = \frac{\partial{L}}{\partial{a}} \frac{\partial{a}}{\partial{z}} \frac{\partial{z}}{\partial{b}} \\ \end{array} \right.
两个等式中都有 、, 先求导得:

\begin{align} \frac{\partial a}{\partial z} & =(-1)*\frac{1}{(1+e^{-z})^2}*e^{-z}*(-1) \\ & = \frac{1}{1+e^{-z}}*\frac{e^{-z}-1+1}{1+e^{-z}} \\ & = \frac{1}{1+e^{-z}}*( 1-\frac{1}{1+e^{-z}}) \\ & = a(1-a) \end{align}

则两个相乘,计算得:
\begin{align} \frac{\partial L}{\partial z} &=\frac{\partial L}{\partial a} \frac{\partial a}{\partial z}\\ & =( -\frac{y} {a} + \frac{1-y} {1-a}) * a(1-a) \\ & = -y(1-a) + (1-y)a \\ & =-y+ay+a-ay \\ & = a-y \end{align}
求导到这里,算式又变简单了,舒服了。。。接着来,对于一组向量来说,当对某个具体的求偏导,其余可以看做常量,则求导结果为所求对应的。对来说,系数固定为1,则求导结果为1。如下:

综上,最终梯度计算结果如下:
\left\{ \begin{array}{c} \frac{\partial L}{\partial w} =\frac{\partial L}{\partial z}\frac{\partial z}{\partial w}=(a-y)x \\ \frac{\partial L}{\partial b} =\frac{\partial L}{\partial z}\frac{\partial z}{\partial b}=a-y \\ \end{array} \right.
这样, 和 就可以求解了。

最后总结一下逻辑回归的运行过程——用深度神经网络来说,分为前向过程和后向过程。

  1. 随机初始化 和 ,代入式子计算出得到 ​ (前向过程)
  2. 根据 计算出 和 的梯度,利用 梯度跟新 b$ 的值(后向过程)
  3. 根据新的 和 ,继续计算 ,如此重复迭代前向和后向过程,直到满足停止迭代的条件。

多样本的情况

为了便于阐述,上述假设只有单样本。多样本的情况是类似的,假设针对 样本,则平均损失函数为:

求和项的导数,等于各项加数分别求导后再相加。所以基于 个样本的损失函数求得的平均梯度,实际等于分别基于各个样本求得梯度再求平均。即:

  • 当 全部样本时,这种方法叫梯度下降,每次迭代采用全部样本,收敛速度较快,但运算速度慢。
  • 当 1 时,这种方法叫随机梯度下降,每次迭代随机抽取一条样本,收敛速度较慢,但运算速度快。
  • 当 全部样本时,这种方法叫batch梯度下降,一个batch取若干个样本,是上述两种方式的折衷。

1.2 用最大似然估计推导

​ 如上所述,逻辑回归可以输出各个类别的概率,即对于当前给定的样本来说(其实就是给你一堆已知的 ),代入不同 和 ,可以计算得到同一样本的不同概率,把所有样本的概率连乘起来,就是整体样本的概率。那么哪一组 、 是最逼近真实值的最佳估计值呢?最大似然估计内涵在于:以使当前整体样本出现的概率为最大值的那一组 和 作为最佳估计值。

极大似然估计的求解一般分为三个步骤:

  1. 写出似然函数,一般为一个概率连乘的表达形式。
  2. 将概率相乘转化为 相加(增减趋势一致)
  3. 求 相加的最大值

首先假设 和 已知,计算每个样本出现的概率:

  • 对于正样本,
  • 对于负样本,由于是二分类,所以

则不论是正样本( ),还是负样本( ),一个样本的概率可以统一表示为:

整个样本出现的概率,即似然函数,可以表达为:

​ 求解 的最大值等于求解 的最大值,注意这里 底数必须大于1。当 底数大于1时, 函数是严格单调递增的, 随着 的增大, 也跟着增加。也就是说,我们并不在乎最大具体是多少,我们只在乎在哪个点取得最大值。

所以转化如下:

进一步的,求 的最大值,等于求 的最小值,所以求解目标转化为最小化下式:

​ 有没有惊奇的发现,这个式子不就是上面的损失函数么。于是最终,两种方法,殊途同归。接下来用梯度下降进行求解,剩下的步骤就和上述一致了。

1.3 正则项——修正过拟合

​ 啥叫过拟合:模型过于复杂,以至于把数据噪声也记下来了。

​ 怎么判断过拟合:来自同一数据分布的训练集和测试集效果差异很大,如训练集准确率很高,但测试集没那么高,有显著差异。训练集准确率高,是因为把数据噪声也学习进去了。

​ 怎么解决过拟合:主要有:从算法层面有逻辑回归增加正则处理、决策树减枝、神经网络dropout等,都是为了降低模型的复杂度;从数据层面有增加数据量,使训练数据尽量接近真实数据。

​ 过拟合作为机器学习共有的知识点,并不是逻辑回归专属,所以不过多介绍了,主要简单说说逻辑回归怎么解决。

​ 逻辑回归通过增加或正则项,来降低模型的复杂度,进而减少过拟合。

增加 正则项损失函数如下:

增加 正则项损失函数如下:
\left\{ \begin{array}{c} L(y,a) =\frac{1}{m}\sum_{i=1}^m[-y_ilog(a_i)-(1-y_i)log(1-a_i)] + \frac{\lambda}{2}||W||^2 \\ \frac{\lambda}{2}||W||^2 = \frac{\lambda}{2}(w_1^2+w_2^2+w_3^2+\dots+w_n^2) \\ \end{array} \right.
​ 也就是说,在计算损失的时候,不仅关注预测值和真实值之间的差距,也关注系数项 的大小。通过控制系数来降低模型复杂度,从而减少过拟合,增加泛华能力。

众所周知,关于 、 正则话的区别如下:

  • 正则项能够使相关系较低的特征,对应的系数等于0,得到稀疏的 向量
  • 而 正则项倾向将特征的系数缩小趋于0

关于个中原理,我见过很多解释,比较出名的从”损失函数等高线“几何图进行解释的。我自己的理解比较简单,如果有错烦请不吝指出。

​ 不管那种正则项,用梯度下降计算梯度时,前面那部分求导是一致,差别在于后半部分。 的 求导出来是 ,意味着在多次迭代中,不管系数 大小如何, 会比较恒定的加减某个值——即便是 已经很小了,因此比较容易减小为0。而 的 求导出来是 , 当 比较小的时候, 也比较小,所以会减去一个较小的值,不断区域0但不会等于0。

逻辑回归(1)到此结束,本来打算理论只写1500,结果现在3000+了,我还是太啰嗦了……

下一篇是不掉包,手动实现逻辑回归。(终于不用敲公式了 ……)

你可能感兴趣的:(逻辑回归1_殊途同归的推导——极大似然概率和最小损失函数,以及正则化简介)