逻辑回归解密:原理、公式和优化全解析

文章目录

  • 一、 前言
  • 二、逻辑回归的原理和基本公式
    • 1. 逻辑回归的原理
      • 核心函数:Sigmoid函数
    • 2. 逻辑回归模型
    • 3. 梯度上升法参数估计:最大似然估计
      • 对数似然函数
      • 求导过程
      • 参数更新
    • 4. 梯度下降法参数估计:最小化损失函数
      • 逻辑回归的负对数似然函数
      • 梯度下降法求导过程
      • 参数更新规则
    • 5. 迭代更新
  • 三、逻辑回归的求导过程详解
    • 对数似然函数
    • Sigmoid函数及其导数
    • 求导步骤
    • 参数更新规则
  • 四、总结


一、 前言

在机器学习领域,逻辑回归是一个基础且极其重要的算法,尤其适用于处理二分类问题。它通过将特征的线性组合通过Sigmoid函数映射到概率值,用以预测事件的发生概率。本文将深入探讨逻辑回归的核心原理,从Sigmoid函数的基础开始,详细解析最大似然估计法的求导过程。通过逐步展开的数学推导,我们希望使读者能够全面理解并应用逻辑回归于实际的数据分析和机器学习项目中。


二、逻辑回归的原理和基本公式

1. 逻辑回归的原理

逻辑回归模型假设目标变量 Y Y Y取值为0或1,它通过一个概率分布链接函数(Sigmoid函数)将特征的线性组合映射到(0, 1)区间,这样的输出可以解释为事件发生的概率。

核心函数:Sigmoid函数

Sigmoid函数是逻辑回归中使用的链接函数,定义为:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
其中 z z z是输入特征的线性组合:
z = β 0 + β 1 x 1 + β 2 x 2 + … + β n x n z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n z=β0+β1x1+β2x2++βnxn

2. 逻辑回归模型

逻辑回归模型预测给定输入特征 X X X下,目标事件 Y = 1 Y=1 Y=1的概率:
P ( Y = 1 ∣ X ) = σ ( β T X ) P(Y = 1 | X) = \sigma(\beta^T X) P(Y=1∣X)=σ(βTX)
这里, β T X \beta^T X βTX表示参数向量 β \beta β和特征向量 X X X的点积。

3. 梯度上升法参数估计:最大似然估计

为了找到最佳的参数 β \beta β,逻辑回归使用最大似然估计方法,即选择能够使得观测到的样本数据最有可能出现的参数值。

对数似然函数

对数似然函数基于所有观测数据,可以写为:
ℓ ( β ) = ∑ i = 1 n [ y ( i ) log ⁡ σ ( z ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − σ ( z ( i ) ) ) ] \ell(\beta) = \sum_{i=1}^n \left[ y^{(i)} \log \sigma(z^{(i)}) + (1 - y^{(i)}) \log (1 - \sigma(z^{(i)})) \right] (β)=i=1n[y(i)logσ(z(i))+(1y(i))log(1σ(z(i)))]
其中 z ( i ) = β T x ( i ) z^{(i)} = \beta^T x^{(i)} z(i)=βTx(i)

求导过程

要最大化对数似然函数,需要对其进行求导,找到梯度为零的点。首先,我们利用链式法则和Sigmoid函数的导数,对 β j \beta_j βj的偏导数展开:

  1. Sigmoid函数的导数:
    d σ d z = σ ( z ) ( 1 − σ ( z ) ) \frac{d\sigma}{dz} = \sigma(z)(1 - \sigma(z)) dzdσ=σ(z)(1σ(z))

  2. 链式法则的应用:
    ∂ ℓ ( β ) ∂ β j = ∑ i = 1 n [ y ( i ) 1 σ ( z ( i ) ) − ( 1 − y ( i ) ) 1 1 − σ ( z ( i ) ) ] σ ( z ( i ) ) ( 1 − σ ( z ( i ) ) ) x j ( i ) \frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left[ y^{(i)} \frac{1}{\sigma(z^{(i)})} - (1 - y^{(i)}) \frac{1}{1 - \sigma(z^{(i)})} \right] \sigma(z^{(i)})(1 - \sigma(z^{(i)})) x_j^{(i)} βj(β)=i=1n[y(i)σ(z(i))1(1y(i))1σ(z(i))1]σ(z(i))(1σ(z(i)))xj(i)
    这可以简化为:
    ∂ ℓ ( β ) ∂ β j = ∑ i = 1 n ( y ( i ) − σ ( z ( i ) ) ) x j ( i ) \frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left( y^{(i)} - \sigma(z^{(i)}) \right) x_j^{(i)} βj(β)=i=1n(y(i)σ(z(i)))xj(i)

