5个回归损失函数,你知道几个?

机器学习(一)逻辑回归(损失函数、决策边界) 逻辑回归 LogisticRegression一、什么是逻辑回归二、逻辑回归的损失函数三、逻辑回归损失函数的梯度四、实现逻辑回归算法五、决策边界六、在逻辑回归中使用多项式特征七、sklearn中的逻辑回归八、OvR与OvO 一、什么是逻辑回归 逻辑回归:解决分类问题,将样本的特征和样本发生的概率联系起来 逻辑回归的函数y^=f(x)\hat{y} = f(x)y^​=f(x),对于线性回归来说,可变换为y^=θT⋅xb\hat{y} = θ^T \cdot{x_b}y^​=θT⋅xb​,y^\hat{y}y 阅读详情

公众号:统计网

“损失函数”是机器学习优化中至关重要的一部分。L1、L2损失函数相信大多数人都早已不陌生。那你了解Huber损失、Log-Cosh损失、以及常用于计算预测区间的分位数损失么?这些可都是机器学习大牛最常用的回归损失函数哦!

机器学习中所有的算法都需要最大化或最小化一个函数,这个函数被称为“目标函数”。其中,我们一般把最小化的一类函数,称为“损失函数”。它能根据预测结果,衡量出模型预测能力的好坏。

在实际应用中,选取损失函数会受到诸多因素的制约,比如是否有异常值、机器学习算法的选择、梯度下降的时间复杂度、求导的难易程度以及预测值的置信度等等。因此,不存在一种损失函数适用于处理所有类型的数据。这篇文章就讲介绍不同种类的损失函数以及它们的作用。

损失函数大致可分为两类:分类问题的损失函数和回归问题的损失函数。在这篇文章中,我将着重介绍回归损失。

本文出现的代码和图表我们都妥妥保存在这儿了:https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/05_Loss_Functions.ipynb

640?wx_fmt=other

分类、回归问题损失函数对比

01

均方误差

640?wx_fmt=other

均方误差(MSE)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和,公式如图。

下图是MSE函数的图像,其中目标值是100,预测值的范围从-10000到10000,Y轴代表的MSE取值范围是从0到正无穷,并且在预测值为100处达到最小。

640?wx_fmt=other

MSE损失(Y轴)-预测值(X轴)

02

平均绝对值误差 L1损失

640?wx_fmt=other

平均绝对误差(MAE)是另一种用于回归模型的损失函数。MAE是目标值和预测值之差的绝对值之和。其只衡量了预测值误差的平均模长,而不考虑方向,取值范围也是从0到正无穷(如果考虑方向,则是残差/误差的总和——平均偏差(MBE))。

640?wx_fmt=other

MAE损失(Y轴)-预测值(X轴)

03

MSE与MAE的比较

简单来说,MSE计算简便,但MAE对异常点有更好的鲁棒性。下面就来介绍导致二者差异的原因。

训练一个机器学习模型时,我们的目标就是找到损失函数达到极小值的点。当预测值等于真实值时,这两种函数都能达到最小。

下面是这两种损失函数的python代码。你可以自己编写函数,也可以使用sklearn内置的函数。

<pre >	
true: Array of true target variable	
pred: Array of predictions	
def mse(true, pred):	
return np.sum((true - pred)**2)	
def mae(true, pred):	
return np.sum(np.abs(true - pred))	
also available in sklearn	
from sklearn.metrics import mean_squared_error	
from sklearn.metrics import mean_absolute_error	
</pre>

下面让我们观察MAE和RMSE(即MSE的平方根,同MAE在同一量级中)在两个例子中的计算结果。第一个例子中,预测值和真实值很接近,而且误差的方差也较小。第二个例子中,因为存在一个异常点,而导致误差非常大。

640?wx_fmt=other

左图:误差比较接近 右图:有一个误差远大于其他误差

从图中可以知道什么?应当如何选择损失函数?

MSE对误差取了平方(令e=真实值-预测值),因此若e>1,则MSE会进一步增大误差。如果数据中存在异常点,那么e值就会很大,而e²则会远大于|e|。

