小白的机器学习笔记系列 之四-逻辑回归

本文深入探讨了逻辑回归算法,从概率预测的角度出发,介绍了其数学模型、衡量错误的方式、梯度下降求最小值的过程以及逻辑回归的总结。通过实例,详细解释了如何利用逻辑回归预测疾病发生概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对概率的预测

前面我们讲了线性分类和线性回归,这里让我们来思考另外一类问题——求概率问题。
比如说,我们根据一个人的既往病历,生活习惯,年龄等来判断一个人是否会得心肌梗塞。我们想要的答案不仅仅是一个简单的是或否,实际上我们希望知道的是得心肌梗塞的风险有多大。医生会根据病人的情况以及自己的经验做出很高危,高危,中等风险,低风险等判断,实际上这可以看做是一个概率问题,我们可以划定当得心肌梗塞的概率高于某个概率值时,我们认为是很高危,当处在某一个概率区间则认为是高危,以此类推。
那么,机器学习是否可以习得处理这一类问题的能力吗? 是的,我们可以用逻辑回归算法来处理这一类问题。

数学模型

我们之前介绍过的线性回归模型如下:

S ( x ) = ∑ i = 0 d x i ∗ w i S(x)=\sum_{i=0}^dx_i*w_i S(x)=i=0dxiwi

我们希望得到的输出是一个概率值,因此我们可以对 S ( x ) S(x) S(x)再做一次如下变换,使得最终的输出结果落在0-1之间。
θ ( S ) = e s 1 + e s \theta(S)=\frac{e^s}{1+e^s} θ(S)=1+eses
上面这个函数的图像如下所示,可以看到输入S在 − ∞ -\infty + ∞ +\infty +区间内,而输出 θ ( S ) \theta(S) θ(S)则始终落在0到1之间。
在这里插入图片描述
由此变换得到的输出值是一个概率,而非是或否这样一个简单的结论,这个概率值被称为软阈值(soft threshold)

衡量错误