参数更新

使用梯度上升法来更新参数 β \beta β
β j : = β j + α ∑ i = 1 n ( y ( i ) − σ ( z ( i ) ) ) x j ( i ) \beta_j := \beta_j + \alpha \sum_{i=1}^n \left( y^{(i)} - \sigma(z^{(i)}) \right) x_j^{(i)} βj:=βj+αi=1n(y(i)σ(z(i)))xj(i)
其中, α \alpha α是学习率。

4. 梯度下降法参数估计:最小化损失函数

逻辑回归的负对数似然函数

首先,定义负对数似然函数(即损失函数)为:
J ( β ) = − ℓ ( β ) = − ∑ i = 1 n [ y ( i ) log ⁡ σ ( z ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − σ ( z ( i ) ) ) ] J(\beta) = -\ell(\beta) = -\sum_{i=1}^n \left[ y^{(i)} \log \sigma(z^{(i)}) + (1 - y^{(i)}) \log (1 - \sigma(z^{(i)})) \right] J(β)=(β)=i=1n[y(i)logσ(z(i))+(1y(i))log(1σ(z(i)))]
其中 z ( i ) = β T x ( i ) z^{(i)} = \beta^T x^{(i)} z(i)=βTx(i),与之前相同。

梯度下降法求导过程

为了使用梯度下降法,我们需要求出负对数似然函数的梯度。求导步骤相似,但注意梯度的符号会反转。

我们已知:
∂ ℓ ( β ) ∂ β j = ∑ i = 1 n ( y ( i ) − σ ( z ( i ) ) ) x j ( i ) \frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left( y^{(i)} - \sigma(z^{(i)}) \right) x_j^{(i)} βj(β)=i=1n(y(i)σ(z(i)))xj(i)

因此,负对数似然函数的梯度(负梯度)为:
∂ J ( β ) ∂ β j = − ∂ ℓ ( β ) ∂ β j = ∑ i = 1 n ( σ ( z ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\beta)}{\partial \beta_j} = -\frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left( \sigma(z^{(i)}) - y^{(i)} \right) x_j^{(i)} βjJ(β)=βj(β)=i=1n(σ(z(i))y(i))xj(i)

参数更新规则

在梯度下降法中,参数的更新规则为:
β j : = β j − α ∑ i = 1 n ( σ ( z ( i ) ) − y ( i ) ) x j ( i ) \beta_j := \beta_j - \alpha \sum_{i=1}^n \left( \sigma(z^{(i)}) - y^{(i)} \right) x_j^{(i)} βj:=βjαi=1n(σ(z(i))y(i))xj(i)
这里 α \alpha α是学习率,它控制参数更新的步长。

5. 迭代更新

通过迭代更新参数直至收敛(例如,当参数的改变量非常小或达到了预定的迭代次数),我们可以得到使对数似然函数最大化或损失函数最小化的参数 β \beta β


三、逻辑回归的求导过程详解

逻辑回归模型中,我们需要最大化对数似然函数来找到最优参数。首先,我们定义对数似然函数,并详细展示对其求导的过程。

对数似然函数

逻辑回归的对数似然函数是:
ℓ ( β ) = ∑ i = 1 n [ y ( i ) log ⁡ σ ( z ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − σ ( z ( i ) ) ) ] \ell(\beta) = \sum_{i=1}^n \left[ y^{(i)} \log \sigma(z^{(i)}) + (1 - y^{(i)}) \log (1 - \sigma(z^{(i)})) \right] (β)=i=1n[y(i)logσ(z(i))+(1y(i))log(1σ(z(i)))]
其中 z ( i ) = β T x ( i ) z^{(i)} = \beta^T x^{(i)} z(i)=βTx(i)

