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

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

1. MAE 的定义和公式

给定预测值 ​ 和真实值 ,MAE 的公式为:

其中:

  • n 是样本总数。
  • 是模型的预测值。
  • 是对应的真实值。

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

2. MAE 的计算步骤

计算 MAE 的步骤如下:

  1. 求出误差 :计算预测值 与真实值 之间的差异。
  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 实现代码

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。
  • 红色叉点连线代表预测值
  • 每条灰色虚线表示预测值和真实值之间的绝对误差。
python 复制代码
# 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 的对比

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

9. 结论

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

相关推荐
封步宇AIGC3 分钟前
量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
人工智能·python·机器学习·数据挖掘
何曾参静谧4 分钟前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
m0_523674215 分钟前
技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路
人工智能·深度学习·目标检测·机器学习·语言模型·自然语言处理·数据挖掘
Prejudices8 分钟前
C++如何调用Python脚本
开发语言·c++·python
HappyAcmen15 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
我狠狠地刷刷刷刷刷21 分钟前
中文分词模拟器
开发语言·python·算法
Jam-Young34 分钟前
Python的装饰器
开发语言·python
噜噜噜噜鲁先森36 分钟前
看懂本文,入门神经网络Neural Network
人工智能
Mr.咕咕1 小时前
Django 搭建数据管理web——商品管理
前端·python·django
InheritGuo1 小时前
It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models
人工智能·计算机视觉·sketch