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

【机器学习】均方误差(MSE:Mean Squared Error)

均方误差(Mean Squared Error, MSE)是衡量预测值与真实值之间差异的一种方法。在统计学和机器学习中,MSE 是一种常见的损失函数,用于评估模型的预测准确性。

均方误差的定义

假设有一组真实值 y_1, y_2, \ldots, y_n​ 和模型预测的对应值 \hat{y}_1, \hat{y}_2, \ldots, \hat{y}_n​。均方误差的定义如下:

\text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2

其中:

  • y_i 是第 i 个真实值。
  • \hat{y}_i 是第 i 个预测值。
  • n 是数据点的总数。

公式解析

  • 误差:每个预测值与真实值的差异称为误差,记为 y_i - \hat{y}_i
  • 平方:每个误差的平方 (y_i - \hat{y}_i)^2 消除了正负误差的抵消作用,保证误差总量为正。
  • 均值:将所有平方误差求和并取平均,以得到整体误差的平均值,这样可以反映出模型的整体预测误差。

特点

  • 非负性:均方误差总是非负的,因为平方项总是非负。
  • 敏感度:MSE 对于离群值(极大或极小误差)非常敏感,因为平方会放大较大误差的影响。

均方误差的应用

  • 回归分析:在回归问题中,MSE 被用来衡量模型预测值与实际观测值之间的差异,常用于模型的训练和验证。
  • 机器学习模型评估:MSE 是评估回归模型的一种常用指标,比如线性回归、决策树回归、神经网络等。

示例

假设有 3 个真实值 y = [3, -0.5, 2] 和模型的预测值 \hat{y} = [2.5, 0.0, 2],则均方误差为:

\text{MSE} = \frac{1}{3} \left( (3 - 2.5)^2 + (-0.5 - 0.0)^2 + (2 - 2)^2 \right) = \frac{1}{3} (0.25 + 0.25 + 0) = 0.1667

均方误差的优缺点

  • 优点:简单且广泛使用,适合衡量模型误差。
  • 缺点:对异常值非常敏感,可能不适合含有离群值的数据集。

Python 实现代码

以下代码用于计算 MSE 值:

import numpy as npdef mse(y_true, y_pred):return np.mean((y_pred - y_true) ** 2)# 示例
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])result = mse(y_true, y_pred)
print("MSE:", result)

MSE 图解示例

下面的图展示了真实值和预测值之间的差异及其平方误差,用于更直观地理解 MSE。

# Re-import necessary libraries due to session context reset
import numpy as np
import matplotlib.pyplot as plt# Generate some sample data points for MSE visualization
np.random.seed(0)
x = np.linspace(0, 10, 10)
y_true = 2 * x + 1                      # True relationship (e.g., ground truth values)
y_pred = y_true + np.random.normal(0, 3, 10) # Predicted values with random noise# Calculate MSE
mse_value = np.mean((y_true - y_pred) ** 2)# Plotting true vs predicted values with error lines
plt.figure(figsize=(10, 6))
plt.plot(x, y_true, label="True Values", color="blue", marker='o')
plt.plot(x, y_pred, label="Predicted Values", color="red", marker='x')# Add residual lines for MSE (error lines)
for i in range(len(x)):plt.plot([x[i], x[i]], [y_true[i], y_pred[i]], color='gray', linestyle='dotted')# Adding text and labels
plt.xlabel("x")
plt.ylabel("y")
plt.title(f"Illustration of Mean Squared Error (MSE)\nMSE = {mse_value:.2f}")
plt.legend()
plt.grid(True)
plt.show()

上图展示了均方误差(MSE)的计算过程:

  • 蓝色圆点连线 表示真实值 y
  • 红色叉点连线 表示预测值 \hat{y}
  • 灰色虚线 表示每个预测值和真实值之间的误差,即残差(差异)。

这些残差的平方的平均值即为 MSE。本图示帮助理解预测值与真实值之间的差异以及如何计算它们的平方误差。


