平均绝对百分比误差(Mean Absolute Percentage Error,简称MAPE)是一种衡量回归模型预测精度的指标。它通过计算预测值与实际值之间的差异占实际值的百分比来评估模型的预测性能。需要注意的是,MAPE的输出并不是一个百分比值,其范围也不是[0, 100]。MAPE的值可以非常大,尤其是当实际值非常小或者预测误差非常大时。此外,当实际值为零时,MAPE的值会非常高,而不是无穷大。
MAPE的计算公式如下:
loss = np.mean(np.abs((y_true - y_pred) / y_true)) * 100
其中,y_true
表示实际值,y_pred
表示预测值。MAPE的值越小,表示模型的预测精度越高。理想情况下,MAPE的值为0,表示模型的预测完全准确。然而,在实际应用中,由于数据的复杂性和模型的局限性,MAPE的值往往不会达到0。
MAPE在多输出回归问题中的应用:
在多输出回归问题中,MAPE可以对每个输出单独计算,也可以对所有输出计算加权平均值。例如,当使用multioutput='uniform_average'
参数时,MAPE会对所有输出计算平均值,而不考虑每个输出的重要性。当使用multioutput
参数传入一个权重数组时,MAPE会根据这些权重计算加权平均值,从而更准确地反映模型在不同输出上的预测性能。
MAPE的应用示例:
from sklearn.metrics import mean_absolute_percentage_error
# 单输出回归问题
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
loss = mean_absolute_percentage_error(y_true, y_pred)
print(loss) # 输出:0.3273...
# 多输出回归问题
y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]
loss = mean_absolute_percentage_error(y_true, y_pred)
print(loss) # 输出:0.5515...
# 多输出回归问题的加权平均MAPE
loss = mean_absolute_percentage_error(y_true, y_pred, multioutput=[0.3, 0.7])
print(loss) # 输出:0.6198...
# 当实际值为零时,MAPE的值会非常高
y_true = [1.0, 0.0, 2.4, 7.0]
y_pred = [1.2, 0.1, 2.4, 8.0]
loss = mean_absolute_percentage_error(y_true, y_pred)
print(loss) # 输出:112589990684262.48
通过以上示例,可以看到MAPE在不同场景下的应用。在实际应用中,需要根据具体问题选择合适的MAPE计算方法,并结合其他指标一起评估模型的预测性能。