机器学习04-逻辑回归(python)-02原理与损失函数

news2024/9/22 14:12:37

​​​​​​​

1. 逻辑回归概念

逻辑回归(Logistic Regression) 是一种 分类模型,主要用于解决 二分类问题(即分成两类,如是否通过、是否患病等)。逻辑回归的目标是根据输入的特征预测一个 概率,这个概率值介于 0 到 1 之间。

逻辑回归与线性回归的关系:
  • 线性回归 是用来预测连续值的(如房价、身高),它输出的是一个具体的数值。

  • 逻辑回归 则是用来预测类别的(如是否通过考试),它通过一个线性模型输出一个概率值,表示某个样本属于某一类别的概率。

总结:
  • 线性回归输出数值,而逻辑回归输出概率

  • 逻辑回归的输出值是 0 到 1 之间的概率,通常我们会设定一个阈值,比如 0.5,将大于 0.5 的归为 1 类,低于 0.5 的归为 0 类。


2. 基本思想

逻辑回归的基本思想,我们可以从以下几个步骤来理解。

Step 1. 线性模型

逻辑回归首先构建的是一个线性模型,即根据输入的特征计算出一个值:[ f(x) = w^T x + b ] 这里的( w ) 是权重向量,表示每个特征的重要性;( b )是偏置项,帮助调整模型的输出。

这个线性模型的输出 ( w^T x + b ) 可以是任何实数(正数、负数、大值、小值都有可能)。但是我们不能直接使用这个值进行分类,因为分类任务需要输出的值在 0 到 1 之间,表示概率。

Step 2. Sigmoid 函数

为了将线性模型的输出值转换为 0 到 1 之间的概率值,逻辑回归使用了 Sigmoid 函数[ \sigma(z) = \frac{1}{1 + e^{-z}} ]其中,( z = w^T x + b )

Sigmoid 函数的作用

  • 将任意实数映射到 0 到 1 之间。例如,当 ( z ) 非常大时,Sigmoid 函数的输出接近 1;当 ( z )非常小时,Sigmoid 函数的输出接近 0。

  • 输出的概率值( \sigma(z) ) 表示样本属于某一类别(通常为 1 类)的概率。

Step 3. 分类预测

逻辑回归的最终目标是对样本进行分类。我们通常通过设定一个 阈值 来判断:

  • 如果 Sigmoid函数的输出概率值大于设定的阈值(如 0.5),则预测该样本属于 1 类

  • 如果小于阈值,则预测该样本属于 0 类

总结:逻辑回归首先通过线性模型计算出一个值,然后将该值通过 Sigmoid 函数转换为概率,最后根据设定的阈值进行分类。


3. 逻辑回归的假设函数

在逻辑回归中,假设函数表示的是模型如何通过输入 ( x ) 得到输出的概率值。假设函数如下:[ h_\theta(x) = \sigma(w^T x + b) ]其中:

  • ( w^T x + b ) 是输入特征的线性组合;

  • ( \sigma(z) ) 是 Sigmoid 函数,用来将线性模型的输出转换为概率值。

通过这个假设函数,我们可以将任何输入特征转换为一个概率值,这个概率值用于表示样本属于某一类的可能性。


4. 逻辑回归的预测过程(PPT中的例子)

看PPT中的例子,假设有一组样本输入特征,逻辑回归的预测过程可以总结为以下几个步骤:

  1. 输入样本特征:如一个人的年龄、体重、是否吸烟等特征。

  2. 线性回归计算:根据权重( w )和偏置( b ),计算出线性回归的结果 ( w^T x + b )

  3. Sigmoid 函数转换:将线性回归的输出通过 Sigmoid 函数转换为概率值。

  4. 分类结果:根据设定的阈值,将概率值转换为预测类别。

举例:

假设有一个样本的输入特征为 ( x = [年龄, 体重, 是否吸烟] ),计算过程如下:

  • 使用权重和特征的线性组合计算出 ( f(x) = w^T x + b ),例如输出为 1.5。

  • 通过 Sigmoid 函数将 1.5 转换为概率 ( \sigma(1.5) = 0.82 )

  • 假设阈值为 0.6,由于 0.82 > 0.6,因此预测该样本属于 1 类


5. 损失函数:对数似然损失

