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

news2024/11/12 16:05:23

均方误差(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 np

def 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

关键点总结

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

结论

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

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

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

相关文章

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中,Pinia已被内置,无需额外安装即可直接使用(Vue2版本则内置了Vuex)。 HBuilder X项目:直接使用,无需安装。CLI项目:需手动安装,执行yarn add pinia…

Typora导出pdf手动分页和设置字体样式

手动分页 <div style"page-break-after: always;"></div>鼠标点击代码才会显示&#xff0c;不点击会隐藏。导出pdf时&#xff0c;该位置会分页 设置字体大小、加粗、居中、空格 <p style"font-size:30px; font-weight: bold; text-align: cen…

Linux相关概念和易错知识点(19)(HDD、Block group)

目录 1.HDD &#xff08;1&#xff09;HDD存储描述 &#xff08;2&#xff09;HDD结构图 &#xff08;3&#xff09;磁盘管理的分治思想 &#xff08;4&#xff09;硬盘中文件系统的整体划分图 2.Block group &#xff08;1&#xff09;文件管理 ①文件属性的存储 ②in…

【跟着官网学技术系列之Java】第1天之Java开胃菜

前言 在当今信息爆炸的时代&#xff0c;拥有信息检索的能力很重要。 作为一名软件工程师&#xff0c;遇到问题&#xff0c;你会怎么办&#xff1f;带着问题去搜索引擎寻找答案&#xff1f;亦或是去技术官网&#xff0c;技术社区去寻找&#xff1f; 根据个人经验&#xff0c;一…

网络自动化03:简单解释send_config_set方法并举例

目录 拓扑图设备信息 netmiko涉及方法send_config_set()方法的简单示例代码输出结果代码解释导入模块配置信息config_device_interface_description 函数主程序块总结 send_config_set方法参数&#xff1a;1. enter_config_mode2. config_commands3. enter_config_mode4. error…

vue2,vue3,uniapp,小程序实现前端url生成二维码

最近遇到一个项目&#xff0c;api返回url地址&#xff0c;前端通过地址生成二维码。 话不多说直接上代码&#xff0c;亲测有效&#xff0c;希望能帮助大家&#xff0c;同时如果有更好的方法希望大家能够分享 1、第一步&#xff0c;在项目的utils文件夹下面创建一个weapp-qrco…

openlayers实现图层裁剪,只展示关心区域,抹掉无关区域,“抠”地图

先给大家看一下效果: 很久没有用ol了,今天突发奇想,想完成一下在ol中如何实现图层裁剪,抹掉消除非关心区域的地图的操作。过去写了有关于遮罩和掩膜的教程,现在看来好像有点低级,不足以满足需求,于是我们重新来做一下。 首先要知道ol官方是支持canvas参数传递的,就是说…

SpringBoot框架:共享汽车管理的创新工具

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 共享汽车管理系统的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 投放地区管理 系统管理员可以对投放地区信息进行添加&#…

初学者指南:用例图——开启您的软件工程之旅

目录 背景&#xff1a; 基本组成&#xff1a; 关联&#xff08;Assciation&#xff09;&#xff1a; 包含&#xff08;Include&#xff09;&#xff1a; 扩展&#xff08;Extend&#xff09;&#xff1a; 泛化&#xff08;Inheritance&#xff09;&#xff1a; 完整银行…

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…

安信金业:3d黄金跟999足金的区别

黄金饰品&#xff0c;作为一种永恒的象征&#xff0c;一直备受人们的喜爱。随着工艺技术的不断革新&#xff0c;黄金饰品也呈现出多元化的风格。近年来&#xff0c;3D硬金逐渐走入人们的视野&#xff0c;与传统的999足金形成了鲜明的对比。那么&#xff0c;3D硬金和999足金究竟…

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计&#xff0c;使得Mac book有着非常棒的使用体验&#xff0c;但是在Mac电脑的使用时间过长时&#xff0c;电脑也会出现响应速度变慢或应用程序崩溃的情况&#xff0c;当发生的时候却不知道什么原因导致的&#xff0c;想要查询电脑…

c语言其实很简单----【数组】

TOC 1.输入10个学生成绩&#xff0c;计算及格人数&#xff0c;平均成绩&#xff0c;总成绩。 #include<stdio.h> int main(){float score[10];int i ,cut;float avar0.0,sum0.0;for(i0;i<10;i)scanf("%f",&score[i]);//输入10个学生的成绩cut0;for(i0…

音视频入门基础:H.264专题(22)——通过FFprobe显示H.264裸流每个packet的信息

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

centos7的maven配置

首先进入conf配置文件夹下的setting.xml 要改两个地方 第一&#xff1a;设置镜像源 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>c…

【优选算法 — 滑动窗口】滑动窗口小专题(一)

长度最小的子数组 长度最小的子数组 题目解析&#xff1a; 对于示例一 对于剩下两种示例&#xff1a; 解法一&#xff1a;暴力枚举 把所有的子数组全部枚举出来&#xff0c;并且枚举出的每一个子数组求和判断&#xff0c;返回长度最小的子数组&#xff1b; 时间复杂度 &…

从零创建vue+elementui+sass+three.js项目

初始化&#xff1a; vue init webpack projectnamecd projectnamenpm install支持sass: npm install sass --save-dev npm install sass-loader7.1.0 --save-dev npm install node-sass4.12.0 --save-devbuild/webpack.base.conf.js添加 rules: [...,{test: /\.scss$/,loade…

Golang--网络编程

1、概念 网络编程&#xff1a;把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息、共享数据、软件、数据信息等资源。 客户端&#xff08;Client&#xff09; 客户端是请求服务…

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络&#xff08;CNN&#xff0c;全连接网络&#xff09;的流程是前向传播、反向传播和参数更新&#xff0c;存在以下不足&#xff1a; 无法处理时序数据&#xff1a;时序数据长度一般不固定&#xff0c;而前馈神经网络要求输入和输出的维度是固定的&a…

Parallax.js:让智能设备视差效果更智能、更自然

今天给大家分享一款功能非常强大的javascript视觉差特效引擎插件&#xff1a;Parallax.js。 Parallax.js简介 Parallax.js是一个简单的&#xff0c;轻量级的视差引擎。你可以将它作为作为jQuery或Zepto插件来使用&#xff0c;也可以以纯JS的方式来使用。 最-最-最厉害的是它…