机器学习笔记:回归模型评估指标——MAE、MSE、RMSE、MAPE、R2等
日常比赛中,常见两种类型:分类和回归。
在回归任务中(对连续值的预测),常见的评估指标(metrics
)主要包括:
- 平均绝对误差 MAE(Mean Absolute Error)
- 均方误差 MSE(Mean Square Error)
- 均方根误差 RMSE(Root Mean Square Error)
- 平均绝对百分比误差 MAPE(Mean Absolute Percentage Error)
其中,MAE
和 MSE
使用较为广泛。
需要根据不同比赛的不同评价指标进行选择。
通常,sklearn.metrics
中评估函数以 _score
结尾返回一个值,越大越好,而函数以 _error
或者 _loss
结尾则返回一个值,越小越好。
一、平均绝对误差 MAE
平均绝对误差(MAE)用来衡量预测值与真实值之间的平均绝对误差,是一个非负值,MAE越小表示模型越好。
# 测试数据
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
# sklearn方式
from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(y_true, y_pred)) # 0.5
# 自定义
import pandas as pd
import numpy as np
def MAE(y_true, y_pred):
return np.mean(np.abs(pd.Series(y_true) - pd.Series(y_pred)))
MAE(y_true, y_pred) # 0.5
二、均方误差 MSE
均方误差(MSE)同样是衡量预测值与真实值之间的差距。
# 测试数据
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
# sklearn
from sklearn.metrics import mean_squared_error
print(mean_squared_error(y_true, y_pred)) # 0.375
# 自定义
import pandas as pd
import numpy as np
def MSE(y_true, y_pred):
return np.mean((pd.Series(y_true) - pd.Series(y_pred)) ** 2)
MSE(y_true, y_pred) # 0.375
三、均方根误差 RMSE
均方根误差(RMSE)是回归模型的典型指标,用于指示模型预测中会产生多大的误差。对于较大的误差,权重较高。
同样的,RMSE越小越好。
import numpy as np
from sklearn.metrics import mean_squared_error
print(np.sqrt(mean_squared_error(y_true, y_pred))) # 0.61237
四、平均绝对百分比误差 MAPE
MAPE和MAE类似,只是在MAE的基础上做了标准化处理。
MAPE越小表示模型越好。
def MAPE(y_true, y_pred):
return np.mean(np.abs((y_true - y_pred) / y_true))
五、R2评价指标
sklearn实现线性回归时默认采用R2指标。R2越大,表示模型越好。
R2的好处在于其结果进行归一化,更容易看出模型间的差距。
- R2≤1
- R2越大越好。当我们预测的模型完全准确时,R2等于最大值1
- 当R2<0时,说明模型还不如基准模型,很可能数据不存在任何线性关系
# 自定义
def R2(y_true, y_pred):
u = np.sum((y_true - y_pred) ** 2)
v = np.sum((y_true - np.mean(y_true)) ** 2)
return 1 - (u / v) # 0.9486081370449679
# sklearn
from sklearn.metrics import r2_score
print(r2_score(y_true, y_pred)) # 0.9486081370449679
六、均方对数误差 MSLE
均方对数误差是非负值,模型越好,越接近0。
较为少用。
七、偏差和方差
1、偏差 Bias
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。
偏差越大,越偏离真实数据。
2.方差 Variance
方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。
方差越大,数据的分布越分散。
此处借用知乎大佬简明解释。
想象你开着一架黑鹰直升机,得到命令攻击地面上一只敌军部队,于是你连打数十梭子,结果有一下几种情况:
1.子弹基本上都打在队伍经过的一棵树上了,连在那棵树旁边等兔子的人都毫发无损,这就是方差小(子弹打得很集中),偏差大(跟目的相距甚远)。
2.子弹打在了树上,石头上,树旁边等兔子的人身上,花花草草也都中弹,但是敌军安然无恙,这就是方差大(子弹到处都是),偏差大(同1)。
3.子弹打死了一部分敌军,但是也打偏了些打到花花草草了,这就是方差大(子弹不集中),偏差小(已经在目标周围了)。
4.子弹一颗没浪费,每一颗都打死一个敌军,跟抗战剧里的八路军一样,这就是方差小(子弹全部都集中在一个位置),偏差小(子弹集中的位置正是它应该射向的位置)。
作者:刑无刀
链接:https://www.zhihu.com/question/20448464/answer/24397161
来源:知乎
方差,是形容数据分散程度的,算是“无监督的”,客观的指标.
偏差,形容数据跟我们期望的中心差得有多远,算是“有监督的”,有人的知识参与的指标。
参考链接:评估回归模型的指标:MSE、RMSE、MAE、R2、偏差和方差
参考链接:偏差和方差有什么区别?
参考链接:线性回归(模型的评估)