为了衡量逻辑回归模型的好坏,我们需要计算 损失函数。损失函数表示模型的预测值与真实值之间的差距。逻辑回归使用的损失函数是 对数似然损失函数,又称为 交叉熵损失(Cross-Entropy Loss)。其主要作用是用来指导模型更新权重,使得模型的预测越来越接近真实标签。

损失函数的公式如下:

​​​​​​​[ L(\theta) = - \sum_{i=1}^{m} [y_i \log(p_i) + (1 - y_i) \log(1 - p_i)] ]

其中:

  • ( y_i ) 是第 ( i ) 个样本的 真实类别,它的值为 0 或 1。

  • ( p_i ) 是模型预测第 ( i ) 个样本属于 1 类的概率,这个值介于 0 和 1 之间。

目标:我们希望模型预测出的概率 ( p_i) 尽量接近样本的真实类别 ( y_i),即:

  • 如果样本的真实类别 (y_i = 1),那么我们希望模型预测的概率 ( p_i ) 越接近 1 越好。这意味着样本被正确预测为 1 类。

  • 如果样本的真实类别 ( y_i = 0 ),那么我们希望模型预测的概率 ( p_i ) 越接近 0 越好。这意味着样本被正确预测为 0 类。

损失函数的工作原理:
  • 当真实标签 ( y_i = 1) 时,损失函数的公式为:

  • [ L = - \log(p_i) ] 

  • 如果 ( p_i) 越接近 1,( \log(p_i) )  的值就越大,负号取反后,损失就越小。反之,( p_i ) 越小(越接近 0),损失就越大。

  • 当真实标签 ( y_i = 0 ) 时,损失函数的公式为:

  • [ L = - \log(1 - p_i) ]

  • 如果 ( p_i ) 越接近 0,( 1 - p_i ) 越接近 1,( \log(1 - p_i) )的值就越大,负号取反后,损失就越小。反之,( p_i ) 越接近 1,损失就越大。

举例讲解:

假设我们有一个样本,它的真实类别是 1,模型预测它的概率为 0.9。

根据损失函数公式: [ 损失 = - (1 \cdot \log(0.9)) = - \log(0.9) ] 由于预测的概率接近真实值(1 类),损失较小,说明模型预测得很好。

如果模型预测的概率为 0.1(远离真实值),则损失会非常大,表明模型预测得很差。

假设我们有以下两种情况的样本:

  1. 样本1:真实类别为 ( y_1 = 1 ),模型预测它属于 1 类的概率为( p_1 = 0.9 )

  2. 样本2:真实类别为 ( y_2 = 0 ),模型预测它属于 1 类的概率为 ( p_2 = 0.1 )

我们将通过损失函数公式计算这两个样本的损失值。

情况1:真实类别为 1,预测概率为 0.9

我们知道真实类别( y_1 = 1 ),根据损失函数公式,损失为:

[ L = - \log(0.9) ]

用计算器计算:[ \log(0.9) \approx -0.105 ]

因此,损失值为:[ L = - (-0.105) = 0.105 ]

这个损失值很小,说明模型的预测结果非常接近真实值,预测得很好。

情况2:真实类别为 0,预测概率为 0.1

我们知道真实类别 ( y_2 = 0 ),根据损失函数公式,损失为:

[ L = - \log(1 - 0.1) = - \log(0.9) ]

用计算器计算:[ \log(0.9) \approx -0.105 ]

因此,损失值为:[ L = - (-0.105) = 0.105 ]

同样,这个损失值也比较小,说明模型的预测结果较好,预测接近真实情况。

错误预测的情况

如果模型预测出现较大的错误,损失值会明显增大。

例如,假设模型在真实类别为 1 的情况下预测了 ( p_1 = 0.1 ),我们计算损失:

[ L = - \log(0.1) \approx 2.302 ]

损失值很大,说明模型的预测远离真实值,表现较差。

更复杂的例子:多个样本

假设我们有 3 个样本,它们的真实类别和模型预测的概率如下:

样本真实类别 ( y_i )模型预测的概率 ( p_i )损失( L_i )
110.9( - \log(0.9) \approx 0.105 )
200.8( - \log(1 - 0.8) = - \log(0.2) \approx 1.609 )
310.3( - \log(0.3) \approx 1.204 )
  • 样本1的预测接近真实值,损失较小。

  • 样本2的预测错误较大,损失明显较大。

  • 样本3的预测远离真实值,损失也很大。