为什么要使用误差的平方而不直接使用误差的绝对值

使用误差的平方而不直接使用误差的绝对值主要有以下几个原因:

1. 数学性质

  • 可导性:均方误差(MSE)是一个连续且可导的函数,这使得我们在优化算法(如梯度下降法)中能够轻松计算导数和进行更新。而绝对误差(Mean Absolute Error, MAE)在误差为零时不可导,这在某些优化算法中可能会造成困难。

2. 对离群值的敏感性

  • 放大离群值影响:平方误差对较大的误差(离群值)非常敏感,因为它们的平方会显著增加总误差的值。这使得模型能够更好地识别并调整较大的预测错误。在某些应用中,尤其是对大误差特别关注的场景,使用平方误差可以帮助改善模型性能。

3. 简化计算

  • 解析解和算法效率:使用平方误差可以使许多计算过程变得更简单。例如,在最小二乘法中,通过对平方误差进行最小化可以得到解析解,这在处理线性回归等问题时非常有用。

4. 标准正态分布假设

  • 假设分布:在许多统计建模和机器学习的背景下,假设误差是正态分布的是常见的。使用平方误差的损失函数与这种正态分布假设一致,适合于基于最大似然估计的参数估计。

5. 平滑性

  • 函数平滑:平方函数是平滑的,优化过程中的小变化不会导致函数值发生剧烈变化,这使得收敛过程更加稳定和可靠。

6. 对称性

  • 误差符号的处理:平方误差可以消除正负误差的影响,而绝对误差只能给出误差的大小,不能处理多种情况的平衡。

示例对比

假设有三个真实值 y = [2, 3, 5] 和对应的预测值 \hat{y} = [2.5, 2, 4.5],我们来计算每个误差的绝对值和平方。

  1. 计算误差

    • y_1 - \hat{y}_1 = 2 - 2.5 = -0.5
    • y_2 - \hat{y}_2 = 3 - 2 = 1
    • y_3 - \hat{y}_3 = 5 - 4.5 = 0.5
  2. 绝对误差

    • |y_1 - \hat{y}_1| = | -0.5 | = 0.5
    • |y_2 - \hat{y}_2| = | 1 | = 1
    • |y_3 - \hat{y}_3| = | 0.5 | = 0.5

    总绝对误差

    \text{MAE} = \frac{1}{3} \left( 0.5 + 1 + 0.5 \right) = \frac{2}{3} \approx 0.67
  3. 平方误差

    • (y_1 - \hat{y}_1)^2 = (-0.5)^2 = 0.25
    • (y_2 - \hat{y}_2)^2 = (1)^2 = 1
    • (y_3 - \hat{y}_3)^2 = (0.5)^2 = 0.25

    总平方误差

    \text{MSE} = \frac{1}{3} \left( 0.25 + 1 + 0.25 \right) = \frac{1.5}{3} = 0.5

关键点总结

  • 绝对误差是对误差的绝对值的简单累加,不考虑误差的方向(正负)。
  • 平方误差则是对每个误差进行平方处理,从而放大了较大误差的影响,有助于强调模型在较大误差上的表现。

结论

虽然绝对误差在某些情况下也非常有用,尤其是在关注中位数和稳健性时,但均方误差在优化、模型训练和统计推断中有其独特的优势。因此,选择使用平方误差还是绝对误差通常取决于具体问题的需求和模型的特性。

相关文章:

【机器学习】均方误差(MSE:Mean Squared Error)

均方误差(Mean Squared Error, MSE)是衡量预测值与真实值之间差异的一种方法。在统计学和机器学习中,MSE 是一种常见的损失函数,用于评估模型的预测准确性。 均方误差的定义 假设有一组真实值 ​ 和模型预测的对应值 ​。均方误…...

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者。 比如,购物类App通过…...

python | xmltodict,一个非常厉害的 关于XML数据 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:xmltodict,一个非常厉害的 Python 库! 大家好,今天为大家分享一个非常厉害的 Python 库 - xmltodict。 Github地址&am…...

