机器学习笔记:回归模型评估指标——MAE、MSE、RMSE、MAPE、R2等

日常比赛中,常见两种类型:分类和回归。

在回归任务中(对连续值的预测),常见的评估指标(metrics)主要包括:

  • 平均绝对误差 MAE(Mean Absolute Error)
  • 均方误差 MSE(Mean Square Error)
  • 均方根误差 RMSE(Root Mean Square Error)
  • 平均绝对百分比误差 MAPE(Mean Absolute Percentage Error)

其中,MAEMSE 使用较为广泛。

需要根据不同比赛的不同评价指标进行选择。

通常,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、偏差和方差

参考链接:偏差和方差有什么区别?

参考链接:线性回归(模型的评估)

参考链接:Python3——sklearn中回归模型的六种评估规则

参考链接:sklearn 回归模型评价指标及代码示例

posted @ 2023-02-06 16:00  Hider1214  阅读(8915)  评论(6编辑  收藏  举报