【机器学习:八、逻辑回归】

逻辑回归(Logistic Regression)

1. 逻辑回归的引出

在现实世界中,许多问题都涉及到分类任务。例如:

  • 判断一封邮件是否为垃圾邮件;
  • 预测某人是否会患某种疾病;
  • 确定图片中是否包含某种特定物体。

这些问题的输出通常是离散的(例如“是/否”或“0/1”)。传统的线性回归虽然适合连续输出的任务,但无法直接处理分类问题。因此,我们需要一种适合分类任务的模型,这便引出了逻辑回归(Logistic Regression)。

逻辑回归是一种适用于二分类和扩展到多分类任务的模型,其核心思想是通过引入逻辑函数(Logistic Function),将线性模型的输出映射到概率空间,使模型能够解决分类问题。

2. 逻辑回归的背景与意义

背景

逻辑回归最初起源于生物统计学领域,用于描述事件的发生概率。例如:

  • 一种药物的有效性(有效/无效);
  • 生物体存活的概率。

随着机器学习的普及,逻辑回归成为了分类任务中的经典算法之一,被广泛应用于各个领域。

意义

  1. 简单易实现:逻辑回归模型具有明确的数学定义,训练过程高效,易于实现。
  2. 可解释性强:逻辑回归的系数能够直观解释特征对分类的影响。
  3. 广泛适用性:适用于许多需要概率输出的分类任务,如医学诊断、信用评分等。
  4. 构造基础模型:逻辑回归常作为复杂模型的基石,例如神经网络。

3. 逻辑回归的定义

逻辑回归是一种概率模型,用于预测某事件发生的概率 P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x) 。其核心思想是将输入特征通过线性模型映射到一个实数值,再通过Sigmoid函数将其压缩到 [ 0 , 1 ] [0, 1] [0,1] 区间,表示为概率。

模型公式

  1. 线性模型

z = θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n z = \theta^T x = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n z=θTx=θ0+θ1x1+θ2x2++θnxn

其中:

  • x x x 是输入特征向量;
  • θ \theta θ 是模型参数(权重和偏置)。
  1. Sigmoid函数

h θ ( x ) = 1 1 + e − z h_\theta(x) = \frac{1}{1 + e^{-z}} hθ(x)=1+ez1

Sigmoid函数的性质:

  • z → + ∞ z \to +\infty z+ h θ ( x ) → 1 h_\theta(x) \to 1 hθ(x)1
  • z → − ∞ z \to -\infty z h θ ( x ) → 0 h_\theta(x) \to 0 hθ(x)0
  1. 预测概率

P ( y = 1 ∣ x ) = h θ ( x ) , P ( y = 0 ∣ x ) = 1 − h θ ( x ) P(y=1|x) = h_\theta(x), \quad P(y=0|x) = 1 - h_\theta(x) P(y=1∣x)=hθ(x),P(y=0∣x)=1hθ(x)

  1. 分类决策: 设定阈值 α \alpha α ,一般取 α = 0.5 \alpha = 0.5 α=0.5