总结

  • 损失值越小,说明模型的预测越好,接近真实值

  • 损失值越大,说明模型的预测远离真实值,表现较差

损失函数的优化

模型通过最小化损失函数来优化参数 ( w ) 和 ( b )。最小化损失函数意味着模型在逐步调整其权重,使得预测值越来越接近真实标签。通过 梯度下降法,模型不断更新参数,直到找到最优解。


6. 逻辑回归的优化:梯度下降

为了让模型能够更好地预测我们需要找到 最优的参数 ( w ) 和 ( b ),使得模型的预测结果尽可能接近真实值。为了达到这个目标,我们通常会通过 最小化损失函数 来找到这些最优参数。

为此,我们使用 梯度下降 来最小化损失函数。梯度下降(Gradient Descent) 是一种优化算法,旨在通过不断更新参数,找到使损失函数最小化的参数组合。

梯度下降的步骤:
  1. 计算损失函数的梯度:损失函数对参数 ( w ) 和 ( b ) 的偏导数。

  2. 更新参数:沿着负梯度方向更新参数,使得损失函数的值逐渐减小。

更新公式如下:

[ w = w - \alpha \cdot \frac{\partial L}{\partial w} ] 

这里的 ( \alpha ) 是学习率,控制每次更新的步长大小。

通过反复进行梯度下降,模型会逐渐找到最优的参数,使得损失函数达到最小值。

梯度下降的核心思想

梯度下降的核心思想是:找到损失函数下降最快的方向,并沿着这个方向不断更新模型的参数,直到找到最小值。

我们可以将这个过程想象为人在山坡上寻找最低点:

• 你站在山坡上的某一点,并且你可以感知到坡度的方向(梯度),这个坡度告诉你当前的方向是上坡还是下坡。

• 你希望找到山谷(最低点),因此你需要沿着坡度往下走(即沿着 负梯度方向 走),这样你每一步都会向山谷靠近。

• 如果坡度(梯度)很陡,你就走大步;如果坡度不大,你就走小步。走的每一步就是更新模型参数。

梯度的定义

在数学中,梯度 是一个向量,它表示损失函数关于每个参数的变化率。通俗地说,梯度告诉我们如何调整参数,才能让损失函数减少得最快。

对于参数  w  和  b ,它们的梯度分别是:

    •    损失函数  L  对  w  的偏导数: \frac{\partial L}{\partial w}
    •    损失函数  L  对  b  的偏导数: \frac{\partial L}{\partial b}

梯度的值表示当我们稍微改变  w  或  b  时,损失函数的变化情况。

为什么要沿着 负梯度方向 更新参数?

因为梯度表示的是损失函数在某一点上变化的方向,而我们的目标是最小化损失函数,因此需要沿着梯度减少的方向(即负梯度方向)更新参数。

公式解释:

我们沿着负梯度方向更新参数的公式为:

w = w - \alpha \cdot \frac{\partial L}{\partial w}


b = b - \alpha \cdot \frac{\partial L}{\partial b}


    •   \alpha  是 学习率(learning rate),是一个超参数,我们人为的设定学习率,使用它来控制每次更新的步长大小。如果学习率太大,可能会跳过最优解;如果学习率太小,收敛速度会很慢。


    •    \frac{\partial L}{\partial w} 和 \frac{\partial L}{\partial b} 是损失函数对  w  和  b  的梯度,表示参数  w  和  b  需要调整的方向和幅度。

负号的含义:因为我们希望使损失函数变小,而梯度的方向指向损失函数增大的方向,所以我们需要朝着 负梯度方向 调整参数,这样才能减小损失函数的值。

举例说明:梯度下降的过程

假设我们有一个简单的损失函数,假设函数的图像,形状类似一个碗,我们目标是到碗的最低点,也就是最小损失对应的参数值。梯度下降的过程如下:

    1.    初始化参数:首先,我们从随机的参数  w  和  b  开始。
    2.    计算梯度:在当前参数下,计算损失函数的梯度(求偏导),得到 \frac{\partial L}{\partial w}  和  \frac{\partial L}{\partial b} ,它们表示损失函数的变化方向。
    3.    更新参数:根据梯度公式,沿着负梯度方向更新参数:

w = w - \alpha \cdot \frac{\partial L}{\partial w}