直观上可以这样理解:如果我们最小化MSE来对所有的样本点只给出一个预测值,那么这个值一定是所有目标值的平均值。但如果是最小化MAE,那么这个值,则会是所有样本点目标值的中位数。众所周知,对异常值而言,中位数比均值更加鲁棒,因此MAE对于异常值也比MSE更稳定。

然而MAE存在一个严重的问题(特别是对于神经网络):更新的梯度始终相同,也就是说,即使对于很小的损失值,梯度也很大。这样不利于模型的学习。为了解决这个缺陷,我们可以使用变化的学习率,在损失接近最小值时降低学习率。

而MSE在这种情况下的表现就很好,即便使用固定的学习率也可以有效收敛。MSE损失的梯度随损失增大而增大,而损失趋于0时则会减小。这使得在训练结束时,使用MSE模型的结果会更精确。

640?wx_fmt=other

根据不同情况选择损失函数

如果异常点代表在商业中很重要的异常情况,并且需要被检测出来,则应选用MSE损失函数。相反,如果只把异常值当作受损数据,则应选用MAE损失函数。

这里L1损失和L2损失只是MAE和MSE的别称。总而言之,处理异常点时,L1损失函数更稳定,但它的导数不连续,因此求解效率较低。L2损失函数对异常点更敏感,但通过令其导数为0,可以得到更稳定的封闭解。

二者兼有的问题是:在某些情况下,上述两种损失函数都不能满足需求。例如,若数据中90%的样本对应的目标值为150,剩下10%在0到30之间。那么使用MAE作为损失函数的模型可能会忽视10%的异常点,而对所有样本的预测值都为150。

这是因为模型会按中位数来预测。而使用MSE的模型则会给出很多介于0到30的预测值,因为模型会向异常点偏移。上述两种结果在许多商业场景中都是不可取的。

这些情况下应该怎么办呢?最简单的办法是对目标变量进行变换。而另一种办法则是换一个损失函数,这就引出了下面要讲的第三种损失函数,即Huber损失函数。

Huber损失,平滑的平均绝对误差

Huber损失对数据中的异常点没有平方误差损失那么敏感。它在0也可微分。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数δ(delta)来控制。当Huber损失在[0-δ,0+δ]之间时,等价为MSE,而在[-∞,δ]和[δ,+∞]时为MAE。

640?wx_fmt=other

640?wx_fmt=other

Huber损失(Y轴)与预测值(X轴)图示。真值取0

这里超参数delta的选择非常重要,因为这决定了你对与异常点的定义。当残差大于delta,应当采用L1(对较大的异常值不那么敏感)来最小化,而残差小于超参数,则用L2来最小化。

04

为何要使用Huber损失?

使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。

在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。

05

Log-Cosh损失

Log-cosh是另一种应用于回归问题中的,且比L2更平滑的的损失函数。它的计算方式是预测误差的双曲余弦的对数。

640?wx_fmt=other

640?wx_fmt=other

Log-cosh损失(Y轴)与预测值(X轴)图示。真值取0

优点:对于较小的x,log(cosh(x))近似等于(x^2)/2,对于较大的x,近似等于abs(x)-log(2)。这意味着‘logcosh’基本类似于均方误差,但不易受到异常点的影响。它具有Huber损失所有的优点,但不同于Huber损失的是,Log-cosh二阶处处可微。

为什么需要二阶导数?许多机器学习模型如XGBoost,就是采用牛顿法来寻找最优点。而牛顿法就需要求解二阶导数(Hessian)。因此对于诸如XGBoost这类机器学习框架,损失函数的二阶可微是很有必要的。

640?wx_fmt=other

XgBoost中使用的目标函数。注意对一阶和二阶导数的依赖性

但Log-cosh损失也并非完美,其仍存在某些问题。比如误差很大的话,一阶梯度和Hessian会变成定值,这就导致XGBoost出现缺少分裂点的情况。

Huber和Log-cosh损失函数的Python代码:

06
分位数损失

在大多数现实世界预测问题中,我们通常希望了解预测中的不确定性。清楚预测的范围而非仅是估计点,对许多商业问题的决策很有帮助。