y = { 1 if  h θ ( x ) ≥ α 0 if  h θ ( x ) < α y = \begin{cases} 1 & \text{if } h_\theta(x) \geq \alpha \\ 0 & \text{if } h_\theta(x) < \alpha \end{cases} y={10if hθ(x)αif hθ(x)<α

可视化图示

  • Sigmoid函数图:展示输入 z z z 映射到概率 h θ ( x ) h_\theta(x) hθ(x) 的曲线(从 -6 到 6 的 S 型函数)。

4. 逻辑回归的代价函数

4.1 为什么不能直接使用均方误差作为代价函数?

在线性回归中,我们使用均方误差(MSE)作为代价函数:

J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 J(θ)=m1i=1m(hθ(x(i))y(i))2

但是,在逻辑回归中,使用 MSE 存在两个问题:

  1. 非凸性问题:MSE 会导致代价函数变为非凸函数,梯度下降可能无法找到全局最优解。
  2. 不符合概率模型的假设:逻辑回归是基于最大似然估计的,而 MSE 不满足这种统计假设。

4.2 交叉熵损失函数(Cross-Entropy Loss)

逻辑回归采用交叉熵作为代价函数,它基于最大似然估计:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left[ y^{(i)} \log h_\theta(x^{(i)}) + \left(1 - y^{(i)}\right) \log \left(1 - h_\theta(x^{(i)})\right) \right] J(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

  • y = 1 y = 1 y=1 :代价为 − log ⁡ h θ ( x ) -\log h_\theta(x) loghθ(x) ,即模型预测的概率 h θ ( x ) h_\theta(x) hθ(x) 越接近 1,损失越小;
  • y = 0 y = 0 y=0 :代价为 − log ⁡ ( 1 − h θ ( x ) ) -\log \left(1 - h_\theta(x)\right) log(1hθ(x)) ,即模型预测的概率 h θ ( x ) h_\theta(x) hθ(x) 越接近 0,损失越小。
可视化图示
  • 损失函数曲线:分别展示 y = 1 y=1 y=1 y = 0 y=0 y=0 的损失随 h θ ( x ) h_\theta(x) hθ(x) 变化的曲线。

4.3 代价函数的性质

  1. 凸函数:交叉熵损失是一个凸函数,便于梯度下降找到全局最优解。
  2. 偏导数公式

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

这与线性回归的梯度更新公式形式类似,只是误差的定义不同。

5.逻辑回归的梯度下降法

梯度下降是逻辑回归模型训练中常用的优化算法,用于通过最小化代价函数来寻找模型参数 θ \theta θ 。以下是逻辑回归中梯度下降的具体过程:

5.1 梯度下降的目标

逻辑回归的目标是最小化代价函数 J ( θ ) J(\theta) J(θ) ,通常使用交叉熵损失函数

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1 - y^{(i)}) \log \left(1 - h_\theta(x^{(i)})\right) \right] J(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

其中:

  • m m m 是样本数量;
  • h θ ( x ) = 1 1 + e − θ T x h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=1+eθTx1 是 Sigmoid 函数的输出;
  • y ( i ) ∈ { 0 , 1 } y^{(i)} \in \{0, 1\} y(i){0,1} 是样本的真实标签。

梯度下降通过迭代更新参数 θ \theta θ 来逐步减小代价函数值。

5.2 梯度下降公式

2.1 代价函数的梯度

代价函数对参数 θ j \theta_j θj 的偏导数为:

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

  • h θ ( x ( i ) ) − y ( i ) h_\theta(x^{(i)}) - y^{(i)} hθ(x(i))y(i) 是预测值与真实值的误差;
  • x j ( i ) x_j^{(i)} xj(i) 是第 i i i 个样本的第 j j j 个特征值。
2.2 参数更新公式

梯度下降的更新公式为:

θ j : = θ j − α ⋅ ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta_j} θj:=θjαθjJ(θ)

  • α \alpha α 是学习率(控制更新步伐的大小);
  • θ j \theta_j θj 是模型的参数。

将偏导数代入更新公式,得到:

θ j : = θ j − α m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θj:=θjmαi=1m(hθ(x(i))y(i))xj(i)

这个公式表明,梯度下降的每次更新都依赖于样本预测值与真实值的误差。

5.3 梯度下降的具体步骤

  1. 初始化参数: 通常将所有参数 θ j \theta_j θj 初始化为零或随机小值。

  2. 计算预测值: 使用当前参数计算每个样本的预测值:

    h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) h_\theta(x^{(i)}) = \frac{1}{1 + e^{-\theta^T x^{(i)}}} hθ(x(i))=1+eθTx(i)1

  3. 计算代价函数: 计算当前参数下的代价函数值 J ( θ ) J(\theta) J(θ) ,以评估模型性能。

  4. 更新参数: 根据梯度下降公式更新参数 θ j \theta_j θj

  5. 检查收敛条件: 如果代价函数的值不再显著下降(或变化量小于某个阈值),或达到最大迭代次数,则停止迭代。

5.4 梯度下降的几种变体

  1. 批量梯度下降(Batch Gradient Descent)

    • 每次迭代使用所有样本计算梯度。
    • 优点:梯度估计准确。
    • 缺点:当数据量很大时,计算代价较高。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD)

    • 每次迭代仅使用一个样本计算梯度。
    • 优点:计算效率高,适合大规模数据。
    • 缺点:更新过程不稳定,可能震荡于最优解附近。
  3. 小批量梯度下降(Mini-batch Gradient Descent)

    • 每次迭代使用一个小批量(例如 32 个样本)计算梯度。
    • 优点:结合了批量梯度下降和随机梯度下降的优点,更新稳定且效率较高。

5.5 学习率的影响

  • 学习率 α \alpha α 的大小对梯度下降的效果至关重要:
    • 学习率过大:更新步伐过快,可能导致错过最优解甚至发散。
    • 学习率过小:更新步伐过慢,收敛速度过慢。
学习率影响的可视化图示
  1. 学习率过大:代价函数的值震荡,甚至发散。
  2. 学习率适中:代价函数值平稳下降,快速收敛。
  3. 学习率过小:代价函数值下降缓慢。

5.6 梯度下降的优缺点

优点
  1. 简单易实现;
  2. 可扩展到大规模数据集;
  3. 支持在线学习。
缺点
  1. 对学习率敏感,需仔细调节;
  2. 容易陷入局部最优(对于非凸问题);
  3. 可能收敛到平坦区域(即梯度很小但未达到最优解)。

5.7 梯度下降的改进方法

  1. 自适应学习率

    • AdaGradRMSProp:自动调整学习率,适应不同梯度大小。
    • Adam:结合动量法和 RMSProp,收敛更快且稳定。
  2. 加动量(Momentum)

    • 在每次更新中加入历史梯度的动量,加速收敛过程。
  3. 正则化

    • 添加正则化项(如 L 1 L1 L1 L 2 L2 L2 ),以防止过拟合。

