sklearn【MAPE】平均相对误差介绍,以及案例学习!

一、MAPE 介绍

在预测任务中,评估模型的预测性能至关重要。除了常见的均方误差(MSE)和决定系数(R²)等指标外,平均百分比误差(MAPE,Mean Absolute Percentage Error)也是一个常用的评估指标。MAPE衡量了模型预测值与实际值之间的百分比误差的平均值,有助于我们了解预测的相对准确性。

在Python的机器学习库sklearn中,虽然没有直接提供计算MAPE的函数,但我们可以自己编写一个简单的函数来实现这一功能。下面我们将通过一个示例来展示如何使用sklearn进行预测,并计算MAPE来评估模型的性能。

二、案例学习

首先,我们需要导入必要的库并加载数据集。在这个例子中,我们将使用一个简单的线性回归问题来演示计算MAPE的过程。

python 复制代码
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.datasets import fetch_california_housing
from sklearn.metrics import mean_absolute_error 
from sklearn.metrics import r2_score  
import pandas as pd
import numpy as np

housing = fetch_california_housing()

# 加载房价数据集
X = housing.data
y = housing.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

接着,我们创建一个线性回归模型,并使用训练数据进行训练。

python 复制代码
# 创建线性回归模型
model = LinearRegression()

# 使用训练数据进行训练
model.fit(X_train, y_train)

训练完成后,我们使用模型对测试集进行预测。

python 复制代码
# 对测试集进行预测
y_pred = model.predict(X_test)

现在,我们可以编写一个函数来计算MAPE。MAPE的计算公式是:

M A P E = 1 n ∑ i = 1 n ∣ y i − y ^ i y i ∣ ∗ 100 % MAPE = \frac{1}{n} \sum_{i=1}^{n} \left|\frac{y_i - \hat{y}_i}{y_i}\right| * 100\% MAPE=n1∑i=1n yiyi−y^i ∗100%

其中 n n n 是数据点的数量, y i y_i yi 是第 i i i 个数据点的实际值, y ^ i \hat{y}_i y^i 是模型对第 i i i 个数据点的预测值。

python 复制代码
def calculate_mape(y_true, y_pred):
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    mask = y_true != 0  # 避免除以零
    return np.mean(np.abs((y_true[mask] - y_pred[mask]) / y_true[mask])) * 100

# 计算MAPE
mape = calculate_mape(y_test, y_pred)
print(f'Mean Absolute Percentage Error (MAPE): {mape:.2f}%')

# Mean Absolute Percentage Error (MAPE): 31.95%

在上面的代码中,我们首先定义了一个calculate_mape函数,它接受实际值和预测值作为输入,并返回MAPE的值。在计算MAPE时,我们添加了一个掩码(mask)来排除实际值为零的情况,以避免除以零的错误。最后,我们调用这个函数来计算测试集上的MAPE,并打印结果。

三、总结

MAPE的值越小,说明模型的预测性能越好,预测值与实际值之间的百分比误差越小。然而,需要注意的是,MAPE对异常值比较敏感,因为当实际值很小时,即使预测值的绝对误差很小,也会导致MAPE的值很大。因此,在使用MAPE作为评估指标时,需要结合其他指标和实际情况进行综合考量。

相关推荐
r_oo_ki_e_7 小时前
Java Map 集合学习笔记
java·笔记·学习
AI科技星7 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
笨鸟先飞的橘猫8 小时前
skynet——sharetable学习
学习·skynet
liuyicenysabel9 小时前
大模型学习笔记 · 第八篇 · 进阶:偏好对齐与多卡训练
人工智能·笔记·学习
Funing711 小时前
FreeRTOS学习day1:Keil 工程配置与 FreeRTOS 链表机制理解
数据结构·学习·链表
心中有国也有家12 小时前
使用 DevEco Studio 配置 Flutter 鸿蒙签名
学习·flutter·华为·harmonyos
灯澜忆梦12 小时前
MySQL 完整学习路线
学习·mysql
森林古猿113 小时前
再论斜率优化
c++·学习·算法
心中有国也有家13 小时前
鸿蒙Flutter开发环境从零搭建教程(Windows/macOS双平台·避坑版)
学习·flutter·华为·harmonyos
渣渣灰飞14 小时前
MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第三节:ORDER BY + LIMIT(排序 + 分页)
数据库·学习·mysql