b = b - \alpha \cdot \frac{\partial L}{\partial b}​​​​​​​

    4.    重复:重复计算梯度和更新参数的过程,直到损失函数值不再明显减少,也就是达到收敛。

\alpha 是学习率:学习率(Learning Rate,记作  \alpha) 是梯度下降算法中一个非常重要的超参数。它决定了每次更新参数时步长的大小,也直接影响模型训练的收敛速度和最终的效果。选择一个合适的学习率对模型的训练至关重要。

1. 过大(学习率过高)的问题

        如果学习率设置得太大,梯度下降的每一步都会走得很远,可能会跳过最优点,从而导致损失函数波动不定,甚至发散(损失函数越来越大)。

2. 过小(学习率过低)的问题

        如果学习率设置得太小,梯度下降的每一步会很小,模型收敛速度很慢,训练时间会大大增加,容易陷入局部最优。

3. 适中的学习率 ()

        合适的学习率可以保证模型的训练既快速又稳定,使损失函数逐步收敛到最小值。通常情况下,学习率适中时,损失函数的下降会是稳定的,并且收敛速度较快。

经验值:​​​​​​​

• 常见的学习率范围:0.001 到 0.1

• 具体的学习率选择应根据数据和模型的复杂程度来调整:

• 如果模型较为复杂(如深度神经网络),学习率通常设置得小一些(例如 0.001)。

  深度学习 中,通常使用的初始学习率为 0.0010.01

• 对于简单的线性回归、逻辑回归等模型,学习率可以设得稍大(例如 0.010.1)。


总结

  • 逻辑回归的工作原理:逻辑回归通过线性模型输出一个值,

  •          并通过 Sigmoid 函数将其转换为 0 到 1 之间的概率值,表示样本属于某一类的概率。

  • 损失函数:使用对数似然损失函数衡量模型预测结果与真实结果的差距,模型通过最小化损失函数来优化自身参数。

  • 梯度下降:通过梯度下降算法更新模型的参数,使损失函数逐渐减小,找到最优的模型参数。

逻辑回归是一种非常直观和基础的分类算法,理解了它的原理可以帮助我们更好地理解其他更复杂的模型。

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

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

相关文章

C++——关联式容器(4):set和map

在接触了诸如二叉搜索树、AVL树、红黑树的树形结构之后,我们对树的结构有了大致的了解,现在引入真正的关联式容器。 首先,先明确了关联式容器的概念。我们之前所接触到的如vector、list等容器,我们知道他们实际上都是线性的数据结…