教程:FFmpeg结合GPU实现720p至4K视频转换

将一个 720p 的视频放大编码到 4K,这样的视频处理在很多业务场景中都会用到。很多视频社交、短视频、视频点播等应用,都会需要通过服务器来处理大量的视频编辑需求。 本文我们会探讨一下做这样的视频处理,最低的 GPU 指标应该是多少。利用开源…...

MeterSphere接口自动化-ForEach循环

接口自动化场景:一个接口根据不同的参数取值来运行测试,本场景中只有一个参数来去不同值。举例如下: https:://test.csdn/query?placementList1接口,测试id1,2,3时,断言接口返回的data数据都有返回。(当然…...

ssm074应急资源管理系统+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:应急资源管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本应急资源管理系统…...

怎么对 PDF 添加权限密码或者修改密码-免费软件分享

序言 目前市面上有关PDF处理的工具有很多,不过绝大多数的PDF处理工具都需要付费使用,且很多厂商甚至连试用的机会也不给用户,偶有试用的,其试用版的条件也极为苛刻,比如只能处理前两页,或者只能处理非常小的…...

LVSM: A LARGE VIEW SYNTHESIS MODEL WITH MINIMAL 3D INDUCTIVE BIAS 论文解读

目录 一、概述 二、相关工作 1、新视角合成 2、优化3D表示 3、可泛化的前馈方法 三、LVSM 1、总体结构 2、encoder-decoder 3、decoder-only 4、Loss 一、概述 该论文提出大视角合成模型LVSM,基于Transformer方法,用于场景中或对象级层次从稀…...

7.《双指针篇》---⑦三数之和(中等偏难)

题目传送门 方法一:双指针 1.新建一个顺序表用来返回结果。并排序数组。 2.for循环 i 从第一个数组元素遍历到倒数第三个数。 3.如果遍历过程中有值大于0的则break; 4.定义左右指针,以及target。int left i 1, right n - 1; int target -nums[i];…...

鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)

1、Scroll组件 Scroll组件是一个可滚动的容器组件,用于在子组件的布局尺寸超过父组件尺寸时提供滚动功能。它允许在其内部容纳超过自身显示区域的内容,并通过滚动机制来查看全部内容。这对于显示大量信息(如长列表、长篇文本或大型图像等&…...

mybatis连接PGSQL中对于json和jsonb的处理

pgsql数据库表字段设置了jsonb格式;在java的实体里使用String或者对象转换会一直提示一个错误: Caused by: org.postgresql.util.PSQLException: ERROR: column "xx" is of type jsonb but expression is of type character varying 需要加一…...

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址:https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本:Redis7.4.1 什么是 ACL? ACL(Access Control List),权限控制列表,是 Redis 提供的一种…...

内网学习一:windows基础

工作组介绍 按照不同的计算机功能或工作部门将计算机列入不同的工作组。要是想访问某一个工作组的资源 只需要双击该部门的工作组,就可以看到该组内的所有计算机。 目的:在大型网络中,方便管理员去管理设备 加入工作组 右击计算机图标---…...

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读,并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构: Y…...

使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名

作者:来自 Elastic Jeff Vestal 了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。 在这篇简短的博文中,我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用…...

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统: KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…...

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中,输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin,password100时输出flag 构造反序列化 输入select中&#…...

【c++丨STL】vector模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…...

SQLAlchemy 介绍与实践

postgresql 实践 pydantic 实践 1. SQLAlchemy 介绍 SQLAlchemy 是一个 ORM 框架。SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射(ORM)库。它允许你通过 Python 代码来与关系型数据库交互,而不必直接编写SQL语句。 简单介绍一下…...

docker进行SRS直播服务器搭建

docker进行SRS直播服务器搭建 docker构建参考地址: 地址: https://github.com/ossrs/srs https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \-p 8000:8000/udp -p 10080:10080/udp ossrs/sr…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...