当前位置: 首页 > news >正文

【机器学习】逻辑损失函数的基本概念和探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数

引言

在机器学习中,逻辑损失函数(Logistic Loss Function)是用于训练逻辑回归模型的一种损失函数。逻辑回归是一种广泛用于分类问题的模型,特别是用于二分类问题,它的目标是预测一个实例属于两个类别中的一个的概率

文章目录

  • 引言
  • 一、逻辑损失函数的定义
  • 二、sigmoid函数定义
  • 三、逻辑损失函数的解释
  • 四、探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数
    • 4.1 导入第三方库
    • 4.2 平方误差是否适用于逻辑回归
    • 4.3 逻辑损失函数
    • 4.4 总结

一、逻辑损失函数的定义

loss ( f w , b ( x ( i ) ) , y ( i ) ) = − y ( i ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = -y^{(i)} \log(f_{w,b}(x^{(i)})) - (1 - y^{(i)}) \log(1 - f_{w,b}(x^{(i)})) loss(fw,b(x(i)),y(i))=y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))
其中:

  • f w , b ( x ( i ) ) f_{w,b}(x^{(i)}) fw,b(x(i))是模型对于第 i i i个样本的预测,通常是经过sigmoid函数转换后的输出,表示样本属于正类(通常标记为1)的概率
  • y ( i ) y^{(i)} y(i)是第 i i i个样本的实际标签,取值为0或1
  • log ⁡ \log log是自然对数

二、sigmoid函数定义

f w , b ( x ( i ) ) = 1 1 + e − ( w ⋅ x ( i ) + b ) f_{w,b}(x^{(i)}) = \frac{1}{1 + e^{-(w \cdot x^{(i)} + b)}} fw,b(x(i))=1+e(wx(i)+b)1

三、逻辑损失函数的解释

  • 当实际标签 y ( i ) = 1 y^{(i)} = 1 y(i)=1时,损失函数变为 − log ⁡ ( f w , b ( x ( i ) ) ) -\log(f_{w,b}(x^{(i)})) log(fw,b(x(i)))。如果模型预测的概率接近1,则损失接近0;如果模型预测的概率接近0,则损失非常大
  • 当实际标签 y ( i ) = 0 y^{(i)} = 0 y(i)=0时,损失函数变为 − log ⁡ ( 1 − f w , b ( x ( i ) ) ) -\log(1 - f_{w,b}(x^{(i)})) log(1fw,b(x(i)))。如果模型预测的概率接近0,则损失接近0;如果模型预测的概率接近1,则损失非常大

逻辑损失函数的特点是它对于预测错误的情况给予较大的惩罚,而在预测正确时则给予较小的损失
这使得逻辑回归非常适合于分类任务,因为它能够通过最小化损失函数来学习如何正确地分类样本

在训练过程中,我们通常不是只计算单个样本的损失,而是计算整个训练集上所有样本的平均损失,即成本函数(Cost Function):
J ( w , b ) = 1 m ∑ i = 1 m loss ( f w , b ( x ( i ) ) , y ( i ) ) J(w, b) = \frac{1}{m} \sum_{i=1}^{m} \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) J(w,b)=m1i=1mloss(fw,b(x(i)),y(i))

其中 m m m是训练集中样本的数量。通过优化成本函数(例如,使用梯度下降算法),我们可以找到最佳的模型参数 w w w b b b

四、探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数

4.1 导入第三方库

import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from plt_logistic_loss import  plt_logistic_cost, plt_two_logistic_loss_curves, plt_simple_example
from plt_logistic_loss import soup_bowl, plt_logistic_squared_error
plt.style.use('./deeplearning.mplstyle')

4.2 平方误差是否适用于逻辑回归

在这里插入图片描述

回想在线性回归中,我们使用了平方误差成本函数:一个变量的平方误差成本方程是:
J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2
其中
f w , b ( x ( i ) ) = w x ( i ) + b f_{w,b}(x^{(i)}) = wx^{(i)} + b fw,b(x(i))=wx(i)+b
回想一下,平方误差成本有一个很好的性质,那就是沿着成本的导数可以找到最小值。

