假设:
预测值 $\hat y={\hat y_1,\hat y_2,...\hat y_n}$
真实值 $y = {y_1,y_2,...y_n}$
MSE
均方误差(Mean Square Error)
$$MSE=\frac{1}\sum_N(\hat y_i-y_i)2$$
- 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
RMSE
- 均方根误差(Root Mean Square Error),其实就是MSE加了个根号,这样数量级上比较直观,比如RMSE=10,可以认为回归效果相比真实值平均相差10。
$$RMSE=\sqrt[2]{\frac{1}\sum_N(\hat y_i-y_i)2}$$
- 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
MAE
- 平均绝对误差(Mean Absolute Error)
$$MAE = \frac{1}\sum_^N|\hat y_i-y_i|$$ - 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
MAPE
- 平均绝对百分比误差(Mean Absolute Percentage Error)
$$MAPE=\frac{100%}\sum_^N|\frac{\hat y_i-y_i}|$$ - 范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。
- 注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!
SMAPE - 对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)
$$SMAPE=\frac{100%}\sum_^N\frac{|\hat y_i-y_i|}{(|\hat y_i| + |y_i|)/2}$$
- 注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!
python 示例
import numpy as np
from sklearn import metrics
def mape(y_true,y_pred):
return np.mean(np.abs((y_pred-y_true)/y_true)) * 100
def smape(y_true,y_pred):
return 2.0 * np.mean(np.abs(y_pred-y_true)/(np.abs(y_pred)+np.abs(y_true))) * 100
y_true = np.array([1.0,5.0,4.0,3.0,2.0,5.0,-3.0])
y_pred = np.array([1.0,4.5,3.5,5.0,2.0,4.0,-3.0])
# MSE
print(metrics.mean_squared_error(y_true,y_pred))
# RMSE
print(np.sqrt(metrics.mean_squared_error(y_true,y_pred)))
# MAE
print(metrics.mean_absolute_error(y_true,y_pred))
# MAPE
print(mape(y_true,y_pred))
# SMAPE
print(smape(y_true,y_pred))