遵循统一的机器学习框架理解逻辑回归

Posted spingc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遵循统一的机器学习框架理解逻辑回归相关的知识,希望对你有一定的参考价值。

遵循统一的机器学习框架理解逻辑回归

标签: 机器学习 LR 分类

一、前言

  1. 我的博客不是科普性质的博客,仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
  2. 本文参考了网络上诸多资料。

二、理解

统一的机器学习框架(MLA):

1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)

按照如上所说框架,LR最核心的就是损失函数使用了 SigmoidCross Entropy

LR: Sigmoid + Cross Entropy

Model

题外话:参照上一篇博客:遵循统一的机器学习框架理解SVM,就会发现LR与SVM在模型和算法上是一样的,不同点就在于损失函数的不同。

给定数据集 \\((x^1,\\haty^1),(x^2,\\haty^2)...(x^n,\\haty^n)\\),其中\\(\\haty^i\\in\\0,1\\\\)\\(y\\) 表示预测的 \\(label\\) 值,线性函数:
\\[f(x)=w^Tx+b\\]

\\[y=\\begincases 1,\\quad &f(x)>0\\0, &f(x)<0 \\endcases\\]
同时:
\\(\\haty=1\\) 时,\\(f(x)\\)越大越好; $\\haty=0 $ 时,\\(f(x)\\)越小越好。

Loss

经验风险最小化(交叉熵损失函数):Sigmoid + Cross Entropy。
增加Sigmoid的目的是为了把 \\(f(x)\\) 的值放缩到0-1之间,用于计算交叉熵损失。

\\[ \\beginaligned &z = \\sigma(f(x))\\&p(\\haty=1|x;w,b) = z\\&p(\\haty=0|x;w,b) = 1-z \\endaligned \\]

\\(z\\) 表示预测出的可能性

经验风险

1.使用 \\(sigmoid + cross\\ entropy\\) 的损失函数:
\\[\\haty=\\begincases 1,\\; &f(x)>0\\; &\\sigma(f(x))\\longrightarrow 1, &Loss=-ln(z)\\0,\\; &f(x)<0\\; &\\sigma(f(x))\\longrightarrow 0, &Loss=-ln(1-z) \\endcases\\]

\\[ Loss = -[\\haty ln z+(1-\\haty)ln (1-z)] \\]

2.从最大似然的角度
假设训练样本相互独立,那么似然函数表达式为:

\\[ \\beginaligned Loss &= p(\\hatY|X;w,b) \\&= \\prod_i=1^n p(\\haty^i|x^i;w,b)\\&= \\prod_i=1^n z_i^\\haty^i (1-z_i)^1-\\haty^i\\&= \\sum_i=1^n \\haty^iln z_i + (1-\\haty^i)ln(1-z_i) \\endaligned \\]

至此,发现从交叉熵的角度和最大似然的角度,得到的损失函数竟然完全相同,说明他俩在背后存在着不为人知的本质联系。
现在开始探究这种联系。

3. 交叉熵与最大似然的联系

\\[H(X) = -E_x \\sim P[log P(x)]\\]

KL散度:KL衡量两个分布之间的差异
\\[ \\beginaligned D_KL(P||Q) &=E_x \\sim P[log \\fracP(x)Q(x)]\\&=E_x \\sim P[logP(x)-logQ(x)] \\endaligned \\]

\\(D_KL(P||Q)\\)表示选择一个 \\(Q\\),使得它在 \\(P\\) 具有高概率的地方具有高概率。简单来说就是找到一组参数表示 \\(Q\\) 分布,这组参数要做到:当 \\(P\\) 分布中高概率的地方时,从这组参数也能取到高概率。

交叉熵
\\[ \\beginaligned H(P,Q) &=H(P)+D_KL(P||Q) \\endaligned \\]

具体到我们的场景而言:\\(\\hatY\\) 分布对应着 \\(P\\) 分布, \\(Y\\) 分布对应着 \\(Q\\) 分布。\\(\\hatY\\) 分布是确定的,\\(Y\\) 分布是我们所求的。换句话说就是让 \\(Y\\) 分布尽量逼近 \\(\\hatY\\) 分布。

在我们这个场景下,\\(\\hatY\\) 是确定但未知的(先验分布)。

\\[ \\beginaligned H(\\hatY,Y) &= H(\\hatY)+D_KL(\\hatY||Y)\\&=-E_x \\sim \\hatY[log \\hatY]+E_x \\sim \\hatY[log\\hatY(x)-logY(x)]\\&=E_x \\sim \\hatY-logY(x) \\endaligned \\]

当我们最小化交叉熵时:
\\[ \\beginaligned &min\\;\\;H(\\hatY,Y)\\&min\\;\\;D_KL(\\hatY||Y)\\&min \\;\\;E_x \\sim \\hatY[log\\hatY(x)-logY(x)]\\&min \\;\\;E_x \\sim \\hatY-logY(x) \\endaligned \\]