当我们更关注区间预测而不仅是点预测时,分位数损失函数就很有用。使用最小二乘回归进行区间预测,基于的假设是残差(y-y_hat)是独立变量,且方差保持不变。

一旦违背了这条假设,那么线性回归模型就不成立。但是我们也不能因此就认为使用非线性函数或基于树的模型更好,而放弃将线性回归模型作为基线方法。这时,分位数损失和分位数回归就派上用场了,因为即便对于具有变化方差或非正态分布的残差,基于分位数损失的回归也能给出合理的预测区间。

下面让我们看一个实际的例子,以便更好地理解基于分位数损失的回归是如何对异方差数据起作用的。

****分位数回归与最小二乘回归****

640?wx_fmt=other

左:b/wX1和Y为线性关系。具有恒定的残差方差。

右:b/wX2和Y为线性关系,但Y的方差随着X2增加。(异方差)

橙线表示两种情况下OLS的估值

640?wx_fmt=other

分位数回归。虚线表示基于0.05和0.95分位数损失函数的回归

附上图中所示分位数回归的代码:

https://github.com/groverpr/Machine-Learning/blob/master/notebooks/09_Quantile_Regression.ipynb

****理解分位数损失函数****

如何选取合适的分位值取决于我们对正误差和反误差的重视程度。损失函数通过分位值(γ)对高估和低估给予不同的惩罚。例如,当分位数损失函数γ=0.25时,对高估的惩罚更大,使得预测值略低于中值。

640?wx_fmt=other

γ是所需的分位数,其值介于0和1之间。

640?wx_fmt=other

分位数损失(Y轴)与预测值(X轴)图示。Y的真值为0

这个损失函数也可以在神经网络或基于树的模型中计算预测区间。以下是用Sklearn实现梯度提升树回归模型的示例。

640?wx_fmt=other

使用分位数损失(梯度提升回归器)预测区间

上图表明:在sklearn库的梯度提升回归中使用分位数损失可以得到90%的预测区间。其中上限为γ=0.95,下限为γ=0.05。

07
对比研究

为了证明上述所有损失函数的特点,让我们来一起看一个对比研究。首先,我们建立了一个从sinc(x)函数中采样得到的数据集,并引入了两项人为噪声:高斯噪声分量ε〜N(0,σ2)和脉冲噪声分量ξ〜Bern(p)。

加入脉冲噪声是为了说明模型的鲁棒效果。以下是使用不同损失函数拟合GBM回归器的结果。

640?wx_fmt=other

连续损失函数:

A:MSE损失函数;
B:MAE损失函数;
C:Huber损失函数;
D:分位数损失函数。将一个平滑的GBM拟合成有噪声的sinc(x)数据的示例:
E:原始sinc(x)函数;
F:具有MSE和MAE损失的平滑GBM;
G:具有Huber损失的平滑GBM,且δ={4,2,1};
H:具有分位数损失的平滑的GBM,且α={0.5,0.1,0.9}。

仿真对比的一些观察结果:

  • MAE损失模型的预测结果受脉冲噪声的影响较小,而MSE损失函数的预测结果受此影响略有偏移。

  • Huber损失模型预测结果对所选超参数不敏感。

  • 分位数损失模型在合适的置信水平下能给出很好的估计。

最后,让我们将所有损失函数都放进一张图,我们就得到了下面这张漂亮的图片!它们的区别是不是一目了然了呢~

640?wx_fmt=other

常见回归和分类损失函数比较 文章转自知乎作者wdmad,更多内容建议阅读原文:https://zhuanlan.zhihu.com/p/36431289 本博文属于阅读笔记,融合了个人观点。 1. 损失函数 损失函数的一般表示为L(y,f(x)),用以衡量真实值 y和预测值 f(x)之间不一致的程度,一般越小越好。为了便于不同损失函数的比较,常将其表示为单变量的函数,在回归问题中这个变量为[y-f(x)] :残差表... 阅读详情

相关推荐

边界框回归的魔法:揭秘精准高效的MPDIoU损失函数