soup_bowl()

输出结果:
在这里插入图片描述

这个成本函数对于线性回归很有效,自然也会考虑将其用于逻辑回归。然而,现在 f w , b ( x ) f_{w,b}(x) fw,b(x)有一个非线性组件,即sigmoid函数: f w , b ( x ( i ) ) = sigmoid ( w x ( i ) + b ) f_{w,b}(x^{(i)}) = \text{sigmoid}(wx^{(i)} + b) fw,b(x(i))=sigmoid(wx(i)+b)让我们在之前的实验例子中使用平方误差成本,现在包括sigmoid函数
这是我们的训练数据:

x_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.longdouble)
y_train = np.array([0,  0, 0, 1, 1, 1], dtype=np.longdouble)
plt_simple_example(x_train, y_train)

输出结果:
在这里插入图片描述

现在,让我们使用平方误差成本得到一个表面图的成本:
J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2
其中
f w , b ( x ( i ) ) = sigmoid ( w x ( i ) + b ) f_{w,b}(x^{(i)}) = \text{sigmoid}(wx^{(i)} + b) fw,b(x(i))=sigmoid(wx(i)+b)

plt.close('all')
plt_logistic_squared_error(x_train, y_train)
plt.show()

输出结果:
在这里插入图片描述

虽然这产生了一个非常有趣的图,但上面的表面图并不像线性回归的“汤碗”那样平滑!
逻辑回归需要一个更适合其非线性特性的成本函数。这从损失函数开始,如下所述。

4.3 逻辑损失函数

逻辑回归使用一个更适合于分类任务的损失函数,其中目标值为0或1,而不是任何数字。

  • 定义说明:在本课程中,使用以下定义:
  • 损失是单个示例与其目标值差异的度量,而
  • 成本是训练集上损失的度量

