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

news/2024/9/22 16:39:23 标签: 机器学习, 逻辑回归, python

​​​​​​​

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.niftyadmin.cn/n/5670592.html

相关文章

【电路笔记】-运算放大器积分器

运算放大器积分器 文章目录 运算放大器积分器1、概述2、运算放大器积分器的表示2.1 理想积分器2.2 交流响应2.3 输出公式3、限制4、总结1、概述 在我们之前与运算放大器相关的大多数文章中,配置都是基于带有电阻器作为反馈环路、分压器或互连许多运算放大器的一部分的放大器。…

【MySQ】在MySQL里with 的用法

在MySQL中,WITH语句通常与公用表表达式(Common Table Expressions,简称CTE)一起使用。CTE是一种临时的结果集,类似于视图或子查询,它们在查询中被定义并且可以在一个或多个SELECT、INSERT、UPDATE或DELETE语…

摆脱困境并在iPhone手机上取回删除照片的所有解决方案

您是否无意中从 iPhone 中删除了照片?您,无需惊慌,因为您可以使用以下方法恢复所有照片。 如果您长时间使用 iPhone,您应该知道 iOS 提供了许多 Android 不提供的备份功能。例如,您的所有照片都会自动备份到 iCloud 存…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址:Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件,有一个示例配置文件 conf/zoo_sample.cfg,此文件不能生效,需要名称为…

如何导入一个Vue并成功运行

注意1:要确保自己已经成功创建了一个Vue项目,创建项目教程在如何创建Vue项目 注意2:以下操作均在VS Code,教程在VS Code安装教程 一、Vue项目导入VS Code 1.点击文件,然后点击将文件添加到工作区 2. 选择自己的vue项…

qt相关面试题

qt中的文件流和数据流区别qt中的show和exec区别qt多线程使用那些方法QString与基本数据类型如何转换qt如何保证多线程安全qt中事件与信号的区别qt中的connect函数的连接方式信号与槽有哪些用法QT的事件过滤器同步和异步的网络连接区别qt网络模块中有哪些类来执行异步操作qt如何…

GIS开发之如何使用OpenLayers,Leaflet,Mapbox,Cesium,ArcGIS, Turf.js 与 D3.js

1、OpenLayers: 描述:OpenLayers是一个高性能、开源的JavaScript库,用于在Web上创建富有的地图应用。它支持多种地图数据源,包括从瓦片服务到矢量数据,并提供了大量的交互功能。特点:功能强大、灵活易用&a…

Java笔试面试题AI答之单元测试JUnit(7)

文章目录 37. 请列举一些JUnit扩展 ?1. 参数化测试2. 条件测试执行3. 临时目录4. 时间测试5. 重复测试6. 前置/后置条件7. Mockito8. Spring Test9. JUnit Vintage10. Testcontainers11. 自定义注解和扩展12. 测试监听器(TestListener 和 RunListener&am…