边界框回归(BBR)已广泛应用于目标检测和实例分割,这是目标定位的重要步骤。然而,现有的大多数边界框回归损失函数在预测框与地面真相框具有相同长宽比但宽度和高度值完全不同的情况下无法优化。为了解决上述问题,我们充分探索了水平矩形的几何特征,并基于最小点距离提出了一种新颖的边界框相似性比较度量MPDIoU,该度量包含了现有损失函数中考虑的所有相关因素,即重叠或非重叠区域、中心点距离以及宽度和高度偏差,同时简化了计算过程。在此基础上,我们提出了基于MPDIoU的边界框回归损失函数LMPDIoUL。

m0_47867638的博客 5234

【损失函数】深度学习回归任务中你必须了解的三种损失函数,绝对误差损失(L1 Loss、MAE)均方误差损失(L2 Loss、MSE)以及平滑L1损失(Huber Loss)(2024最新整理)

是预测值和真实值之差的绝对值的总和。其中,是样本数量,是第个样本的真实值,是第个样本的预测值。

Next_SummerAgain的博客 1万+

回归损失函数

回归损失函数也可以做为评价指标使用,但是有没有想过数据分布与损失函数之间的关系呢!。我曾经遇到两个问题,类似正太分布与非正太分布损失函数。比如下面: 0的值异常多。可以采用非正太损失函数,使用tweedie loss、possion loss等损失函数替代mse。这些lgb、xgb都可调参数。

qq_28611929的博客 2072

回归模型三种损失函数

无论在机器学习还是深度领域中,损失函数都是一个非常重要的知识点。损失函数(Loss Function)是用来估量模型的预测值 f(x) 与真实值 y 的不一致程度。我们的目标就是最小化损失函数,让 f(x) 与 y 尽量接近。通常可以使用梯度下降算法寻找函数最小值。 损失函数有许多不同的类型,没有哪种损失函数适合所有的问题,需根据具体模型和问题进行选择。一般来说,损失函数大致可以分成两类:回归(Regression)和分类(Classification)。今天,红色石头将要总结回归问题中常用的 3 .

张欣的博客 1万+

logistic回归损失函数与梯度下降

逻辑回归中,假设函数hypothesis hθ(x)hθ(x)h_\theta(x)为: hθ(x)=g(θTx)=11+e−θTx=g(θTx+b)hθ(x)=g(θTx)=11+e−θTx=g(θTx+b)h_\theta(x)=g(\theta^\mathrm{T}x)=\frac{1}{1+e^{-\theta^\mathrm{T}x}}=g(\theta^\mathrm{T}x+b) ...

yaochuyi的博客 7160

损失函数(Loss Function)一文详解-回归问题常见损失函数Python代码实现+计算原理解析

损失函数无疑是机器学习和深度学习效果验证的核心检验功能,用于评估模型预测值与实际值之间的差异。我们学习机器学习和深度学习或多或少都接触到了损失函数,但是我们缺少细致的对损失函数进行分类,或者系统的学习损失函数在不同的算法和任务中的不同的应用。因此有必要对整个损失函数体系有个比较全面的认识,方便以后我们遇到各类功能不同的损失函数有个清楚的认知,而且一般面试以及论文写作基本都会对这方面的知识涉及的非常深入。故本篇文章将结合实际Python代码实现损失函数功能,以及对整个损失函数体系进行深入了解。

master_hunter的博客 1万+

机器学习大牛最常用的5个回归损失函数,你知道几个?

http://baijiahao.baidu.com/s?id=1603857666277651546&wfr=spider&for=pc 编译:Apricock、睡不着的iris、JonyKai、钱天培 “损失函数”是机器学习优化中至关重要的一部分。L1、L2损失函数相信大多数人都早已不陌生。那你了解Huber损失、Log-Cosh损失、以及常用于计算预测区间的分...

weixin_30633949的博客 167

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

Sklearn 损失函数如何应用到_机器学习大牛最常用的5个回归损失函数,你知道几个?...

“损失函数”是机器学习优化中至关重要的一部分。L1、L2损失函数相信大多数人都早已不陌生。那你了解Huber损失、Log-Cosh损失、以及常用于计算预测区间的分位数损失么?这些可都是机器学习大牛最常用的回归损失函数哦!机器学习中所有的算法都需要最大化或最小化一个函数,这个函数被称为“目标函数”。其中,我们一般把最小化的一类函数,称为“损失函数”。它能根据预测结果,衡量出模型预测能力的好坏。在实际...