Sigmoid函数及其导数

Sigmoid函数定义为:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

其导数,通过对函数求导得到:
d σ d z = σ ( z ) ( 1 − σ ( z ) ) \frac{d\sigma}{dz} = \sigma(z)(1 - \sigma(z)) dzdσ=σ(z)(1σ(z))

求导步骤

对于每个参数 β j \beta_j βj,我们应用链式法则:

  1. 链式法则的第一部分:对 log ⁡ σ ( z ( i ) ) \log \sigma(z^{(i)}) logσ(z(i)) log ⁡ ( 1 − σ ( z ( i ) ) ) \log (1 - \sigma(z^{(i)})) log(1σ(z(i)))的导数。

    • log ⁡ σ ( z ( i ) ) \log \sigma(z^{(i)}) logσ(z(i))的导数:
      ∂ ∂ z ( i ) log ⁡ σ ( z ( i ) ) = 1 σ ( z ( i ) ) ⋅ σ ( z ( i ) ) ( 1 − σ ( z ( i ) ) ) = 1 − σ ( z ( i ) ) \frac{\partial}{\partial z^{(i)}} \log \sigma(z^{(i)}) = \frac{1}{\sigma(z^{(i)})} \cdot \sigma(z^{(i)})(1 - \sigma(z^{(i)})) = 1 - \sigma(z^{(i)}) z(i)logσ(z(i))=σ(z(i))1σ(z(i))(1σ(z(i)))=1σ(z(i))

    • log ⁡ ( 1 − σ ( z ( i ) ) ) \log (1 - \sigma(z^{(i)})) log(1σ(z(i)))的导数:
      ∂ ∂ z ( i ) log ⁡ ( 1 − σ ( z ( i ) ) ) = 1 1 − σ ( z ( i ) ) ⋅ ( − σ ( z ( i ) ) ( 1 − σ ( z ( i ) ) ) ) = − σ ( z ( i ) ) \frac{\partial}{\partial z^{(i)}} \log (1 - \sigma(z^{(i)})) = \frac{1}{1 - \sigma(z^{(i)})} \cdot (-\sigma(z^{(i)})(1 - \sigma(z^{(i)}))) = -\sigma(z^{(i)}) z(i)log(1σ(z(i)))=1σ(z(i))1(σ(z(i))(1σ(z(i))))=σ(z(i))

  2. 链式法则的第二部分:对 z ( i ) = β T x ( i ) z^{(i)} = \beta^T x^{(i)} z(i)=βTx(i)的导数,即参数 β j \beta_j βj的影响。
    ∂ z ( i ) ∂ β j = x j ( i ) \frac{\partial z^{(i)}}{\partial \beta_j} = x_j^{(i)} βjz(i)=xj(i)

  3. 整合
    将以上导数结果组合,得到对数似然函数关于 β j \beta_j βj的导数:
    ∂ ℓ ( β ) ∂ β j = ∑ i = 1 n [ y ( i ) ( 1 − σ ( z ( i ) ) ) − ( 1 − y ( i ) ) σ ( z ( i ) ) ] x j ( i ) \frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left[ y^{(i)} (1 - \sigma(z^{(i)})) - (1 - y^{(i)}) \sigma(z^{(i)}) \right] x_j^{(i)} βj(β)=i=1n[y(i)(1σ(z(i)))(1y(i))σ(z(i))]xj(i)
    这可以简化为:
    ∂ ℓ ( β ) ∂ β j = ∑ i = 1 n ( y ( i ) − σ ( z ( i ) ) ) x j ( i ) \frac{\partial \ell(\beta)}{\partial \beta_j} = \sum_{i=1}^n \left( y^{(i)} - \sigma(z^{(i)}) \right) x_j^{(i)} βj(β)=i=1n(y(i)σ(z(i)))xj(i)

参数更新规则

