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

【机器学习】平均绝对误差(MAE:Mean Absolute Error)

平均绝对误差 (Mean Absolute Error, MAE) 是一种衡量预测值与实际值之间平均差异的统计指标。它在机器学习、统计学等领域中广泛应用,用于评估模型的预测精度。与均方误差 (MSE) 或均方误差根 (RMSE) 不同,MAE 使用误差的绝对值,因此它在处理异常值时更加稳定。

1. MAE 的定义和公式

给定预测值 \hat{y}_i​ 和真实值 y_i,MAE 的公式为:

\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |\hat{y}_i - y_i|

其中:

  • n 是样本总数。
  • \hat{y}_i 是模型的预测值。
  • y_i​ 是对应的真实值。

MAE 表示了预测值与真实值之间的平均绝对差异。由于取了绝对值,每个误差的正负号被忽略,保证了所有差异的非负性。

2. MAE 的计算步骤

计算 MAE 的步骤如下:

  1. 求出误差:计算预测值 \hat{y}_i 与真实值 y_i 之间的差异。
  2. 取绝对值:计算每个误差的绝对值,以确保所有差异都是正值。
  3. 求均值:将所有误差的绝对值加总,并除以样本数量 n,得到 MAE。

3. MAE 的性质和意义

  • 易于解释:MAE 具有与原始数据相同的单位,直接表示预测值与真实值的平均差距,因而易于理解和解释。
  • 对异常值更稳定:相比 MSE 和 RMSE,MAE 对异常值不敏感,不会因为少数大误差的平方而放大结果,适用于具有较多异常值的数据集。
  • 偏好绝对误差:由于 MAE 忽略了误差的正负号,它无法提供误差的方向性信息。

4. MAE 的优缺点

优点

  • 简单直观:MAE 仅计算绝对误差的平均值,简单明了。
  • 对异常值稳定:由于没有误差平方的放大效应,MAE 不易受异常值的影响,更能反映数据的整体趋势。

缺点

  • 缺乏方向性:由于计算绝对误差,MAE 无法反映出误差是正偏还是负偏,可能不适用于需要区分偏差方向的应用场景。
  • 较低的区分度:MAE 没有放大误差的功能,因此在评估较复杂模型的表现时,可能没有 RMSE 那样敏感。

5. MAE 的应用

MAE 是回归问题中常用的评估指标,广泛应用于以下场景:

  • 时间序列预测:在金融、气象等时间序列预测问题中,MAE 可以用来评估预测精度。
  • 经济预测:在经济领域,MAE 用于衡量经济指标的预测偏差,帮助判断模型的可靠性。
  • 机器学习模型的比较:MAE 在回归模型的评估中用于衡量不同模型的预测效果,是算法调优时

6.Python 实现代码

import numpy as np

def mae(y_true, y_pred):
    return np.mean(np.abs(y_pred - y_true))

# 示例
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])

result = mae(y_true, y_pred)
print("MAE:", result)

说明

  1. y_true 为真实值数组,y_pred 为预测值数组。
  2. np.abs(y_pred - y_true) 计算每个误差的绝对值。
  3. np.mean(...) 求所有误差的绝对值的平均,得到 MAE。

图中 MAE 值越小表示预测越准确。

7. MAE 的图解说明

上图展示了 MAE 的计算过程,其中:

  • 蓝色圆点连线代表真实值 y。
  • 红色叉点连线代表预测值 \hat{y}​。
  • 每条灰色虚线表示预测值和真实值之间的绝对误差。
# MAE Python implementation and visualization

import numpy as np
import matplotlib.pyplot as plt

# Generate sample data for illustration
np.random.seed(0)
x = np.linspace(0, 10, 10)                   # Independent variable (e.g., input feature)
y_true = 2 * x + 1                           # True relationship (e.g., ground truth values)
y_pred = y_true + np.random.normal(0, 2, 10) # Predicted values with random noise

# Calculate MAE
mae_value = np.mean(np.abs(y_pred - y_true))

# Plotting the true vs. predicted values with errors
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')
plt.vlines(x, y_true, y_pred, colors='gray', linestyles='dotted', label='Absolute Errors')

# Adding text and labels
plt.xlabel("x")
plt.ylabel("y")
plt.title(f"Illustration of MAE (Mean Absolute Error)\nMAE = {mae_value:.2f}")
plt.legend()
plt.grid(True)
plt.show()

可以用垂直线表示预测值与实际值之间的绝对误差,每条线段的长度对应于预测值和真实值的差异。以下是一个 MAE 的计算图解步骤:

  1. 绘制真实值和预测值的散点图:将实际值和预测值分别绘制在坐标图上。
  2. 计算误差:每个预测点到真实点的垂直线段代表误差的绝对值。
  3. 平均误差长度:将这些垂直线段的长度平均,即得到 MAE。

通过这样的图示,MAE 能帮助直观展示预测结果与实际情况的整体差异。

8. MAE 与 RMSE 的对比

指标MAERMSE
计算方式绝对误差的均值平方误差的均值开平方根
对异常值敏感性
是否反映方向性
应用场景数据含有较多异常值的数据集对精度要求高的数据分析场景

9. 结论

MAE 是一种简单、直观且对异常值较为稳定的误差度量方法。它适合用于需要估计预测与真实值间差距的应用场景。对于希望避免极端值过度影响的情况,MAE 是一个有效的选择。而在需要更精细的模型评价时,通常会与 RMSE 一起使用,从而更全面地评估模型的预测表现。


http://www.kler.cn/a/385675.html

相关文章:

  • 动态规划---解决多段图问题
  • 使用Matlab神经网络工具箱
  • 微信小程序_模板与配置_day2
  • C#-命名空间
  • 物流企业新闻稿怎么写?货运行业品牌宣传背书的报纸期刊杂志媒体有哪些
  • SwiftUI开发教程系列 - 第1章:简介与环境配置
  • stm32cubeide 1.16.1 在ubuntu 24.04上的安装
  • Intern大模型训练营(五):书生大模型全链路开源体系笔记
  • Python代码主要实现了一个基于Transformer和LSTM的混合模型,用于对给定数据集进行二分类任务
  • 用 Python 从零开始创建神经网络(一)
  • MeterSphere接口自动化-ForEach循环
  • 五分钟使用 CocosCreator 快速部署 TON 游戏:开发基于 ZKP 的游戏
  • 【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦
  • 华为大咖说 | 浅谈智能运维技术
  • 【1】 Kafka快速入门-从原理到实践
  • 一七七、window.performance API使用介绍
  • SQL pta习题
  • 我谈正态分布——正态偏态
  • Stored procedures in PostgreSQL
  • C++入门基础知识142—【关于C++ 友元函数】
  • 国产操作系统ctyun下安装Informix SDK开发包的方法
  • Notepad++ 更改字体大小和颜色
  • [每周一更]-(第122期):模拟面试|数据库面试思路解析
  • 类文件结构详解
  • Leecode热题100-543.二叉树的直径
  • 【C++练习】生成并打印所有可能的三色组合