weixin_39904268的博客 215

易智联LM401模块学习(四)——双串口收发

串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。

weixin_46046597的博客 991

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面: 1.  在 dialog 里面 加一个 list 列表 2. 然后 绑定这个列表 哈哈...

mfreesky的专栏 2170

机器学习里面的基函数_机器学习大牛最常用的5个回归损失函数,你知道几个?...

“损失函数”是机器学习优化中至关重要的一部分。L1、L2损失函数相信大多数人都早已不陌生。那你了解Huber损失、Log-Cosh损失、以及常用于计算预测区间的分位数损失么?这些可都是机器学习大牛最常用的回归损失函数哦!机器学习中所有的算法都需要最大化或最小化一个函数,这个函数被称为“目标函数”。其中,我们一般把最小化的一类函数,称为“损失函数”。它能根据预测结果,衡量出模型预测能力的好坏。在实际...

weixin_39747383的博客 155

Cadence HDL原理图库避坑指南:从Excel导入引脚到解决‘V- V+’报错(附FPGA实例)

本文详细介绍了Cadence HDL原理图库的高效构建与排错方法,重点讲解如何从Excel智能导入引脚数据并优化FPGA封装设计。通过数据预处理、智能导入和深度排错三个关键阶段,帮助工程师避免常见错误如‘V- V+’报错,提升设计效率和准确性。

weixin_28739079的博客 236

YOLOV5损失函数

classification loss 分类损失localization loss 定位损失,预测框和真实框之间的误差confidence loss 置信度损失,框的目标性总损失函数为三者的和 classification loss + localization loss + confidence loss也可以在三个损失前乘上不同的权重系数,已达到不同比重的结果。在yolov5中的置信度损失和分类损失用的是二元交叉熵来做的,而定位损失是用的CIOU Loss来做的在传统的多分类任务中,一般使用的是soft

qq_35326529的博客 2万+

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1700

回归问题中5种常用损失函数

机器学习的所有算法都需要最大化或者最小化目标函数,在最小化场景下,目标函数又称损失函数。 实际应用中,选取损失函数需要从多个角度考虑,如是否有异常值、算法、求导难度、预测值的置信度等等。 损失函数可分为两大类,分类问题的损失函数和回归问题的损失函数。 本文将对比分析回归问题中最常用的5个损失函数。 1、均方误差(又称MSE、L2损失) 回归问题中最常见的损失函数。如果对所有样本点只给出一个预测...

sjokes的博客 3万+

DNN加速器脉动阵列轻量级瞬时故障检测

本文系统综述了面向深度神经网络(DNN)脉动阵列加速器的轻量级瞬时故障检测技术。通过分析比较算法级校验(ABFT)、数值异常监测(剪裁、中值滤波等)、硬件编码检错(AN码、剩余码)以及选择性冗余等方案,指出这些方法能以5%-10%的开销实现对权重和激活比特翻转的高效检测,远低于传统ECC/冗余计算的成本。研究显示,结合多种轻量技术可构建多层防护体系,在保障推理可靠性的同时保持加速器的高性能特性。该成果为安全关键领域的DNN加速器设计提供了重要参考。

欢迎交流! 1074

logistic回归分类与softmax回归

目录 Logistic回归 逻辑回归的定义式: 损失函数 梯度下降 Logistic回归防止过拟合: Softmax回归: loss函数 逻辑回归与Softmax回归的联系 与神经网络的关系 logistic回归(多分类)和softmax的关系: YOLOV3中的逻辑分类应用 Logistic回归 Logistic回归(LR):是一种常用的处理二分类问题的模型。 二分类...

奔跑的小仙女 9606

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 977

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【深度学习】逻辑回归及其损失函数的理解

这里写自定义目录标题二分类与逻辑回归新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 二分类与逻辑回归 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下

qq_39876147的博客 8889

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 马云正式卸任!发表“退休”感言!
下一篇: 爬取6874条数据,告诉你数据分析师的薪资待遇~!
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值