C++门迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(const char strmaze[11][11]) {int i 0;int ia 0;for (; i < 11; i) {for (ia 0; ia <…

部署林风社交论坛/社交论坛linfeng-community遇到问题集合

部署开源版本遇到的问题 1.管理端前端部署 npm install报错 “ERR! gyp verb ensuring that file exists: C:\Python27\python.exe” “ERR! gyp ERR! node -v v20.10.0” “ ERR! gyp ERR! node-gyp -v v3.8.0” 原因:node版本和node-gyp版本不匹配 解决方法: 1&…

航拍房屋检测系统源码分享

航拍房屋检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

基于stm32物联网身体健康检测系统

在当今社会&#xff0c;由于经济的发展带来了人们生活水平不断提高&#xff0c;但是人们的健康问题却越来越突出了&#xff0c;各种各样的亚健康随处可在&#xff0c;失眠、抑郁、焦虑症&#xff0c;高血压、高血糖等等侵袭着人们的健康&#xff0c;人们对健康的关注达到了一个…

职业发展如何进入人工智能领域

基础知识和技能 进入人工智能领域需要学习一系列的基础知识和技能&#xff0c;以下是一些关键的步骤和领域&#xff1a; 基础数学知识&#xff1a;人工智能领域涉及到大量的数学概念&#xff0c;包括线性代数、概率论、统计学和微积分。这些数学工具对于理解和设计算法至关重要…

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

&#x1f310;在Java编程中&#xff0c;break和continue是两个重要的控制流语句&#xff0c;它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为&#xff0c;但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句&#xff0c;并使用流程…

[Redis][Set]详细讲解

目录 0.前言1.常用命令1.SADD2.SMEMBERS3.SISMEMBER4.SCARD5.SPOP6.SMOVE7.SREM 2.集合间操作0.是什么&#xff1f;1.SINTER2.SINTERSTORE3.SUNION4.SUNIONSTORE5.SDIFF6.SDIFFSTORE 3.内部编码1.intset(整数集合)2.hashtable(哈希表) 4.使用场景 0.前言 集合类型也是保存多个字…

SpringBoot 整合 Caffeine 实现本地缓存

目录 1、Caffeine 简介1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一2.1、缓存加载策略2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载【As…

智能AC管理系统信息泄露漏洞

文章目录 免责声明漏洞描述搜索语法漏洞复现yaml修复建议 免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 智能AC管理系统是一个控制管理系统因存在未授权访问导致信息泄露 搜…

大厂面试真题:SpringBoot的核心注解

其实理解一个注解就行了&#xff20;SpringBootApplication&#xff0c;我们的启动类其实就加了这一个 但是这么答也不行&#xff0c;因为面试官要的答案肯定不止这一个 我们打开SpringBootApplication的源码&#xff0c;会发现上面加了一堆的注解 相对而言比较重要是下面三个…

【微处理器系统原理与应用设计第十三讲】通用同/异步收发器USART轮询模式应用设计

USART提供两设备之间的串行双工通信&#xff0c;并支持中断和DMA工作。采用轮询、中断和DMA三种方式进行数据收发。 一、功能需求 实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART&#xff08;串口&#xff09;与用户设备&#xff08;上位机&#xff0…

YOLO原理实现

YOLO&#xff08;You Only Look Once&#xff09;是一个标志性的目标检测模型&#xff0c;可以快速分类并定位图像中的多个对象。本文总结了YOLO模型中所有关键的数学操作。 第一步&#xff1a;定义输入 要使用YOLO模型&#xff0c;首先必须将RGB图像转换为448 x 448 x 3的张…

詹妮弗洛佩兹25年发9张专辑3张是关于阿弗莱克的,爱恨情仇之深可见一斑!新专辑已定时间表!

詹妮弗洛佩兹25年共发9张专辑&#xff0c;有3张是关于本阿弗莱克的 内部人爆詹妮弗洛佩兹已定制作与本阿弗莱克的“心碎”专辑时间表 虽然詹妮弗洛佩兹最近的专辑《This Is Me…Now》以失败告终&#xff0c;但她可能已经准备好重返音乐工作室。但这一次&#xff0c;她将推出一…

prometheus概念

一、Prometheus概述 1.prometheus概念&#xff1a;开源的系统监控和告警系统&#xff0c;在k8s分布式的容器化管理系统当中&#xff0c;一般都是搭配promethuse来进行监控&#xff1b;是一个服务监控系统&#xff0c;同时也可以监控主机&#xff0c;自带数据库&#xff0c;名字…

提升编程效率的秘诀:多数人竟然忽略了它!

在编程学习的过程中&#xff0c;许多人会专注于算法、数据结构、编程语言的学习&#xff0c;而往往忽略了一个至关重要的基础技能——键盘盲打。虽然看似与编程能力无关&#xff0c;但盲打不仅可以显著提高编程效率&#xff0c;还能帮助编程者更好地集中注意力。本文将深入探讨…

无人机集群路径规划:​北方苍鹰优化算法(Northern Goshawk Optimization,NGO)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…

Django学习实战之评论验证码功能(附A)

前言&#xff1a; 对于具有评论功能的博客来说&#xff0c;无论是否为知名博客&#xff0c;都会被恶意广告关注&#xff0c;上线没几天就会有人开始通过程序灌入广告评论&#xff0c;因此针对所有有用户输入的页面&#xff0c;验证码是必需品。 在Django系统中使用验证码非常简…

【面经】查找中常见的树数据结构

查找中常见的树数据结构 一、二叉排序&#xff08;搜索、查找&#xff09;树&#xff08;BST&#xff0c;Binary Search Tree&#xff09;&#xff08;1&#xff09;二叉排序树的查找、插入和删除过程&#xff08;2&#xff09;叉树排序树的缺陷&#xff08;3&#xff09;二叉排…

深度学习02-pytorch-04-张量的运算函数

在 PyTorch 中&#xff0c;张量&#xff08;tensor&#xff09;运算是核心操作之一&#xff0c;PyTorch 提供了丰富的函数来进行张量运算&#xff0c;包括数学运算、线性代数、索引操作等。以下是常见的张量运算函数及其用途&#xff1a; 1. 基本数学运算 加法运算&#xff1a…