【西瓜书笔记】补充1:logistic回归及其损失函数,梯度下降推导

Logistic回归理论知识补充

建模流程

假设我们建立一个二分类模型。假设有两个人A、B在争论如何对一个新样本 x x x进行0-1二分类,他们两个分别对新样本进行打分,如果A的分数大于B的分数,则样本被预测为1,反之则被预测为0。

假设两人的打分分数可以通过线性回归进行预测建模
y 1 = θ 1 x + ϵ 1 , ϵ 1 ∼ N 1 ( 0 , δ ) y 2 = θ 2 x + ϵ 2 , ϵ 2 ∼ N 2 ( 0 , δ ) \begin{aligned} &y_{1}=\theta_{1} x+\epsilon_{1}, \epsilon_{1} \sim N_{1}(0, \delta) \\ &y_{2}=\theta_{2} x+\epsilon_{2}, \epsilon_{2} \sim N_{2}(0, \delta) \end{aligned} y1=θ1x+ϵ1,ϵ1N1(0,δ)y2=θ2x+ϵ2,ϵ2N2(0,δ)
这里两个模型的残差都服从高斯分布。

现在我们研究 y 1 y_1 y1 y 2 y_2 y2的大小关系
y 1 − y 2 = ( θ 1 − θ 2 ) x + ( ϵ 1 − ϵ 2 ) y_{1}-y_{2}=\left(\theta_{1}-\theta_{2}\right) x+\left(\epsilon_{1}-\epsilon_{2}\right) y1y2=(θ1θ2)x+(ϵ1ϵ2)
于是有
y ′ = θ ′ x + ϵ ′ , ϵ ′ ∼ N ( 0 , δ ) y^{\prime}=\theta^{\prime} x+\epsilon^{\prime}, \epsilon^{\prime} \sim N(0, \delta) y=θx+ϵ,ϵN(0,δ)
进一步,根据我们的假设,A的分数大于B的分数,则样本被预测为1,也就是 y ′ > 0 y^{\prime}>0 y>0的情况
P ( y = 1 ) = P ′ ( θ ′ x + ϵ ′ > = 0 ) = 1 − P ′ ( ϵ ′ < − θ ′ x ) P(y=1)=P^{\prime}\left(\theta^{\prime} x+\epsilon^{\prime}>=0\right)=1-P^{\prime}\left(\epsilon^{\prime}<-\theta^{\prime} x\right) P(y=1)=P(θx+ϵ>=0)=1P(ϵ<θx)
所以问题就转化为了求 P ′ ( ϵ ′ < − θ ′ x ) P^{\prime}\left(\epsilon^{\prime}<-\theta^{\prime} x\right) P(ϵ<θx),也就是高斯分布的累积分布函数。这种建模方式叫做prohit回归。

但是高斯分布的累积分布不可解析求出,用概率密度函数表示为 F ( x ; μ , σ ) = 1 σ 2 π ∫ − ∞ x exp ⁡ ( − ( t − μ ) 2 2 σ 2 ) d t F(x ; \mu, \sigma)=\dfrac{1}{\sigma \sqrt{2 \pi}} \int_{-\infty}^{x} \exp \left(-\dfrac{(t-\mu)^{2}}{2 \sigma^{2}}\right) d t F(x;μ,σ)=σ2π 1xexp(2σ2(tμ)2)dt,我们只能大致看出高斯分布的累积分布函数长啥样

在这里插入图片描述

(source: https://www.wikiwand.com/zh-sg/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83)

可见其形状与sigmoid函数非常类似,我们就直接用sigmoid函数近似表示它
P ( y = 1 ) = P ′ ( θ ′ x + ϵ ′ > = 0 ) = 1 − P ′ ( ϵ ′ < − θ ′ x ) = 1 − 1 1 + exp ⁡ ( − z ) = 1 + exp ⁡ ( − z ) − 1 1 + exp ⁡ ( − z ) = 1 1 + exp ⁡ z = 1 1 + exp ⁡ ( − θ ′ x ) P(y=1)=P^{\prime}\left(\theta^{\prime} x+\epsilon^{\prime}>=0\right)=1-P^{\prime}\left(\epsilon^{\prime}<-\theta^{\prime} x\right)\\ =1-\dfrac{1}{1+\exp(-z)}=\dfrac{1+\exp(-z)-1}{1+\exp(-z)}\\ =\dfrac{1}{1+\exp{z}}=\dfrac{1}{1+\exp(-\theta^{\prime} x)} P(y=1)=P(θx+ϵ>=0)=1P(ϵ<θx)=11+exp(z)1=1+exp(z)1+exp(z)1=1+expz1=1+exp(θx)1
这正是Logistic二分类表达式。

损失函数

Logistic回归的损失函数是通过最大似然估计(存在即合理)得到的。这个损失函数叫做交叉熵。其实对于他的损失函数的推导,并不一定需要假设模型符合logistic回归。

假设 l l l表示(0, 1)标签, y y y表示样本预测的概率。则该样本存在的概率可表示为:
y l ( 1 − y ) 1 − l y^{l}(1-y)^{1-l} yl(1y)1l
也就是满足伯努利分布。

由最大似然估计,可得我们需要最小化如下函数
− ( l log ⁡ y + ( 1 − l ) log ⁡ ( 1 − y ) ) -(l \log y+(1-l) \log (1-y)) (llogy+(1l)log(1y))
当标签 l = 1 l=1 l=1时, ( 1 − l ) log ⁡ ( 1 − y ) ) = 0 (1-l) \log (1-y))=0 (1l)log(1y))=0,最小化公式等价于最小化 − log ⁡ y -\log y logy,即让 y → 1 y\rightarrow1 y1.

