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

回归问题的损失函数

简单来说,​在回归问题中,最常用的损失函数是均方误差(MSE, Mean Squared Error)和平均绝对误差(MAE, Mean Absolute Error)​。它们衡量的都是模型预测值(ŷ)与真实值(y)之间的“距离”或“差异”。

下面我来详细解释它们的意思、区别和用途。

1. 均方误差 (MSE) - L2 Loss​是什么意思?​

均方误差是回归问题中最常见、最基础的损失函数。它的计算方法是:

  1. 1.先计算每一个数据点的预测值与真实值的差(误差)。
  2. 2.将这个差平方​(所以叫“均方”)。
  3. 3.将所有数据点的平方误差加起来,再求平均。

数学公式:​

其中:

  • n是样本数量。
  • yi​是第 i个样本的真实值。
  • y^​i​是模型对第 i个样本的预测值。

直观理解与特点:​

  • 放大大的误差​:因为误差被平方了,所以如果一个预测误差很大(例如误差为10,平方后变成100),它会比多个小误差(例如多个误差为1,平方后还是1)对总损失的贡献大得多。
  • 曲线光滑​:数学性质很好,便于求导(它的导数是一个线性函数),这使得在梯度下降等优化算法中非常高效。
  • 对异常值敏感​:这是它的一个主要缺点。如果数据中存在少数偏离很大的异常值,MSE会变得非常大,模型会为了拟合这些异常值而牺牲对整体数据的拟合效果。

用途​:广泛应用于各种回归问题,是很多模型的默认损失函数。


2. 平均绝对误差 (MAE) - L1 Loss​是什么意思?​

平均绝对误差的计算方法是:

  1. 1.计算每一个数据点的预测值与真实值的差的绝对值
  2. 2.将所有绝对误差加起来,再求平均。

数学公式:​

直观理解与特点:​

  • 线性惩罚误差​:无论误差是1还是10,它对总损失的贡献就是1和10,是线性的关系。不会特别放大大的误差。
  • 对异常值更鲁棒​:正因为它是线性惩罚,所以个别异常值不会像在MSE中那样对损失产生巨大的影响,模型不会轻易被异常值“带偏”。
  • 曲线不光滑​:在零点处不可导(导数突然从-1变为+1),这在优化时可能不如ME高效(但在实际中可以通过次梯度等方法解决)。

用途​:当你认为数据中含有异常值,并且不希望模型过度关注这些异常点时,MAE是一个很好的选择。


对比与总结

特性

均方误差 (MSE)

平均绝对误差 (MAE)

计算方式

误差的平方的平均

误差的绝对值的平均

对异常值

敏感

不敏感(更鲁棒)​

梯度性质

光滑,易于优化

在零点不可导,优化稍复杂

解读

惩罚大的误差非常严厉

对所有误差一视同仁


另一个重要的损失函数:Huber Loss

你可能会问,有没有一个损失函数能结合MSE和MAE的优点呢?答案是有的,这就是 ​Huber Loss

Huber Loss​ 是一个混合损失函数。它在一个阈值 δ(delta)范围内,它的行为像MSE​(曲线光滑,易于优化);当误差超过这个阈值时,它的行为像MAE​(对大的异常值更鲁棒)。

特点​:

  • best of both worlds​:兼具MSE的优化友好和MAE的异常值鲁棒性。
  • 需要超参数​:你需要手动设置一个阈值 δ。

用途​:当数据中明显存在异常值,但你又不愿意完全使用MAE时,Huber Loss是一个非常出色的折中方案。

总结

  • 分类问题的核心是预测概率分布,所以用交叉熵来衡量两个分布之间的差异。
  • 回归问题的核心是预测一个连续值,所以用基于距离的损失函数​(如MSE, MAE)来衡量预测值与真实值的差距。
  • MSE是最常用的,数学性质好,但对异常值敏感。
  • MAE对异常值不敏感,但优化起来稍麻烦。
  • Huber Loss是一个聪明的结合体,在很多情况下能提供更好的性能。

选择哪个损失函数取决于你的数据、模型和你最关心什么。通常可以从MSE开始,如果发现模型效果受异常值影响很大,再尝试MAE或Huber Loss。

http://www.xdnf.cn/news/19193.html

相关文章:

  • C++中的临时对象与移动语义——深入理解与实践
  • 算法复习笔记: 双指针_二分查找篇
  • GitCode全方位解析:开源新星的崛起与极致实战指南
  • 果蔬采摘机器人:自动驾驶融合视觉识别,精准定位,高效作业
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加
  • openEuler2403安装部署PostgreSQL17
  • 接口自动化测试框架
  • jumpserver
  • 虚幻基础:角色动画
  • 【Linux】系统部分——软硬链接动静态库的使用
  • Spring Cloud Gateway 网关(五)
  • java字节码增强,安全问题?
  • MySQL-事务(上)
  • 【分享】如何显示Chatgpt聊天的时间
  • 用Git在 Ubuntu 22.04(Git 2.34.1)把 ROS 2 工作空间上传到全新的 GitHub 仓库 步骤
  • 系统质量属性
  • Git 安装与国内加速(配置 SSH Key + 镜像克隆)
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式
  • 电子战:Maritime SIGINT Architecture Technical Standards Handbook
  • Linux之Shell编程(三)流程控制
  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • 深度学习系列 | Seq2Seq端到端翻译模型
  • Ansible Playbook 调试与预演指南:从语法检查到连通性排查
  • Qt QML注册全局对象并调用其函数和属性
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • PostgreSQL 灾备核心详解:基于日志文件传输的物理复制(流复制)
  • LINUX-网络编程-TCP-UDP
  • 【光照】[光照模型]发展里程碑时间线