5.8 总结

逻辑回归的梯度下降法通过不断更新模型参数,优化交叉熵损失函数,是一种高效且经典的优化算法。结合不同的梯度下降变体和改进方法,可以提升训练效率和模型性能,使其适应各种规模和复杂度的数据集。

6. 逻辑回归的扩展

  1. 多分类问题:通过 Softmax 函数扩展逻辑回归至多分类任务。
  2. 正则化:加入 L 1 L1 L1 L 2 L2 L2 正则化项,防止过拟合。
  3. 模型评估:使用准确率、精确率、召回率、F1分数等指标评估模型性能。

7. 逻辑回归的总结

逻辑回归是机器学习中经典的分类算法,因其简单、可解释性强而被广泛应用。尽管随着深度学习的兴起,复杂模型逐渐成为主流,但逻辑回归仍然是理解分类问题的基础模型,是许多复杂模型的重要组成部分。

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

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

相关文章

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

django基于Python的电影推荐系统

Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序&#xff0c;旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息&#xff08;如类型…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…

python类和对象

一、什么是类和对象 类和对象一般是编程中较早接触到的比较抽象的概念&#xff0c;其实我们只要按照我们现实生活的实例去类比&#xff0c;就很好理解了 概念理解 我们可以把类比做是一个盖房子的图纸&#xff0c;对象比做是根据图纸去创建出来的一栋房子&#xff0c;这样每…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库&#xff0c;一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想&#xff0c;它将对象的创建和对象之间的依赖关系…

CNN Test Data

由于数据量过大&#xff0c;打不开了 搞一组小的吧。收工睡觉 https://download.csdn.net/download/spencer_tseng/90256048

Windows下调试Dify相关组件(2)--后端Api

1.部署依赖的服务&#xff08;代码最外层的docker目录&#xff09; 1.1 将middleware.env.example复制&#xff0c;并改名为middleware.env。 1.2 查看docker-compose.middleware.yaml&#xff0c;有5个服务 db&#xff1a;postgres数据库。 redis&#xff1a;redis缓存。 sa…

从预训练的BERT中提取Embedding

文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务&#xff0c;样本数据如下 可以看到几个句子及其对应的标签&#xff0c;其中1表示正面情绪&#xff0c;0表示负面情绪。我们可以利用给定的数据集训练一个分类器&#xff0c;对句子所表达的…

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中&#xff0c;阅读了官方文档&#xff0c;在之前做flutter时候&#xff0c;经常使用overlay&#xff0c;使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型&#xff0c;671B 参数&#xff0c;激活 37B&#xff0c;在 14.8T token 上进行了预训练。 论…

Elastic-Job相关

文档参考视频&#xff1a;09_SpringBoot案例演示_哔哩哔哩_bilibili 一、Elastic-Job介绍 Elastic-Job 是一个轻量级、分布式的任务调度框架&#xff0c;旨在解决分布式环境下的定时任务调度问题。 1.1. Elastic-Job 的核心组件 Elastic-Job 是由多个核心组件构成的&#x…

【Linux】文件 文件描述符fd

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 &#x1f33b;个人主页&#xff1a;路飞雪吖~ 一、C文件接口 &#x1f31f;写文件 &#x1f320;小贴士&#xff1a; &#x1f320;stdin && stdout && stderr Linux下…

Java Spring Boot实现基于URL + IP访问频率限制

点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中&#xff0c;接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源&#xff0c;防止服务器过载或服务不可用&#xff0c;需要对接口的访问频率进行限制。本文将介绍如…

QML states和transitions的使用

一、介绍 1、states Qml states是指在Qml中定义的一组状态&#xff08;States&#xff09;&#xff0c;用于管理UI元素的状态转换和属性变化。每个状态都包含一组属性值的集合&#xff0c;并且可以在不同的状态间进行切换。 通过定义不同的状态&#xff0c;可以在不同的应用场…

SpringCloud

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有功…

DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细

实现功能&#xff1a;DSP28379D-LED灯闪烁 :matlab为2019a :环境建立见之前文章 Matlab2019a安装C2000 Processors超详细过程 matlab官网链接&#xff1a; Getting Started with Embedded Coder Support Package for Texas Instruments C2000 Processors Overview of Creat…

java_将数据存入elasticsearch进行高效搜索

使用技术简介&#xff1a; (1) 使用Nginx实现反向代理&#xff0c;使前端可以调用多个微服务 (2) 使用nacos将多个服务管理关联起来 (3) 将数据存入elasticsearch进行高效搜索 (4) 使用消息队列rabbitmq进行消息的传递 (5) 使用 openfeign 进行多个服务之间的api调用 参…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上&#xff0c;实例是别的同事搭建的。最近又又又想了解一下&#xff0c;而且已经盘了一些了&#xff0c;所以写写记录一下。因为这个事儿没太多的进度压力&#xff0c;索性写到哪儿算哪儿&#xff0c;只要是新了解到的…