\\(\\hatY\\) 分布是已知,则熵是常量,此时交叉熵和KL散度则是等价的。
针对 \\(Y\\) 最小化交叉熵等价于最小化KL散度,因为 \\(H(\\hatY)\\)\\(Y\\)无关。

注意最后的 \\(E_x \\sim \\hatY-logY(x)\\) 与熵 \\(H(Y)\\) 之间的差别。熵是已经知道一个变量x的概率分布,求出来的是这个分布的事件所产生的期望信息总量;但对于这个式子,\\(Y\\) 分布是未知的,是我们所要求的东西。我们只是希望\\(Y\\)\\(\\hatY\\)之间尽可能相似或者接近,而并不需要知道他们每个的确切的分布是什么(也就是并不需要知道概率分布的表达式),所以使用KL散度直接定义他们之间的差异就行了。
说到这里想起来了上一篇介绍SVM时的核函数,其中也是要把低维空间升到高维空间,然后计算他们的内积,对于这整个过程,我们最终需要的是内积的结果。为了减少计算量同时达到最终的目的,跳过中间复杂的过程,引入了核函数,这样我们就不需要知道升维后具体是什么样子。

最小化KL散度和模型采用最大似然估计进行参数估计又是一致的,因此交叉熵与最大似然估计有一个KL散度关联在一起的。

Algorithm

梯度下降法

\\(\\sigma(x)' = \\sigma(x)(1-\\sigma(x))\\)
$ min;;Loss = -\\sum_i=1^n \\haty^i ln z_i + (1-\\haty^i)ln(1-z_i)$
\\(z = \\sigma(f(x))\\)

\\[ \\beginaligned \\frac\\partial L\\partial w &= -\\sum_i=1^n \\haty^i \\frac1z_i z_i(1-z_i) x^i+(1-\\haty^i)\\frac11-z_i (-1) z_i(1-z_i)x^i \\&= -\\sum_i=1^n \\haty^i(1-z_i) x^i-(1-\\haty^i)z_ix^i\\&= -\\sum_i=1^n (\\haty^i-z_i)x^i\\&= -\\sum_i=1^n (\\haty^i-\\sigma(w^Tx^i+b))x^i \\endaligned \\]

\\[ \\beginaligned w^k+1 &= w^k - \\eta \\frac\\partial L\\partial w \\&= w^k+\\eta\\sum_i=1^n (\\haty^i-z_i)x^i \\endaligned \\]

这里有一个很好的性质,更新的梯度与 \\(\\haty^i-z_i\\) 有关,当他们之间的差距越大时,更新的梯度越大。

三、扩展

上面所说的模型中\\(\\haty^i\\in\\0,1\\\\),换一种写法:\\(\\haty^i\\in\\1,-1\\\\),还是用sigmoid+交叉熵的方式来写损失函数。
此时:
\\[\\haty=\\begincases 1,\\; &f(x)>0\\; &\\sigma(f(x))\\longrightarrow 1, &Loss=-ln(z)\\-1,\\; &f(x)<0\\; &\\sigma(f(x))\\longrightarrow 0, &Loss=-ln(1-z)=-ln(-z) \\endcases\\]

上式的变换参考上一篇遵循统一的机器学习框架理解SVM

综合得来:
\\[ \\beginaligned Loss &= -\\sum_i=1^n ln(\\sigma(\\haty^if(x^i)))\\\\&= - \\sum_i=1^n ln \\frac11+exp(-\\haty^if(x^i))\\\\&=\\sum_i=1^n ln(1+exp(-\\haty^if(x^i))) \\endaligned \\]

\\[ \\beginaligned \\frac\\partial L\\partial w &= -\\sum_i=1^n \\frac1\\sigma(\\haty^if(x^i))\\sigma(\\haty^if(x^i))(1-\\sigma(\\haty^if(x^i)))\\haty^ix^i\\&=-\\sum_i=1^n (\\haty^i-\\haty^i\\sigma(\\haty^if(x^i)))x^i \\endaligned \\]

\\(\\haty^i=1\\)时,\\[\\frac\\partial L\\partial w=-\\sum_i=1^n (1-\\sigma(f(x^i)))x^i\\]

\\(\\haty^i=-1\\)时,\\[\\frac\\partial L\\partial w=-\\sum_i=1^n (-1+\\sigma(-f(x^i)))x^i=-\\sum_i=1^n (-1+1-\\sigma(f(x^i)))x^i=-\\sum_i=1^n -\\sigma(f(x^i))x^i\\]

到此可以看出与\\(\\haty^i\\in\\1,0\\\\) 时完全相同。

以上是关于遵循统一的机器学习框架理解逻辑回归的主要内容,如果未能解决你的问题,请参考以下文章

机器学习:逻辑回归(基础理解)

机器学习:基于逻辑回归对某银行客户违约预测分析

机器学习基础:理解逻辑回归及二分类多分类代码实践

《机器学习》学习笔记:线性回归逻辑回归

机器学习python实战----逻辑回归

机器学习:理解逻辑回归及二分类多分类代码实践