06_在机器学习中,为什么使用均方误差而不使用绝对值误差

2023-10-29

问题背景

为什么机器学习在解决回归问题的时候一般使用的是平方损失(均方损失)


问题分析

损失函数是衡量模型预测结果与真实结果之间的一种距离度量,可以计算出每一个样本预测值与其真实值之间的距离,全部加起来就得到了所谓的损失函数。而距离的度量是没有一个标准的范式的,那为什么机器学习在处理回归任务的时候更倾向于用均方误差呢?我们先来看一看求解普通回归任务时候的一个目标函数,若采用预测值与真实值之间的绝对值来度量距离,公式如下:
( ω , b ) = a r g m i n ( ω , b ) ∑ i = 1 m ∣ f ( x i ) − y i ∣ (\omega^, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}\left|{f(x_i)-y_i}\right| (ω,b)=argmin(ω,b)i=1mf(xi)yi
若采用均方误差,公式如下:
( ω , b ) = a r g m i n ( ω , b ) ∑ i = 1 m ( f ( x i ) − y i ) 2 (\omega^, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}({f(x_i)}-y_i)^2 (ω,b)=argmin(ω,b)i=1m(f(xi)yi)2 其中: f ( x i ) = ω x i + b f(x_i) = \omega x_i + b f(xi)=ωxi+b 即预测值, y i y_i yi 为真实值, m m m 为样本总数, ω \omega ω b b b 为要求解的参数。

原因总结

我们的目标是通过训练得出在这个训练集上面表现得最好的参数 w 和 b w和b wb,如何得到最好的 w 和 b w和b wb呢?我们可以通过求导,对 w 和 b w和b wb进行求导,并令其导数为0,当我们使用绝对值误差的时候,我们就会遇到两个问题:

  • 使用绝对值误差的时候,会出现0点不可导问题
  • 需要判断 f ( x i ) − y i f(x_i)-y_i f(xi)yi的正负号

另外的原因:

  • 均方误差对预测误差的强度进行了平方,这样可以放大误差中的大值,并以指数方式惩罚异常值,因而在处理离群值或异常值时更为鲁棒。
  • MSE 的梯度计算相比 MAE 更为简单和稳定

综上所述,MSE相较于MAE在绝大部分场景都是具有较大优势的,所以MSE在机器学习的各种任务中更受欢迎

测试用例

from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

# Generate data
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0, 2, 8]

# Calculate MSE and MAE
mse = mean_squared_error(y_true, y_pred)
mae = mean_absolute_error(y_true, y_pred)

print("MSE: ", mse)
print("MAE: ", mae)

在实际的应用中,由于均方误差对于离群点更具鲁棒性,所以通常在数据中存在离群点的情况下,MSE 会比 MAE 更优秀,可以看到,对于真实标签为负数的情况,使用 MAE 的误差度量方法产生了一个较大的误差值(0.5),而使用 MSE 的误差度量方法产生了一个较小的误差值(0.375)。因此,MSE 在该测试用例中表现更优秀。

拓展

均方误差(MSE)作为损失函数的一个重要特点,即其基于高斯分布下的最大似然估计问题。


在回归问题中,我们的目标是预测一些连续型变量,使其尽可能地接近真实值。在这个过程中,模型的预测与真实标签之间会产生一些误差,我们需要度量这个误差的程度,并利用这个度量来优化模型的预测。

均方误差是一个常见的误差度量方法,它度量的是预测值与真实值之间的差异,并且将这个差异平方后求取平均值。均方误差的理论基础是假设误差服从高斯分布。也就是说,我们假设预测值的误差服从正态分布,并且使用均方误差最小化误差,可以从概率最大化的角度来认为我们假定预测值的误差是正常的,这是一个典型的高斯分布下的最大似然估计问题。

简单来说,均方误差的理论基础是对误差的统计分布进行假设,并基于最大似然原则来确定误差分布的参数。这使得均方误差在许多回归问题中都能够提供准确的误差度量,并能够用作模型的损失函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

06_在机器学习中,为什么使用均方误差而不使用绝对值误差 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将

