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

news2024/9/20 16:44:21

引言

在机器学习中,逻辑损失函数(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 总结

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

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

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

相关文章

经验模态分解 (EMD) 及其在信号降噪中的应用

引言 在信号处理领域,处理非线性和非平稳信号是一个重要的挑战。传统的信号处理方法,如傅里叶变换和小波变换,虽然在处理线性和稳态信号方面表现出色,但在面对复杂信号时往往力不从心。经验模态分解 (Empirical Mode Decompositi…

【IO】 对于fread,fwrite,time_t,fseek等操作,写日志文件,完成文件的拷贝,对bmp图像进行读写操作;

目录 1>写一个日志文件,将程序启动后,每一秒的时间写入到文件中 ​编辑 2>使用fread、fwrite完成两个文件的拷贝 3>实现对bmp图像的读写操作 1>写一个日志文件,将程序启动后,每一秒的时间写入到文件中 1、2024-7…

mysql排查锁等待

排查锁等待步骤 最近线上碰到了几次mysql锁等待的问题,一个事务线程长期占用锁资源,导致其他事务无法获取到锁,为了快速解决问题,我们把线程kill掉了,但后面就定位不到具体的问题了,这里我总结整理一下我的…

【C语言】qsort详解——能给万物排序的神奇函数

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html 🎁代码托管:qsort的使用和模拟实现 a96cdd4 黄灿灿/C语言 - Gitee.com ⚙️操作环境:Visual Studio 2022 目录 一、引言 二、…

java编程练习(初学者)每日练题

一、前言(目前java的就业环境) Java仍然是IT行业中最受欢迎和广泛使用的编程语言之一,特别是在企业级应用、后端服务、金融系统、大型网站、游戏开发等领域。Java岗位的需求依然强劲,体现在多个方面:1.企业级应用&…

Linux通过Docker安装Microsoft Office+RDP远程控制

之前写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章,根据B站的教程安装后,发现有远程控制延迟的问题,比如拖动Office窗口时会延迟,搜狗输入法扫一下就闪退,插入形状后无法调整大小,无法调整图…

十七、【人工智能】【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

热门超声波清洗机有哪些?值得入手的超声波清洗机品牌推荐

相信大家对超声波清洗机并不陌生,每次眼镜脏了,去眼镜店清洗时,店员使用的就是超声波清洗机。这种机器通过超声波的原理,能深入清洁物品内部,清洁效果非常好。相比于手动清洗,超声波清洗机可以在清洁过程中…

PHP健身微信小程序系统源码

🏋️‍♀️健身新潮流!解锁“健身微信小程序”的全方位塑形秘籍 📱开篇:掌中健身房,随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗?是时候告别这些束缚,拥抱“健身微信小程序”…

身在职场,要认清的3个真理,让你把同事远远甩在身后

总有人被一些表面的现象所以蒙蔽,还沾沾自喜以为自己掌握了“真理”。职场上从来不缺“好心人”,总是用所谓的经验来告诫别人,应该如何做事。 大家都在说的事情,就一定是对的?那么为什么大多数人还活不成自己想成为的…

基于“日志审计应用”的 DNS 日志洞察实践

作者:羿莉 (萧羿) 基础背景 DNS(Domain Name System) [ 1] 是任何网络活动的基础。它将易于记忆的域名转换为机器能够理解的 IP 地址。监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。出于合规和安全性的考虑,公司通常要求对网络日志进行存储和…

手撕算法题3 (附源码和思路)

算法 1.有效的括号2.用队列实现栈3.用栈实现队列3.设计循环队列 1.有效的括号 有效的括号 思路 借助栈这样的数据结构,将所有左括号进行入栈,所有右括号与出栈的括号比较,相同循环继续,不同直接返回false。循环结束后检查栈是否为…

模拟队列--C++

用数组来表示队列&#xff0c;怎么表示呢&#xff1f;我们先假设hh为头&#xff0c;tt为尾,当弹出队头的时候我们只需要把hh加一下就连可以了&#xff0c;相反tt一样也可以 #include<iostream> using namespace std; const int N1e510; int a[N],tt-1,hh0;//hh头 tt尾 i…

2.Linux_vi编辑器

打开/创建文件 1、打开/创建文件 指令&#xff1a;vi 文件名 若文件不存在&#xff0c;则新建一个文件&#xff1b;若文件存在&#xff0c;则打开这个文件。 2、打开文件时&#xff0c;指定光标的位置 指令&#xff1a;vi 文件名 行号 注意&#xff1a;""和行号…

吴恩达机器学习-C1W3L1-逻辑回归分类

在本实验中&#xff0c;您将对比回归和分类。 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_common import dlc, plot_data from plt_one_addpt_onclick import plt_one_addpt_onclick plt.style.use(./deeplearning.mplstyle)分类…

JDK 8 升级 17 及 springboot 2.x 升级 3.x 指南

JDK 8 升级 17 简介 从 JDK 8 升级到 JDK 17 的过程中&#xff0c;有几个主要的变化&#xff0c;特别是 Java Platform Module System (JPMS) 的引入&#xff0c;以及一些包路径的调整。以下是与 JDK 17 相关的一些重要变化&#xff1a; Java Platform Module System (JPMS) …

The First项目报告:解读Trading Bot黑马,交易狙击手Banana Gun

Meme币市场的特点是高度投机性和波动性&#xff0c;一个项目可能在短时间内实现巨大涨幅&#xff0c;为投资者带来巨额回报。然而&#xff0c;这种市场也充满了不确定性&#xff0c;许多项目可能只是短暂的炒作&#xff0c;缺乏实际价值或长期发展的潜力。因此&#xff0c;对于…

实验2-4-3 求奇数分之一序列前N项和

//实验2-4-3 求奇数分之一序列前N项和#include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);//输入正整数N&#xff1b;double sum0;for (int i 1; i < n * 2; i 2)/* 在表达式 for (int i 1; i < n * 2; i 2) 中&#x…

设计模式-策略模式的完整代码示例及测试验证

策略模式 什么是策略模式&#xff1f; 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以互换。 策略模式使得算法可以在不影响客户端的情况下发生变化。策略模式主…

研0 冲刺算法竞赛 day26 P1803 凌乱的yyy / 线段覆盖

P1803 凌乱的yyy / 线段覆盖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 考点&#xff1a;线段覆盖 思路&#xff1a;将整体结束时间进行排序&#xff0c;在从头开始遍历计数 代码&#xff1a; #include<iostream> #include <algorithm> using namespace …