选择 MAE 还是 RMSE 进行误差预测
了解平均绝对误差 (MAE) 和均方根误差 (RMSE) 之间的区别,如何为您的预测任务选择正确的指标,以及大误差对每个指标的影响。
本文内容
简明答案
在评估回归模型时,平均绝对误差 (MAE) 和均方根误差 (RMSE) 是常用的指标。MAE 衡量误差的平均幅度,使其对异常值具有鲁棒性,并且易于解释,因为它与目标变量的单位相同。另一方面,RMSE 由于在平均之前对误差进行平方,然后在取平方根,因此对较大的误差给予更重的惩罚。在 MAE 和 RMSE 之间的选择取决于预测任务的具体目标:如果大误差尤其不可取并且应该受到严厉惩罚,则首选 RMSE。如果所有误差的幅度都应同等对待,则 MAE 是更好的选择。这两个指标都是预测响应变量均值的严格一致的评分函数。
理解 MAE 和 RMSE
平均绝对误差 (MAE) 和均方根误差 (RMSE) 都是评估回归模型性能的常用指标。它们量化了预测值与实际目标值之间的差异。MAE 计算预测值与真实值之间绝对差值的平均值。相反,RMSE 计算预测值与真实值之间平方差值的平均值的平方根。这两个指标都提供了预测误差的度量,值越低表示拟合越好。
根本区别在于它们如何处理误差。MAE 同等地对待所有误差的幅度。例如,误差 10 对 MAE 的贡献是误差 5 的两倍。然而,RMSE 在平均之前对误差进行平方。这意味着较大的误差对 RMSE 的影响不成比例地更大。误差 10 对误差平方和的贡献是误差 5 的四倍,因此,对 RMSE 的贡献也更大。
何时使用 MAE
当您希望对平均误差幅度进行直接解释时,平均绝对误差 (MAE) 是一个合适的选择。由于 MAE 计算为绝对差值的平均值,因此其单位与目标变量相同,这使得它易于理解。例如,如果您在预测美元的房价,MAE 为 5,000 美元意味着您的预测平均偏离 5,000 美元。
与 RMSE 相比,MAE 对异常值也更具鲁棒性。异常值或数据中的极端值对 MAE 的影响较小,因为误差没有被平方。如果您的数据集包含显著的异常值,而您不希望它们过度影响您的评估指标,通常会优先选择 MAE。它提供了误差大小的良好度量,而不会被少数几个非常大的偏差所扭曲。
from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mae = mean_absolute_error(y_true, y_pred)
print(f"Mean Absolute Error: {mae}")
# Output: Mean Absolute Error: 0.5何时使用 RMSE
当较大的误差比小的误差更不可取时,首选均方根误差 (RMSE)。RMSE 中的误差平方放大了对错误的惩罚。这使得 RMSE 在大误差的成本远高于多个小误差成本的情况下特别有用。例如,在金融预测中,大的预测误差可能导致重大的财务损失,使得 RMSE 成为更合适的指标。
RMSE 也与残差(预测误差)的标准差密切相关。它是统计建模中的一个常用指标,通常在假设底层数据分布为高斯分布时使用。虽然 RMSE 在原始单位方面的可解释性不如 MAE(由于平方和平方根运算),但它提供了误差幅度的敏感度量,特别是对于较大的偏差。
from sklearn.metrics import root_mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
rmse = root_mean_squared_error(y_true, y_pred)
print(f"Root Mean Squared Error: {rmse}")
# Output: Root Mean Squared Error: 0.6123724356957945大误差的影响
MAE 和 RMSE 之间的关键区别在于它们对大误差的敏感性。考虑一个具有预测值和真实值的场景。如果误差为 [1, 2, 3, 10],则 MAE 为 (1+2+3+10)/4 = 4。RMSE 将涉及 sqrt(((1^2)+(2^2)+(3^2)+(10^2))/4) = sqrt((1+4+9+100)/4) = sqrt(114/4) = sqrt(28.5) ≈ 5.34。
现在,如果最大的误差从 10 减小到 5,误差变为 [1, 2, 3, 5]。MAE 变为 (1+2+3+5)/4 = 2.75。RMSE 变为 sqrt(((1^2)+(2^2)+(3^2)+(5^2))/4) = sqrt((1+4+9+25)/4) = sqrt(39/4) = sqrt(9.75) ≈ 3.12。请注意,减小最大误差如何显著降低 MAE,但 RMSE 的影响相对于其初始值来说不那么明显。这说明了 RMSE 倾向于对大误差给予更重的惩罚。
选择正确的指标
在 MAE 和 RMSE 之间进行选择取决于您的预测任务的具体要求和优先级。如果您的目标是以目标变量的单位直接可解释的方式理解平均误差幅度,并且您希望对异常值不那么敏感,那么 MAE 是一个有力的候选者。它提供了典型预测不准确性的清晰图景。
相反,如果大误差特别有问题并且应该受到严厉惩罚,那么 RMSE 是更好的选择。它适用于大偏差偏离真实值的成本不成比例地高的情况。这两个指标都被认为是预测响应变量均值的严格一致的评分函数,这意味着它们与估计期望值非常吻合。
一致性和模型训练
MAE 和 RMSE 都是评估模型的宝贵工具,但它们也可以作为模型训练期间的损失函数。当使用 MAE 作为损失函数时(例如,平均绝对误差损失),模型被优化以最小化预测值与真实值之间的平均绝对差值。这种方法鼓励模型对异常值不那么敏感。
使用 RMSE 作为损失函数(例如,均方误差损失,其平方根是 RMSE)会导致模型对大误差更敏感。优化过程将优先减少这些较大的偏差。训练期间损失函数的选择直接影响模型的行为及其作为相应评估指标测量的性能特征。
Scikit-learn 实现
Scikit-learn 为 MAE 和 RMSE 提供了方便的函数。mean_absolute_error 函数计算 MAE,root_mean_squared_error 函数计算 RMSE。这两个函数都接受 y_true(真实值)和 y_pred(预测值)作为主要参数。它们还支持 sample_weight 进行加权误差计算,以及 multioutput 来处理具有多个目标变量的情况。
这些指标可以直接用于评估,也可以使用 scoring 参数集成到交叉验证管道中。例如,在使用 GridSearchCV 或 cross_val_score 时,您可以指定 scoring='neg_mean_absolute_error' 或 scoring='neg_root_mean_squared_error'。请注意 'neg_' 前缀:scikit-learn 的评分约定是值越高越好,因此通常最小化的指标(如误差损失)会返回其负值。
from sklearn.metrics import mean_absolute_error, root_mean_squared_error
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
import numpy as np
# Sample data
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3
model = LinearRegression()
# Using MAE for cross-validation
mae_scores = cross_val_score(model, X, y, cv=2, scoring='neg_mean_absolute_error')
print(f"MAE scores: {mae_scores}")
print(f"Average MAE: {-mae_scores.mean()}")
# Using RMSE for cross-validation
rmse_scores = cross_val_score(model, X, y, cv=2, scoring='neg_root_mean_squared_error')
print(f"RMSE scores: {rmse_scores}")
print(f"Average RMSE: {-rmse_scores.mean()}")局限性和注意事项
虽然 MAE 和 RMSE 是强大的工具,但它们也有局限性。MAE 提供了平均误差的度量,但没有区分大误差和小误差的影响。RMSE 对大误差的惩罚更大,这可能是可取的,但如果异常值不能代表一般误差分布或由于数据错误而产生,它也可能对异常值过于敏感。
这两个指标都假设误差是独立同分布的。如果数据中存在时间依赖性或异方差性(误差方差非恒定),这些指标可能无法完全捕捉模型的性能。对于这种情况,可能需要专门的时间序列指标或残差分析。此外,在处理多输出回归时,scikit-learn 函数中的 multioutput 参数允许不同的聚合策略,应根据问题上下文仔细选择。
检查清单
- 验证所选指标(MAE 或 RMSE)是否符合业务目标或与预测误差相关的成本。
- 确保指标值的解释在问题单位的上下文中是清晰的。
- 检查异常值的存在是否显著影响所选指标,以及这种影响是否是期望的。
- 确认所选指标在模型训练(作为损失函数)和评估中是否一致使用。
- 在使用 scikit-learn 时,请记住误差指标通常会对其评分参数取负值(例如,'neg_mean_squared_error')。
适用范围
MAE 和 RMSE 主要适用于回归任务。它们不直接适用于分类问题。对于多输出回归,multioutput 参数指定的聚合方法会影响最终得分。