当标签 l = 0 l=0 l=0时, l log ⁡ y = 0 l \log y=0 llogy=0,最小化公式等价于最小化 − ( 1 − l ) log ⁡ ( 1 − y ) -(1-l) \log (1-y) (1l)log(1y),即让 y → 0 y\rightarrow0 y0.

注意最大似然估计时,我们其实是把所有样本的概率相加,也就是 ∑ i = 1 N y l ( 1 − y ) 1 − l \sum_{i=1}^{N}y^{l}(1-y)^{1-l} i=1Nyl(1y)1l,然后取对数

在这里插入图片描述

现在我们思考一个问题,如果我们选择下面这个损失函数,是否也满足上面的这种直觉性结论呢?
L o s s = − ( l − y ) 2 Loss = -(l-y)^{2} Loss=(ly)2
l = 1 l=1 l=1时, y → 1 y\rightarrow1 y1, l = 0 l=0 l=0时, y → 0 y\rightarrow0 y0

在这里插入图片描述

梯度下降优化算法

当建立好模型后,最终需要对损失函数进行优化。这种对待优化的参数没有限制的优化问题叫做无约束优化问题。
min ⁡ f ( x ) \min f(x) minf(x)
其中 x x x为待求参数

如果要理解梯度下降法,我们要从泰勒展开开始理解。针对 f ( x ) f(x) f(x)做一阶泰勒展开,有
f ( x ) = f ( x k ) + ∇ f ( x k ) T ( x − x k ) + o ( ∥ x − x k ∥ ) f(x)=f\left(x_{k}\right)+\nabla f\left(x_{k}\right)^{T}\left(x-x_{k}\right)+o\left(\left\|x-x_{k}\right\|\right) f(x)=f(xk)+f(xk)T(xxk)+o(xxk)
其中高阶量 o o o是在 ( x − x k ) (x-x_k) (xxk)的前提下才趋向于0,如果 ( x − x k ) (x-x_k) (xxk)太大,高阶量就会影响等式右边前两项。

如果我们把 x x x看做空间中的向量,那么 ( x − x k ) (x-x_k) (xxk)也是向量,梯度 f ′ ( x k ) f^{\prime}(x_k) f(xk)也是向量。我们可以把上式写为
f ( x ) ≈ f ( x k ) + λ ∗ d ∗ f ′ ( x k ) f\left(x\right) \approx f\left(x_{k}\right)+\lambda * \boldsymbol{d} * f^{\prime}\left(x_{k}\right) f(x)f(xk)+λdf(xk)
这里 d \boldsymbol{d} d表示沿着 x x x方向的单位向量, λ \lambda λ表示单位向量长度。根据向量乘积规则,我们有
f ( x ) ≈ f ( x k ) + λ ∗ ∣ d ∣ ∗ ∣ f ′ ( x k ) ∣ ∗ cos ⁡ ( θ ) f\left(x\right) \approx f\left(x_{k}\right)+\lambda * |\boldsymbol{d}| *\left|f^{\prime}\left(x_{k}\right)\right| * \cos (\theta) f(x)f(xk)+λdf(xk)cos(θ)
这里 θ \theta θ表示梯度向量和 ( x − x k ) (x-x_k) (xxk)这个向量的夹角。因为我们企图最小化 f ( x ) f(x) f(x),而 f ( x k ) = f ( x 0 ) f(x_k)=f(x_0) f(xk)=f(x0)随机初始化后模型的输出,这就意味着它与 λ , d \lambda, d λ,d一样也是个常量,如果要是整个式子最小,显然要让 θ = π , cos ⁡ ( θ ) = − 1 \theta=\pi, \cos(\theta)=-1 θ=π,cos(θ)=1,也就是 x k x_k xk无限靠近 x x x时,两个向量方向相反的时刻。此时我们有
d = − f ′ ( x k ) ∥ f ′ ( x k ) ∥ d=\frac{-f^{\prime}\left(x_{k}\right)}{\left\|f^{\prime}\left(x_{k}\right)\right\|} d=f(xk)f(xk)
在这里插入图片描述