随机推荐

  • router-view上添加key和data-key的作用

    key属性 用于提供对每个渲染的组件的唯一标识 当路由切换时 如果
  • 2022年12月-电子学会青少年等级考试C语言(一级)真题与解析

    2022年12月软件编程 C语言 等级考试 一级 分数 100 题数 5 时间限制 1000 ms 内存限制 65536 kB 1 加一 题目描述 输入一个整数x 输出这个数加1后的值 即x 1的值 输入 一个整数x 0 x 1000 输出
  • C/S、B/S架构详解,一文带你搞懂

    一 CS BS架构定义 CS架构 Client Server Architecture 是一种分布式计算模型 其中客户端和服务器之间通过网络进行通信 在这种架构中 客户端负责向服务器发送请求 并接收服务器返回的响应 服务器则负责处理客户端的
  • IDEA中 @override报错的解决方法

    IDEA中 override报错的解决方法 参考文章 1 IDEA中 override报错的解决方法 2 https www cnblogs com printN p 6870036 html 备忘一下
  • ETL正则匹配汇总

    一 正则匹配全部汇总 1 匹配中文 u4e00 u9fa5 2 英文字母 a zA Z 3 数字 0 9 4 匹配中文 英文字母和数字及下划线 u4e00 u9fa5 a zA Z0 9 同时判断输入长度 u4e00 u9fa5 a zA
  • 分布式事务有这一篇就够了!

    分布式事务 文章目录 分布式事务 1 基础概念 1 1 什么是事务 1 2 本地事务 1 3 分布式事务 1 4 分布式事务产生的情景 2 分布式事务基础理论 2 1 CAP理论 2 1 1 理解CAP C Consistency A Av
  • 盒子的宽度超出元素的盒子的解决办法box-sizing

    padding用在哪里超出的 box sizing就放在哪 盒子的宽度超出元素的盒子的解决办法 未修改的代码与样式 rpx与px都是单位 如果不了解就当px处理 1 calc 减轻相当于两侧的padding值 不推荐 了解 2 border
  • 计算机专业毕业设计选题原则

    计算机技术变化很快 新技术新观念每年都会涌现很多 计算机专业的毕业设计 是一次非常好的把理论知识结合实践的好机会 所以 选好自己的毕业设计题目 相当重要 我们建议 你要结合自己的职业理想来做 1 如果你将来想从事信息系统类开发 建议选择C
  • SpringBoot项目整合RabbitMQ

    1 简介 消息队列 Message Queue 是分布式系统中常用的组件 它允许不同的应用程序之间通过发送和接收消息进行通信 Spring Boot提供了简单且强大的方式来整合消息队列 其中包括RabbitMQ ActiveMQ Kafka
  • openwrt控制天翼网关定时重启

    由于天翼网关不支持定时重启 另外app里设置定时重启也没有作用 所以查找了一些相关工具和用法 再结合前辈的经验 参考的博客网址 自己最终把该功能实现了 首先需要用winscp登陆到刷了openwrt的路由器中 然后在 usr bin 目录下
  • CC2530学习(一)环境配置

    CC2530F256是一款将各种丰富的功能系统地集成到一片LSI Large Scale Integrated circuit 大规模集成电路 的片上系统 System on Chip 简称SoC 内嵌增强型51内核的单片机 芯片后缀256
  • docker安装redis(镜像安装)

    目录 安装 1 1 安装redis镜像 2 查看redis镜像 3 运行容器 4 查看容器安装成功 安装2 1 安装redis镜像 其中latest是镜像版本 根据程序需要 选择适合的版本 2 新建data和conf两个文件夹 位置随意 3
  • frida native hook简单demo

    记录frida hook native的笔记 整体代码如下 Java perform function console log Inside java perform function function jstring2Str jstrin
  • Basic Level 1027 打印沙漏 (20分)

    题目 本题要求你写个程序把给定的符号打印成沙漏的形状 例如给定17个 要求按下列格式打印 所谓 沙漏形状 是指每行输出奇数个符号 各行符号中心对齐 相邻两行符号数差2 符号数先从大到小顺序递减到1 再从小到大顺序递增 首尾符号数相等 给定任
  • pacmaker与corosync实现高可用集群

    一 pacmaker与corosync的简单介绍 1 pacmaker pacemaker是一个开源的高可用资源管理器 CRM 位于HA集群架构中资源管理 资源代理 RA 这个层次 它不能提供底层心跳信息传递的功能 要想与对方节点通信需要借
  • gtest学习笔记(二)gtest自带的sample1---Func函数使用

    文章目录 前言 源码学习 utest语法 运行 前言 第一章中已经编译出自带的sample例子 在build googletest目录下可以看到sample的各种例子的可执行程序 Google Test 附带了10个单元测试用例 难度由浅及
  • Android logcat解析与问题分析

    logcat是Android中一个命令行工具 可以用于得到程序的log信息 一 logcat 结构 1 这个结构在AS或者exlipse上面看的更清楚 二 logcat中地址反差backtrace 当程序崩溃的时候会在loacat中打印出b
  • 最左前缀原则、覆盖索引、索引下推、联合索引的概念

    最左前缀原则 什么是最左匹配原则 举个例子 比如有abc组成的联合索引 能走的索引可以是a ab abc 不能是bc这样的 如果条件上先b后c 那么就是全表查询 不走索引了 可以使联合索引的最左边的N个字段 也可以是字符串的前m个字符 覆盖
  • 用matlab写一段时间序列预测

    我可以为你提供一些指引 但具体的实现方法还需要你自己去探索 首先 你可以使用Matlab的时间序列函数来分析数据 从而找出特征 这些特征可以帮助预测未来的数据 其次 你可以使用一些机器学习技术 如回归分析 贝叶斯网络和神经网络 来构建时间序
  • 06_在机器学习中,为什么使用均方误差而不使用绝对值误差

    问题背景 为什么机器学习在解决回归问题的时候一般使用的是平方损失 均方损失 问题分析 损失函数是衡量模型预测结果与真实结果之间的一种距离度量 可以计算出每一个样本预测值与其真实值之间的距离 全部加起来就得到了所谓的损失函数 而距离的度量是没