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

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

逻辑回归系列如下:

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

1. 算法推导

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

逻辑回归试图找到一个分离间隔来区分0类和1类(一般定义我们关心的类别为1类),分离间隔的表达式如下:
z = w_1x_1+w_2x_2+w_3x_3+……+w_nx_n+b
一般用向量表示,即:
z=W^TX+b
判别时将其作为sigmoid函数的输入,得到1类的概率 a
a =\frac{1}{1+e^{-z}}
求解逻辑回归的过程,就是求解W^Tb的过程。我们通过最小化损失函数或极大似然概率来求解,先说第一种。

1.1 最小化损失函数

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

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

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

可见:

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

具体对逻辑回归来说

  • 当样本属于1类,即 y=1时,预测结果p=a,损失函数为-log(a);
  • 当样本属于0类,即 y=0时,预测结果p=1-a,损失函数为 -log(1-a)

统一起来,单样本的损失函数可表示为:
L(y,a) =-ylog(a)-(1-y)log(1-a)
分别把y=1y=0 代进去,会发现这个公式的巧妙之处。

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

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

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

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

\alpha是一个超参数,需要多次尝试取得最佳值。现在的问题是梯度 \frac{\partial{L}}{\partial{w}}\frac{\partial{L}}{\partial{b}} 怎么计算。推导过程如下。

整理一下,现在有如下算式
\left\{ \begin{array}{c} L(y,a) =-ylog(a)-(1-y)log(1-a) \\ a =\frac{1}{1+e^{-z}} \\ z=W^TX+b\end{array} \right.
根据高中学过的复合函数的求导方式(深度学习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.
两个等式中都有 \frac{\partial{L}}{\partial{a}}\frac{\partial{a}}{\partial{z}}, 先求导得:
\begin{align} \frac{\partial L}{\partial a} & =-\frac{y} {a} - \frac{1-y} {1-a} *(-1)\\ & = -\frac{y} {a} + \frac{1-y} {1-a} \\ \end{align}

\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}
求导到这里,算式又变简单了,舒服了。。。接着来,对于一组W向量来说,当对某个具体的w求偏导,其余w可以看做常量,则求导结果为所求w对应的x。对b来说,系数固定为1,则求导结果为1。如下:
\left\{ \begin{array}{c} \frac{\partial z}{\partial w} = x \\ \frac{\partial z}{\partial b} = 1\\ \end{array} \right.
综上,最终梯度计算结果如下:
\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.
这样, wb 就可以求解了。

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

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

多样本的情况

为了便于阐述,上述假设只有单样本。多样本的情况是类似的,假设针对 m 样本,则平均损失函数为:
L(y,a) =\frac{1}{m}\sum_{i=1}^m[-y_ilog(a_i)-(1-y_i)log(1-a_i)]
求和项的导数,等于各项加数分别求导后再相加。所以基于m 个样本的损失函数求得的平均梯度,实际等于分别基于各个样本求得梯度再求平均。即:
\left\{ \begin{array}{c} \frac{\partial L}{\partial w} (avg)=\frac{1}{m}\sum_{i=1}^m(a_i-y_i)x_i \\ \frac{\partial L}{\partial b}(avg) =\frac{1}{m}\sum_{i=1}^m(a_i-y_i) \\ \end{array} \right.

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

1.2 用最大似然估计推导

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

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

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

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

  • 对于正样本,p=\frac{1}{1+e^{-(W^TX+b)}} = a
  • 对于负样本,由于是二分类,所以 p=1-a

则不论是正样本( y=1 ),还是负样本( y=0 ),一个样本的概率可以统一表示为:
p = a^y(1-a)^{1-y}
整个样本出现的概率,即似然函数,可以表达为:
L=\prod_mp_i=\prod_ma_i^{y_i}(1-a_i)^{1-y_i}
​ 求解 L 的最大值等于求解 log(L) 的最大值,注意这里 log 底数必须大于1。当 log 底数大于1时, log函数是严格单调递增的, 随着 L 的增大,log(L) 也跟着增加。也就是说,我们并不在乎最大具体是多少,我们只在乎在哪个点取得最大值。

所以转化如下:
\begin{align} log (L) &=log(\prod_ma_i^{y_i}(1-a_i)^{1-y_i})\\ & = \sum_mlog(a_i^{y_i}(1-a_i)^{1-y_i}) \\ & = \sum_m(loga_i^{y_i}+log(1-a_i)^{1-y_i}) \\ & = \sum_m[y_iloga_i+(1-y_i)log(1-a_i)] \end{align}
进一步的,求 log(L) 的最大值,等于求 -log(L) 的最小值,所以求解目标转化为最小化下式:
-log (L) = \sum_m[-y_iloga_i-(1-y_i)log(1-a_i)]
​ 有没有惊奇的发现,这个式子不就是上面的损失函数么。于是最终,两种方法,殊途同归。接下来用梯度下降进行求解,剩下的步骤就和上述一致了。

1.3 正则项——修正过拟合

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

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

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

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

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

增加 L1 正则项损失函数如下:
\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)] + \lambda||W||^1 \\ \lambda||W||^1 = \lambda(w_1+w_2+w_3+\dots+w_n) \\ \end{array} \right.
增加 L1 正则项损失函数如下:
\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.
​ 也就是说,在计算损失的时候,不仅关注预测值和真实值之间的差距,也关注系数项 W 的大小。通过控制系数来降低模型复杂度,从而减少过拟合,增加泛华能力。

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容