于是我们有
x − x k = λ ∗ d = λ ∗ − f ′ ( x k ) ∥ f ′ ( x k ) ∥ ⇒ x = x k − λ ∗ f ′ ( x k ) ∥ f ′ ( x k ) ∥ x-x_{k}=\lambda * d = \lambda * \frac{-f^{\prime}\left(x_{k}\right)}{\left\|f^{\prime}\left(x_{k}\right)\right\|}\\ \Rightarrow x=x_{k}-\lambda *\frac{f^{\prime}\left(x_{k}\right)}{\left\|f^{\prime}\left(x_{k}\right)\right\|} xxk=λd=λf(xk)f(xk)x=xkλf(xk)f(xk)
又因为 ∥ f ′ ( x k ) ∥ = ∥ f ′ ( x 0 ) ∥ \left\|f^{\prime}\left(x_{k}\right)\right\|=\left\|f^{\prime}\left(x_{0}\right)\right\| f(xk)=f(x0)是个常数,因为 x 0 x_{0} x0如果是随机初始化确定下来的,那么其梯度也肯定是常数。(比如线性回归使用梯度下降法的时候,第一轮我们随机初始化权重参数,此时这些参数是固定的),那么我们就可以把 λ \lambda λ ∥ f ′ ( x k ) ∥ = ∥ f ′ ( x 0 ) ∥ \left\|f^{\prime}\left(x_{k}\right)\right\|=\left\|f^{\prime}\left(x_{0}\right)\right\| f(xk)=f(x0)合并为一个常数,也即是学习率。于是最后公式转化为
x = x k + 1 = x k − λ ∗ f ′ ( x k ) ∥ f ′ ( x k ) ∥ = x k − η ∗ f ′ ( x k ) = x k − η ∇ f ( x k ) T x=x_{k+1}=x_{k}-\lambda *\frac{f^{\prime}\left(x_{k}\right)}{\left\|f^{\prime}\left(x_{k}\right)\right\|}=x_{k}-\eta* f^{\prime}(x_{k})=x_{k}-\eta \nabla f\left(x_{k}\right)^{T} x=xk+1=xkλf(xk)f(xk)=xkηf(xk)=xkηf(xk)T
这里 η \eta η的作用就是控制每一步移动的步长,因为我们说过,只有 x − x k x-x_{k} xxk足够小,也就是当前一步和上一步的距离足够小,一阶泰勒展开的高阶量才会很小,不影响头两项。

对于梯度下降法要注意

  1. 学习率不能太小,也不能太大
  2. 要注意损失函数曲线的鞍马点,鞍马点与局部最小点都会让梯度无法下降
  3. 如果输入变量 x 1 , x 2 x_{1},x_{2} x1,x2尺度相同,比如 l = x 1 2 + x 2 2 l=x_{1}^{2} + x_{2}^{2} l=x12+x22,那么梯度就是等高线的法向量,梯度下降就会沿着等高线法向量以最快速度向最低点移动。但是如果输入变量 x 1 , x 2 x_{1}, x_{2} x1,x2尺度不同,比如 l = x 1 2 + 100 x 2 2 l=x_{1}^{2} + 100x_{2}^{2} l=x12+100x22,那么梯度就会实时扭动变化,无法最快移动到最低点,此时要做输入变量的尺度归一化。

在这里插入图片描述

【《机器学习实战》。sklearn代码分为三种封装方式,纯python写,C++写加python封装,fortran写加python(pyc)封装。】

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二分类问题是机器学习中的一种常见问题,可以使用回归算法来解决。Python中的logistic回归是一种二分类算法,可用于将数据分为两个类别。 随机梯度下降是一种常用的优化算法,用于最小化目标函数。在logistic回归中,我们使用的是交叉熵损失函数作为目标函数。随机梯度下降的思想是在每次迭代中仅使用一个样本来更新权重。这与批量梯度下降不同,后者需要用到所有训练样本。 使用Python进行logistic回归二分类随机梯度下降,我们需要以下步骤: 1. 导入所需的库,如numpy和matplotlib。 2. 加载训练数据集,将数据划分为特征X和标签y。 3. 初始化模型的权重w和偏差b。 4. 定义sigmoid函数,用于将线性回归输出转换为概率值。 5. 定义损失函数,例如交叉熵损失函数。 6. 定义梯度计算函数,用于计算每个参数的梯度。 7. 选择学习率和迭代次数。 8. 使用随机梯度下降算法更新权重,直到达到最大迭代次数或损失函数收敛。 9. 对测试数据进行预测,计算准确率或其他评价指标。 随机梯度下降算法能够更快地收敛,但可能会牺牲一些精确度。因此,在实际应用中,需要权衡精确度和计算效率。通过调整学习率和迭代次数,可以在准确率和计算效率之间找到一个平衡点。 总结起来,Python中的logistic回归二分类随机梯度下降是一种用于解决二分类问题的机器学习算法。它通过使用随机梯度下降算法和交叉熵损失函数来更新权重,以逐步优化模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值