根据上述导数,我们可以使用梯度上升法来更新每个参数 β j \beta_j βj
β j : = β j + α ∑ i = 1 n ( y ( i ) − σ ( z ( i ) ) ) x j ( i ) \beta_j := \beta_j + \alpha \sum_{i=1}^n \left( y^{(i)} - \sigma(z^{(i)}) \right) x_j^{(i)} βj:=βj+αi=1n(y(i)σ(z(i)))xj(i)
这里 α \alpha α是学习率,控制参数更新的步幅。

这个详细的求导过程不仅展示了如何从数学原理出发逐步求解,还清楚地阐释了每一步的逻辑,有助于深入理解逻辑回归模型的参数估计方式。


四、总结

逻辑回归虽然概念上简单,但其背后的数学原理和参数估计过程却包含丰富的统计学知识和优化技巧。通过本文的深入分析,我们不仅解释了如何构建逻辑回归模型,还详细讨论了参数如何通过最大似然估计进行优化。理解这些基础概念不仅有助于更好地运用逻辑回归,也为学习更复杂的机器学习算法打下坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Milvus向量数据库-内存中索引简介

以下内容是自己在学习Milvus向量数据库时,在Milvus官方网站文档库中对索引的学习整理和翻译,通过自己和借助翻译软件进行了理解整合翻译,有可能有一些地方理解整理的不到位,还望大家理解。 一、内存中索引 本文列出了 Milvus 支…

Linux压缩和解压

目录 压缩和解压类 gzip/gunzip指令 zip/unzip指令 tar指令 压缩和解压类 gzip/gunzip指令 gzip用于压缩文件,gunzip用于解压缩文件。 解压后去掉了gz的后缀。 zip/unzip指令 ​​​​​​​ 将文件压缩后发给别人,别人再解压。 将整个文件压…

上千条备孕至育儿指南速查ACCESS\EXCEL数据库

虽然今天这个数据库的记录数才不过区区上千条,但是每条记录里的内容都包含四五个子标题,可以将相关的知识完整且整齐的展现,是个属于简而精的数据库。并且它包含2级分类。 【备孕】大类包含:备孕百科(19)、不孕不育(23)、精子卵子…

uniapp 微信小程序生成水印图片

效果 源码 <template><view style"overflow: hidden;"><camera device-position"back" flash"auto" class"camera"><cover-view class"text-white padding water-mark"><cover-view class"…

165万人在线《黑神话:悟空》登顶STEAM!勾起太多回忆,我冲啦!

本公众号由以下老铁赞助&#xff0c;感谢他们❗️ 2024年8月20日&#xff0c;一个平凡而又特殊的日子&#xff0c;国产游戏《黑神话&#xff1a;悟空》正式上线 Steam平台&#xff0c;在线人数突破165万&#xff0c;超越《反恐精英CS2》登顶热玩榜。 更牛逼的是 Steam 热玩排行…

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE啦&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好习惯&#…

Kafka快速入门:Kafka驱动JavaApi的使用

生产者和消费者是Kafka的核心概念之一&#xff0c;它们在客户端被创建和使用&#xff0c;并且包含了许多与Kafka性能和机制相关的配置。虽然Kafka提供的命令行工具能够执行许多基本操作&#xff0c;但它无法实现所有可能的性能优化。相比之下&#xff0c;使用Java API可以充分利…

打造更高效的项目:如何选择合适的管理工具

国内外主流的 10 款项目工程管理系统对比&#xff1a;PingCode、Worktile、Asana、Trello、Monday.com、ClickUp、Wrike、泛微项目协同工具、广联达项目管理软件、泛普OA。 在选择项目工程管理系统时&#xff0c;你是否经常感到无从下手&#xff0c;担心投资不当或工具不适合自…

Python 使用 matplotlib 显示图像

如果没有安装 matplotlib 需要先安装&#xff1a; pip install matplotlib一、读取图片并显示 import matplotlib.pyplot as pltimage_path "/Users/AlanWang4523/Desktop/Debug/files/image.png" image_array plt.imread(image_path)plt.figure("ImageShow…

[数据集][目标检测]停车场空位检测数据集VOC+YOLO格式7959张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7959 标注数量(xml文件个数)&#xff1a;7959 标注数量(txt文件个数)&#xff1a;7959 标注…