让我们再回头看一下,应该如何来学习样本数据。依旧以“心肌梗塞发生概率预测问题”为例,我们得到的样本数据,包括每个病人的各种相关信息、是否发生心肌梗塞的实际结果。我们令1表示发生了心肌梗塞,0表示未发生心肌梗塞。
机器学习的目标是使预测结果尽可能的接近实际情况,我们可以用一个条件概率来概括上述问题,即求在输入参数 x x x已发生的情况下 y y y亦发生的概率 P ( y ∣ x ) P(y|x) P(yx)。我们令 P ( y ∣ x ) P(y|x) P(yx)表示如下:
P ( y ∣ x ) = { 1 − θ ( s ) . . . y = 0 θ ( s ) . . . y = 1 . . . P(y|x) = \biggl\{^{\theta(s)... y = 1}_{1-\theta(s) ... y = 0}... P(yx)={1θ(s)...y=0θ(s)...y=1...(1)

其中, θ ( s ) = e s 1 + e s , s ( x , w ) = ∑ i = 0 d x i ∗ w i \theta(s)=\frac{e^s}{1+e^s}, s(x,w) = \sum_{i=0}^dx_i*w_i θ(s)=1+eses,s(x,w)=i=0dxiwi

此处 θ ( s ) \theta(s) θ(s)是发生心肌梗塞的概率。若病人实际发生了心肌梗塞( y = 1 y=1 y=1)时,我们令 P ( y ∣ x ) P(y|x) P(yx)为预测的心肌梗塞发生概率 θ ( s ) \theta(s) θ(s),且该概率应尽可能大。若该病人未发生心肌梗塞( y = 0 y=0 y=0),我们令 P ( y ∣ x ) P(y|x) P(yx) 1 − θ ( s ) 1-\theta(s) 1θ(s),即该病人未发心肌梗塞的概率,1- θ ( s ) \theta(s) θ(s)应当尽可能大,相当于 θ ( s ) \theta(s) θ(s)尽可能小。

总之,我们的问题最终归结为对与所有的训练样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) (x^1,y^1),(x^2,y^2),...,(x^N,y^N) (x1,y1)(x2,y2)...(xN,yN),求出一组W使得 P ( y ∣ x ) P(y|x) P(yx)最大化。

这个问题似乎很难直接求解,我们转而寻找它的一系列等价命题如下:

  • 等价一
    1 N ∏ j = 1 N P ( y j ∣ x j ) . . . \frac1N\prod_{j=1}^NP(y^j|x^j)... N1j=1NP(yjxj)...(2) 求最大值, N为训练样本总数。
  • 等价二
    对(2)式求最大值,等价于对 − 1 N l n ( ∏ j = 1 N P ( y j ∣ x j ) ) -\frac1Nln(\prod_{j=1}^NP(y^j|x^j)) N1ln(j=1NP(yjxj))求最小值
    说明: 此处我们对 P ( y j ∣ x j ) P(y^j|x^j) P(yjxj)求乘积,主要也是考虑对数的乘积可以化为和的对数。

因为 P ( y ∣ x ) P(y|x) P(yx)是一个分段函数,我们对它进行分段讨论。

  • y = 1 y=1 y=1

− 1 N l n ( ∏ j = 1 N P ( y j ∣ x j ) ) -\frac1Nln(\prod_{j=1}^NP(y^j|x^j)) N1ln(j=1NP(yjxj))

= − 1 N ∑ j = 1 N y j ∗ l n ( θ ( s ) ) . . . =-\frac1N\sum_{j=1}^Ny^j*ln(\theta(s))... =N1j=1Nyjln(θ(s))...(3)

  • 同理,当 y = 0 y=0 y=0

− 1 N l n ( ∏ j = 1 N P ( y j ∣ x j ) ) -\frac1Nln(\prod_{j=1}^NP(y^j|x^j)) N1ln(j=1NP(yjxj))

= − 1 N ∑ j = 1 N ( 1 − y j ) ∗ l n ( 1 − θ ( s ) ) . . . =-\frac1N\sum_{j=1}^N(1-y^j)*ln(1-\theta(s))... =N1j=1N(1yj)ln(1θ(s))...(4)

在此我们对这个分段函数用一个数学小技巧将分段函数统一到一个数学函数表达式中。
L o s s ( θ , y ) = − 1 N ∑ j = 1 N ( y j ∗ l n ( θ ( s ) ) + ( 1 − y j ) ∗ l n ( 1 − θ ( s ) ) ) . . . Loss(\theta,y) = -\frac1N\sum_{j=1}^N(y^j*ln(\theta(s))+(1-y^j)*ln(1-\theta(s)))... Loss(θ,y)=N1j=1N(yjln(θ(s))+(1yj)ln(1θ(s)))...(5)

(5)这个函数被称为交叉熵,在机器学习中它通常被用作逻辑回归的损失函数。为了求得它的最小值,我们会采用梯度下降法。

梯度下降求最小值

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。—— [百度百科]

直观理解梯度下降

直观的来理解梯度下降算法,有点像盲人下山,我们先试探性的摸索自己站立位置周围,寻找到一个最为陡峭的方向,迈出一小步。然后,重复这个动作,一步一步向谷底走去,一直到我们向四周摸索,再也找不到向下的方向,我们就认为我们已经找到了谷底。

梯度下降的迭代计算步骤如下:

  1. 求损失函数的梯度
  2. W ( 1 ) = W ( 0 ) − λ ∇ L o s s W(1) = W(0) -\lambda\nabla Loss W(1)=W(0)λLoss W ( 1 ) = W ( 0 ) − γ ∇ L o s s W(1) = W(0) -\gamma\nabla Loss W(1)=W(0)γLoss
  3. 如果 W ( 1 ) − W ( 0 ) > 0 W(1)-W(0)>0 W(1)W(0)>0,则重复如果 W ( 1 ) − W ( 0 ) > 0 W(1)-W(0)>0 W(1)W(0)>0,则重复步骤1。否则,认为已经到达底部,停止。

在这里插入图片描述

损失函数求导

接下来,我们看一下如何计算这个损失函数的导数,使用链式法制求导过程如下。

L o s s ( θ , y ) = − 1 N ∑ j = 1 N ( y j ∗ l n ( θ ( s ) ) + ( 1 − y j ) ∗ l n ( 1 − θ ( s ) ) ) . . . Loss(\theta,y) = -\frac1N\sum_{j=1}^N(y^j*ln(\theta(s))+(1-y^j)*ln(1-\theta(s)))... Loss(θ,y)=N1j=1N(yjln(θ(s))+(1yj)ln(1θ(s)))...(5)

∂ L o s s ∂ θ = − y θ + 1 − y 1 − θ \frac{\partial Loss}{\partial \theta}=-\frac y\theta+\frac{1-y}{1-\theta} θLoss=θy+1θ1y

d θ d s = θ ( 1 − θ ) \frac{d\theta}{ds}=\theta(1-\theta) dsdθ=θ(1θ) 这可以由 θ \theta θ函数的对称性推导出来

∂ L o s s ∂ s = ∂ L o s s ∂ θ d θ d s = ( − y θ + 1 − y 1 − θ ) ∗ ( θ ( 1 − θ ) ) = θ − y \frac{\partial Loss}{\partial s}=\frac{\partial Loss}{\partial \theta}\frac{d\theta}{ds}=(-\frac y\theta+\frac{1-y}{1-\theta})*(\theta(1-\theta))=\theta-y sLoss=θLossdsdθ=(θy+1θ1y)(θ(1θ))=θy

d s d w = x \frac{ds}{dw}=x dwds=x

∂ L o s s ∂ w = ∂ L o s s ∂ θ d θ d s d s d w = ( θ − y ) ∗ x \frac{\partial Loss}{\partial w}=\frac{\partial Loss}{\partial \theta}\frac{d\theta}{ds}\frac{ds}{dw}=(\theta-y)*x wLoss=θLossdsdθdwds=(θy)x

最后,令 W ′ = W − γ ∂ L ∂ w W' = W - \gamma\frac{\partial L}{\partial w} W=WγwL

比较 W ′ W' W W W W的值,若 W ′ W' W小于 W W W则重复以上步骤直到 W ′ = W W'=W W=W

学习率的选择

梯度下降算法中的步长 γ \gamma γ被称为学习率(learning rate)。如果选择步长过小,则下降的速度太慢,如下图右图。如果选择步长过大,则很有可能会越过极值点,在极值点周围震荡。
在这里插入图片描述
我们期望的是,在下降的初期可以步伐大一些,而后期则步伐变小,以防错过了极值点。我们可以使用一个衰减的学习率,来获得这种效果。具体的方法,在后面介绍神经网络时会说到。

逻辑回归总结

  1. 初始化权重值W(0)
  2. 对于 t = 0 , 1 , 2 , . . . . t=0, 1, 2, .... t=0,1,2,....
  3. 计算损失函数的梯度 ∇ L o s s \nabla Loss Loss
  4. 更新权重值 W ( t + 1 ) = W ( t ) − γ ∇ L o s s W(t+1)=W(t)-\gamma\nabla Loss W(t+1)=W(t)γLoss
  5. 比较 W ( t + 1 ) W(t+1) W(t+1) W ( t ) W(t) W(t)的值,若不等则继续重复3, 4步
  6. 返回 W W W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白的逆袭日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值