邢台企业网站制作公司,wordpress 博客 安装教程,大学生创业计划书,无极任务平台文章目录1 前言2 什么是逻辑回归3 逻辑回归的代价函数4 利用梯度下降法求参数5 结束语6 参考文献1 前言
逻辑回归是分类当中极为常用的手段#xff0c;因此#xff0c;掌握其内在原理是非常必要的。我会争取在本文中尽可能简明地展现逻辑回归(logistic regression)的整个推导…
文章目录1 前言2 什么是逻辑回归3 逻辑回归的代价函数4 利用梯度下降法求参数5 结束语6 参考文献1 前言
逻辑回归是分类当中极为常用的手段因此掌握其内在原理是非常必要的。我会争取在本文中尽可能简明地展现逻辑回归(logistic regression)的整个推导过程。
2 什么是逻辑回归
逻辑回归在某些书中也被称为对数几率回归明明被叫做回归却用在了分类问题上我个人认为这是因为逻辑回归用了和回归类似的方法来解决了分类问题。
假设有一个二分类问题输出为y∈{0,1}y \in \{0, 1\}y∈{0,1}而线性回归模型产生的预测值为zwTxbz w^Tx bzwTxb是实数值我们希望有一个理想的阶跃函数来帮我们实现zzz值到0/10/10/1值的转化。
ϕ(z){0ifz00.5ifz01ifz0\phi (z) \left\{ \begin{aligned} 0 \quad if \ z 0 \\ 0.5 \quad if \ z0 \\ 1 \quad if \ z0 \end{aligned} \right. ϕ(z)⎩⎪⎨⎪⎧0if z00.5if z01if z0
然而该函数不连续我们希望有一个单调可微的函数来供我们使用于是便找到了SigmoidfunctionSigmoid \ functionSigmoid function来替代。
ϕ(z)11e−z\phi (z) \dfrac{1}{1 e^{-z}}ϕ(z)1e−z1
两者的图像如下图所示图片出自文献2
图1sigmoid step function有了SigmoidfuctionSigmoid \ fuctionSigmoid fuction之后由于其取值在[0,1][0,1][0,1]我们就可以将其视为类111的后验概率估计p(y1∣x)p(y 1|x)p(y1∣x)。说白了就是如果有了一个测试点xxx那么就可以用SigmoidfuctionSigmoid \ fuctionSigmoid fuction算出来的结果来当做该点xxx属于类别111的概率大小。
于是非常自然地我们把SigmoidfuctionSigmoid \ fuctionSigmoid fuction计算得到的值大于等于0.50.50.5的归为类别111小于0.50.50.5的归为类别000。
y^{1ifϕ(z)≥0.50otherwise\hat{y} \left\{ \begin{aligned} 1 \quad if \ \phi (z) \geq 0.5 \\ 0 \quad \quad \ otherwise \end{aligned} \right. y^{1if ϕ(z)≥0.50 otherwise
同时逻辑回归与自适应线性网络非常相似两者的区别在于逻辑回归的激活函数是SigmoidfunctionSigmoid \ functionSigmoid function而自适应线性网络的激活函数是yxy xyx两者的网络结构如下图所示图片出自文献1。 图2自适应线性网络图3逻辑回归网络3 逻辑回归的代价函数
好了所要用的几个函数我们都有了接下来要做的就是根据给定的训练集把参数www给求出来了。要找参数www首先就是得把代价函数cost function给定义出来也就是目标函数。
我们第一个想到的自然是模仿线性回归的做法利用误差平方和来当代价函数。
J(w)∑i12(ϕ(z(i))−y(i))2J(w) \sum_{i} \dfrac{1}{2} (\phi(z^{(i)}) - y^{(i)})^2J(w)i∑21(ϕ(z(i))−y(i))2
其中z(i)wTx(i)bz^{(i)} w^Tx^{(i)} bz(i)wTx(i)biii表示第iii个样本点y(i)y^{(i)}y(i)表示第iii个样本的真实值ϕ(z(i))\phi(z^{(i)})ϕ(z(i))表示第iii个样本的预测值。
这时如果我们将ϕ(z(i))11e−z(i)\phi (z^{(i)}) \dfrac{1}{1 e^{-z^{(i)}}}ϕ(z(i))1e−z(i)1代入的话会发现这是一个非凸函数这就意味着代价函数有着许多的局部最小值这不利于我们的求解。 图4凸函数和非凸函数那么我们不妨来换一个思路解决这个问题。前面我们提到了ϕ(z)\phi(z)ϕ(z)可以视为类111的后验估计所以我们有
p(y1∣x;w)ϕ(wTxb)ϕ(z)p(y1|x;w) \phi(w^Tx b)\phi(z)p(y1∣x;w)ϕ(wTxb)ϕ(z)
p(y0∣x;w)1−ϕ(z)p(y0|x;w) 1 - \phi(z)p(y0∣x;w)1−ϕ(z)
其中p(y1∣x;w)p(y1|x;w)p(y1∣x;w)表示给定www那么xxx点y1y1y1的概率大小。
上面两式可以写成一般形式
p(y∣x;w)ϕ(z)y(1−ϕ(z))(1−y)p(y|x;w)\phi(z)^{y}(1 - \phi(z))^{(1-y)}p(y∣x;w)ϕ(z)y(1−ϕ(z))(1−y)
接下来我们就要用极大似然估计来根据给定的训练集估计出参数www。
L(w)∏i1np(y(i)∣x(i);w)∏i1n(ϕ(z(i)))y(i)(1−ϕ(z(i)))1−y(i)L(w)\prod_{i1}^{n}p(y^{(i)}|x^{(i)};w)\prod_{i1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{1-y^{(i)}}L(w)i1∏np(y(i)∣x(i);w)i1∏n(ϕ(z(i)))y(i)(1−ϕ(z(i)))1−y(i)
为了简化运算我们对上面这个等式的两边都取一个对数
l(w)lnL(w)∑i1ny(i)ln(ϕ(z(i)))(1−y(i))ln(1−ϕ(z(i)))l(w)lnL(w)\sum_{i 1}^n y^{(i)}ln(\phi(z^{(i)})) (1 - y^{(i)})ln(1-\phi(z^{(i)}))l(w)lnL(w)i1∑ny(i)ln(ϕ(z(i)))(1−y(i))ln(1−ϕ(z(i)))
我们现在要求的是使得l(w)l(w)l(w)最大的www。没错我们的代价函数出现了我们在l(w)l(w)l(w)前面加个负号不就变成就最小了吗不就变成我们代价函数了吗
J(w)−l(w)−∑i1ny(i)ln(ϕ(z(i)))(1−y(i))ln(1−ϕ(z(i)))J(w)-l(w)-\sum_{i 1}^n y^{(i)}ln(\phi(z^{(i)})) (1 - y^{(i)})ln(1-\phi(z^{(i)}))J(w)−l(w)−i1∑ny(i)ln(ϕ(z(i)))(1−y(i))ln(1−ϕ(z(i)))
为了更好地理解这个代价函数我们不妨拿一个例子的来看看
J(ϕ(z),y;w)−yln(ϕ(z))−(1−y)ln(1−ϕ(z))J(\phi(z),y;w)-yln(\phi(z))-(1-y)ln(1-\phi(z))J(ϕ(z),y;w)−yln(ϕ(z))−(1−y)ln(1−ϕ(z))
也就是说
J(ϕ(z),y;w){−ln(ϕ(z))ify1−ln(1−ϕ(z))ify0J(\phi(z),y;w)\begin{cases} -ln(\phi(z)) if \ y1 \\ -ln(1-\phi(z)) if \ y0 \end{cases}J(ϕ(z),y;w){−ln(ϕ(z))−ln(1−ϕ(z))if y1if y0
我们来看看这是一个怎么样的函数 图5代价函数从图中不难看出如果样本的值是111的话估计值ϕ(z)\phi(z)ϕ(z)越接近111付出的代价就越小反之越大同理如果样本的值是000的话估计值ϕ(z)\phi(z)ϕ(z)越接近000付出的代价就越小反之越大。
4 利用梯度下降法求参数
在开始梯度下降之前要这里插一句sigmoidfunctionsigmoid \ functionsigmoid function有一个很好的性质就是
ϕ′(z)ϕ(z)(1−ϕ(z))\phi(z) \phi(z)(1 - \phi(z))ϕ′(z)ϕ(z)(1−ϕ(z))
下面会用到这个性质。
还有我们要明确一点梯度的负方向就是代价函数下降最快的方向。什么为什么好我来说明一下。借助于泰特展开我们有
f(xδ)−f(x)≈f′(x)⋅δf(x \delta) - f(x) \approx f(x) \cdot \deltaf(xδ)−f(x)≈f′(x)⋅δ
其中f′(x)f(x)f′(x)和δ\deltaδ为向量那么这两者的内积就等于
f′(x)⋅δ∣∣f′(x)∣∣⋅∣∣δ∣∣⋅cosθf(x) \cdot \delta ||f(x)|| \cdot ||\delta|| \cdot cos \thetaf′(x)⋅δ∣∣f′(x)∣∣⋅∣∣δ∣∣⋅cosθ
当θπ\theta\piθπ时也就是δ\deltaδ在f′(x)f(x)f′(x)的负方向上时取得最小值也就是下降的最快的方向了~
okay好坐稳了我们要开始下降了。
w:wΔw,Δw−η∇J(w)w : w \Delta w, \ \Delta w-\eta \nabla J(w)w:wΔw, Δw−η∇J(w)
没错就是这么下降。没反应过来那我再写详细一些
wj:wjΔwj,Δwj−η∂J(w)∂wjw_j : w_j \Delta w_j,\ \Delta w_j -\eta \dfrac{\partial J(w)}{\partial w_j} wj:wjΔwj, Δwj−η∂wj∂J(w)
其中wjw_jwj表示第jjj个特征的权重η\etaη为学习率用来控制步长。
重点来了。
∂J(w)wj−∑i1n(y(i)1ϕ(z(i))−(1−y(i))11−ϕ(z(i)))∂ϕ(z(i))∂wj−∑i1n(y(i)1ϕ(z(i))−(1−y(i))11−ϕ(z(i)))ϕ(z(i))(1−ϕ(z(i)))∂z(i)∂wj−∑i1n(y(i)(1−ϕ(z(i)))−(1−y(i))ϕ(z(i)))xj(i)−∑i1n(y(i)−ϕ(z(i)))xj(i)\begin{aligned} \dfrac{\partial J(w)}{w_j} -\sum_{i1}^n (y^{(i)}\dfrac{1}{\phi(z^{(i)})}-(1 - y^{(i)})\dfrac{1}{1-\phi(z^{(i)})})\dfrac{\partial \phi(z^{(i)})}{\partial w_j} \\ -\sum_{i1}^n (y^{(i)}\dfrac{1}{\phi(z^{(i)})}-(1 - y^{(i)})\dfrac{1}{1-\phi(z^{(i)})})\phi(z^{(i)})(1-\phi(z^{(i)}))\dfrac{\partial z^{(i)}}{\partial w_j} \\ -\sum_{i1}^n (y^{(i)}(1-\phi(z^{(i)}))-(1-y^{(i)})\phi(z^{(i)}))x_j^{(i)} \\ -\sum_{i1}^n (y^{(i)}-\phi(z^{(i)}))x_j^{(i)} \end{aligned} wj∂J(w)−i1∑n(y(i)ϕ(z(i))1−(1−y(i))1−ϕ(z(i))1)∂wj∂ϕ(z(i))−i1∑n(y(i)ϕ(z(i))1−(1−y(i))1−ϕ(z(i))1)ϕ(z(i))(1−ϕ(z(i)))∂wj∂z(i)−i1∑n(y(i)(1−ϕ(z(i)))−(1−y(i))ϕ(z(i)))xj(i)−i1∑n(y(i)−ϕ(z(i)))xj(i)
所以在使用梯度下降法更新权重时只要根据下式即可
wj:wjη∑i1n(y(i)−ϕ(z(i)))xj(i)w_j :w_j\eta \sum_{i1}^n (y^{(i)}-\phi(z^{(i)}))x_j^{(i)}wj:wjηi1∑n(y(i)−ϕ(z(i)))xj(i)
此式与线性回归时更新权重用的式子极为相似也许这也是逻辑回归要在后面加上回归两个字的原因吧。
当然在样本量极大的时候每次更新权重会非常耗费时间这时可以采用随机梯度下降法这时每次迭代时需要将样本重新打乱然后用下式不断更新权重。
wj:wjη(y(i)−ϕ(z(i)))xj(i),foriinrange(n)w_j : w_j \eta (y^{(i)}-\phi(z^{(i)}))x_j^{(i)}, for \ i \ in \ range(n) wj:wjη(y(i)−ϕ(z(i)))xj(i),for i in range(n)
也就是去掉了求和而是针对每个样本点都进行更新。
5 结束语
以上就是我参考了基本书中的说法之后对逻辑回归整个推到过程的梳理也不知道讲清楚没有。 如有不足还请指正~
6 参考文献
[1] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015. [2] 周志华. 机器学习 : Machine learning[M]. 清华大学出版社, 2016.