指针和引用的区别

指针和引用是C中的两个重要概念&#xff0c;它们虽然在功能上有一些相似之处&#xff0c;但在使用方式和底层实现上有明显的区别。以下是它们的主要区别&#xff1a; 定义方式&#xff1a; 指针&#xff1a;指针是一种变量&#xff0c;用于存储另一个变量的地址。可以通过*操作…

【保姆级教程】5分钟上手 Coze 自建插件,把 AI 接入个人微信

上篇&#xff0c;给大家介绍了一款搭建微信机器人的开源项目&#xff1a; 搭建微信机器人的第4种方式&#xff0c;我造了一个摸鱼小助手 不同于需要付费的项目&#xff0c;它的定制化程度非常高~ 问题来了&#xff1a;怎么接入 AI 能力呢&#xff1f; 考虑到大家对 Coze 智能…

AI 智能体:从普通人到《黑神话:悟空》,保姆级教程让你瞬间变身!

大家好&#xff0c;我是木川 今天还没下班&#xff0c;就看到一款名为《黑神话:悟空》的游戏火爆全网&#xff0c;唤醒了无数玩家对大圣孙悟空的崇拜与向往。游戏中&#xff0c;悟空的七十二变让人叹为观止&#xff0c;但你是否想过&#xff0c;借助AI的力量&#xff0c;我们也…

实验十 编写子程序《汇编语言》- 王爽

一. 显示字符串 1. 需求 显示字符串是现实工作中经常要用到的功能&#xff0c;应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口&#xff0c;使用者可以决定显示的位置&#xff08;行、列&#xff09;、内容和颜色。 子程序描述 名称&#xff1a;show_str…

第六版页面

基本 明确定义 站点网关mqtt服务器 多个柜子使用的是主从模式 下发一个设备组其他的柜子跟着设置 具体的让后端进行详细管理 前端规范 字体规范 弹出框定义什么应该弹出什么不应该弹出 页面 主页 屏幕宽度有的没设置好 平面地图模式有的没重合好 日志改为告警在上面 日志…

cmake install setlocal错误

cmake中的代码如下&#xff1a; #设置安装目录的前缀 set(CMAKE_INSTALL_PREFIX $ENV{PUBLISH_DIR}) #这边的输出满足要求 message(STATUS "install dir:${CMAKE_INSTALL_PREFIX}") #指定安装 install(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin …

深入理解Kafka消费者偏移量管理:如何确保事件已处理

深入理解Kafka消费者偏移量管理&#xff1a;如何确保事件已处理 Apache Kafka是一款流行的分布式流处理平台&#xff0c;用于构建高吞吐量的数据管道和实时应用。在Kafka中&#xff0c;消费者处理事件的确认机制主要依赖于偏移量&#xff08;Offset&#xff09;的管理。本文将深…

机械学习—零基础学习日志(如何理解概率论3)

随机变量的函数分布 一维随机变量分布&#xff0c;可以看到下图&#xff0c;X为不同情况的概率。而x如果是大于等于X&#xff0c;那么当x在40以内时&#xff0c;没有概率&#xff0c;为0。 当x变大&#xff0c;在40-80之间&#xff0c;那么x大于X的概率为&#xff0c;0.7&…

Liunx搭建Rustdesk远程桌面服务

1、环境准备 Linux&#xff1a;centos7.9 rustdesk server安装包 很多新服务器并没有 wget 和unzip 可以通过yum自行安装下&#xff0c;如果系统中有wget但不能使用&#xff0c;直接卸载重装即可。 yum install wget wget --no-check-certificate https://github.com/rust…

《黑神话悟空》打不开解决方法介绍

黑神话悟空打不开怎么办&#xff1f;很多的玩家都非常的好奇自己的黑神话悟空为什么打不开&#xff0c;这里整理了黑神话悟空打不开解决方法介绍&#xff0c;详细的内容可以在这里进行了解&#xff0c;有需要的小伙伴们一起来看看吧&#xff01; 解决方法1&#xff1a;验证文件…