定义如下:
loss ( f w , b ( x ( i ) ) , y ( i ) ) \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) loss(fw,b(x(i)),y(i))
是单个数据点的成本,即:
loss ( f w , b ( x ( i ) ) , y ( i ) ) = { − log ⁡ ( f w , b ( x ( i ) ) ) if  y ( i ) = 1 log ⁡ ( 1 − f w , b ( x ( i ) ) ) if  y ( i ) = 0 \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = \begin{cases} -\log(f_{w,b}(x^{(i)})) & \text{if } y^{(i)} = 1 \\ \log(1 - f_{w,b}(x^{(i)})) & \text{if } y^{(i)} = 0 \end{cases} loss(fw,b(x(i)),y(i))={log(fw,b(x(i)))log(1fw,b(x(i)))if y(i)=1if y(i)=0
f w , b ( x ( i ) ) f_{w,b}(x^{(i)}) fw,b(x(i))是模型的预测,而 y ( i ) y^{(i)} y(i)是目标值。
f w , b ( x ( i ) ) = g ( w ⋅ x ( i ) + b ) f_{w,b}(x^{(i)}) = g(w \cdot x^{(i)} + b) fw,b(x(i))=g(wx(i)+b)

其中函数 g g gsigmoid函数

这个损失函数的特点是它使用两个单独的曲线。一个用于目标为零的情况( y = 0 y=0 y=0),另一个用于目标为一的情况( y = 1 y=1 y=1)。结合起来,这些曲线提供了损失函数所需的行为,即在预测与目标匹配时为零,在预测与目标不同时迅速增加值。
考虑下面的曲线:

plt_two_logistic_loss_curves()

输出结果:
在这里插入图片描述

结合起来的曲线与平方误差损失的二次曲线相似

  • x轴是 f w , b f_{w,b} fw,b,这是sigmoid函数的输出
  • sigmoid输出严格在0和1之间
    上面的损失函数可以重写,使其更容易实现:
    loss ( f w , b ( x ( i ) ) , y ( i ) ) = ( − y ( i ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = (-y^{(i)} \log(f_{w,b}(x^{(i)})) - (1 - y^{(i)}) \log(1 - f_{w,b}(x^{(i)})) loss(fw,b(x(i)),y(i))=(y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))

这个方程看起来相当复杂。但是当你考虑到 y ( i ) y^{(i)} y(i) 只能有两个值,0和1时,它就不那么令人生畏了。然后我们可以将方程分为两部分:
y ( i ) = 0 y^{(i)}=0 y(i)=0 时,左边的项被消去:
loss ( f w , b ( x ( i ) ) , 0 ) = ( − ( 0 ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − 0 ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) ) = − log ⁡ ( 1 − f w , b ( x ( i ) ) ) \text{loss}(f_{w,b}(x^{(i)}), 0) = (-(0) \log(f_{w,b}(x^{(i)})) - (1-0) \log(1 - f_{w,b}(x^{(i)}))) = -\log(1 - f_{w,b}(x^{(i)})) loss(fw,b(x(i)),0)=((0)log(fw,b(x(i)))(10)log(1fw,b(x(i))))=log(1fw,b(x(i)))
y ( i ) = 1 y^{(i)}=1 y(i)=1时,右边的项被消去:
loss ( f w , b ( x ( i ) ) , 1 ) = ( − ( 1 ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − 1 ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) ) = − log ⁡ ( f w , b ( x ( i ) ) ) \text{loss}(f_{w,b}(x^{(i)}), 1) = (-(1) \log(f_{w,b}(x^{(i)})) - (1-1) \log(1 - f_{w,b}(x^{(i)}))) = -\log(f_{w,b}(x^{(i)})) loss(fw,b(x(i)),1)=((1)log(fw,b(x(i)))(11)log(1fw,b(x(i))))=log(fw,b(x(i)))
有了这个新的逻辑损失函数,我们可以产生一个包含所有示例损失的成本函数。现在,让我们来看看上面考虑的简单示例的成本与参数曲线:

plt.close('all')
cst = plt_logistic_cost(x_train, y_train)

输出结果:
在这里插入图片描述

  • 这条曲线非常适合梯度下降
  • 它没有平台,局部最小值或间断
  • 它不像平方误差那样是一个碗形
  • 成本和成本的日志都被绘制出来,以阐明当成本很小时,曲线有斜率并且继续下降

4.4 总结

  • 确定平方误差损失函数不适用于分类任务
  • 开发并检查适用于分类任务的逻辑损失函数

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于supervisor制作基于环境变量配置的redis
  • MyBatis动态代理和映射器
  • 橙篇AI做产品经理,比Kimi爽多了
  • gpio的使用,---->使用sysfs 控制gpio(第二节)
  • RabbitMQ:MQ的可靠性
  • C#实现数据采集系统-系统优化服务封装
  • 捷行推出2024年8月专属福利活动
  • TDS传感器 - 从零开始认识各种传感器【二十五期】
  • websocket实现简易聊天室
  • Python连接数据库:JDBC不是唯一选择!
  • 什么是接口?
  • 【Pytorch实用教程】PyTorch中的Tensor拼接与组合以及其意义
  • nginx负载均衡、java、tomcat装包
  • 【代码随想录_Day32】 62.不同路径 63. 不同路径 II
  • Python习题 102:计算两个日期之间的天数
  • CentOS 7 修改主机名
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaWeb(学习笔记二)
  • java中具有继承关系的类及其对象初始化顺序
  • Node + FFmpeg 实现Canvas动画导出视频
  • Puppeteer:浏览器控制器
  • ReactNative开发常用的三方模块
  • Spring框架之我见(三)——IOC、AOP
  • 从零开始学习部署
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 事件委托的小应用
  • 写给高年级小学生看的《Bash 指南》
  • 一文看透浏览器架构
  • 阿里云API、SDK和CLI应用实践方案
  • 如何用纯 CSS 创作一个货车 loader
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​520就是要宠粉,你的心头书我买单
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $forceUpdate()函数
  • (12)目标检测_SSD基于pytorch搭建代码
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (rabbitmq的高级特性)消息可靠性
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (实战篇)如何缓存数据
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)原始图像数据和PDF中的图像数据
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET和.COM和.CN域名区别
  • .NET中的Exception处理(C#)