机器学习评估指标的前世今生

  • 很多同学在入门机器学习的时候都会好奇,这么多的机器学习指标,到底要用哪个?这些指标的含义和优缺点是什么?他们之间有没有联系?像AUC这种常用的指标到底是什么意思,它的核心idea又是什么?它是怎样计算出来的?
  • 下面,我会用通俗易懂的语言,介绍不同的机器学习评估指标的具体含义,优缺点,以及它们之间的联系,将常用的机器学习评估指标串成一条线。然后重点介绍了AUC的来历,核心的idea以及计算过程。并简要介绍了评估指标和代价函数之间的关系和区别。里面有一些自己的观点和体会,如有不当,请大家指正。废话少说,上正文哈!!!
  • 我们先来看一下sklearn中支持哪些机器学习的评估指标:
from sklearn.metrics import SCORERSSCORERS

{‘accuracy’: make_scorer(accuracy_score),
‘adjusted_rand_score’: make_scorer(adjusted_rand_score),
‘average_precision’: make_scorer(average_precision_score, needs_threshold=True),
‘f1’: make_scorer(f1_score),
‘f1_macro’: make_scorer(f1_score, average=macro, pos_label=None),
‘f1_micro’: make_scorer(f1_score, average=micro, pos_label=None),
‘f1_samples’: make_scorer(f1_score, average=samples, pos_label=None),
‘f1_weighted’: make_scorer(f1_score, average=weighted, pos_label=None),
‘log_loss’: make_scorer(log_loss, greater_is_better=False, needs_proba=True),
‘mean_absolute_error’: make_scorer(mean_absolute_error, greater_is_better=False),
‘mean_squared_error’: make_scorer(mean_squared_error, greater_is_better=False),
‘median_absolute_error’: make_scorer(median_absolute_error, greater_is_better=False),
‘neg_log_loss’: make_scorer(log_loss, greater_is_better=False, needs_proba=True),
‘neg_mean_absolute_error’: make_scorer(mean_absolute_error, greater_is_better=False),
‘neg_mean_squared_error’: make_scorer(mean_squared_error, greater_is_better=False),
‘neg_median_absolute_error’: make_scorer(median_absolute_error, greater_is_better=False),
‘precision’: make_scorer(precision_score),
‘precision_macro’: make_scorer(precision_score, average=macro, pos_label=None),
‘precision_micro’: make_scorer(precision_score, average=micro, pos_label=None),
‘precision_samples’: make_scorer(precision_score, average=samples, pos_label=None),
‘precision_weighted’: make_scorer(precision_score, average=weighted, pos_label=None),
‘r2’: make_scorer(r2_score),
‘recall’: make_scorer(recall_score),
‘recall_macro’: make_scorer(recall_score, average=macro, pos_label=None),
‘recall_micro’: make_scorer(recall_score, average=micro, pos_label=None),
‘recall_samples’: make_scorer(recall_score, average=samples, pos_label=None),
‘recall_weighted’: make_scorer(recall_score, average=weighted, pos_label=None),
‘roc_auc’: make_scorer(roc_auc_score, needs_threshold=True)}

哇,好多,这么多指标,我们都要会用吗?实际上不是这样的,我们平时工作中只会使用一些比较常见的指标,并且根据这些常见的指标(注意不是一个指标!)综合评价我们的模型。下面我们就一一揭晓这些常见评估方法的神秘面纱!

  • Mean Absolute Error 平均绝对误差
  • Mean Squared Error 均方误差
  • Root Mean Squared Error:均方根误差
  • Coefficient of determination 决定系数

以下为一元变量和二元变量的线性回归示意图:

怎样来衡量回归模型的好坏呢?

我们第一眼自然而然会想到采用残差(实际值与预测值差值)的均值来衡量,即:

问题 1:用残差的均值合理吗?

当实际值分布在拟合曲线两侧时,对于不同样本而言$y_i-\hat{y}_i$ 有正有负,相互抵消,因此我们想到采用预测值和真实值之间的距离来衡量。

平均绝对误差 MAE

平均绝对误差MAE(Mean Absolute Error)又被称为 $l1$ 范数损失($l1-norm loss$),

问题 2:MAE有哪些不足?

MAE虽能较好衡量回归模型的好坏,但是绝对值的存在导致函数不光滑,在某些点上不能求导,可以考虑将绝对值改为残差的平方,这就是均方误差。

均方误差 MSE

均方误差MSE(Mean Squared Error)又被称为 $l2$ 范数损失($l2-norm loss$)。

问题 3: 还有没有比MSE更合理一些的指标?

由于MSE与我们的目标变量的量纲不一致,为了保证量纲一致性,我们需要对MSE进行开方。

均方根误差 RMSE

问题 4: RMSE有没有不足的地方?有没有规范化(无量纲化的指标)?

上面的几种衡量标准的取值大小与具体的应用场景有关系,很难定义统一的规则来衡量模型的好坏。比如说利用机器学习算法预测上海的房价RMSE在2000元,我们是可以接受的,但是当四五线城市的房价RMSE为2000元,我们还可以接受吗?下面介绍的决定系数就是一个无量纲化的指标。

决定系数 $R^2$

变量之所以有价值,就是因为变量是变化的。什么意思呢?比如说一组因变量为[0, 0, 0, 0, 0],显然该因变量的结果是一个常数0,我们也没有必要建模对该因变量进行预测。假如一组的因变量为[1, 3, 7, 10, 12],该因变量是变化的,也就是有变异,因此需要通过建立回归模型进行预测。这里的变异可以理解为一组数据的方差不为0。

决定系数又称为 $R^2$ score,反应因变量的全部变异能通过回归关系被自变量解释的比例。

$\text{SST} = \sum \limits_i^m(y_i – \bar y)^2 \qquad \text{SST = total sum of squares}$

$\text{SSR} = \sum \limits_i^m(\hat y_i – \bar y)^2 \qquad \text{SSR = sum of due to regression}$

$\text{SSE} = \sum \limits_i^m(\hat y_i – y_i)^2 \qquad \text{SSE = sum of due to erros}$

$\text{SST = SSR + SSE}$

如果结果是0,就说明模型预测不能预测因变量。
如果结果是1。就说明是函数关系。
如果结果是0-1之间的数,就是我们模型的好坏程度。

化简上面的公式 ,分子就变成了我们的均方误差MSE,下面分母就变成了方差:

问题 5: 以上评估指标有没有缺陷,如果有,该怎样改进?

以上的评估指标是基于误差的均值对进行评估的,均值对异常点(outliers)较敏感,如果样本中有一些异常值出现,会对以上指标的值有较大影响,即均值是非鲁棒的。

解决评估指标鲁棒性问题

我们通常用一下两种方法解决评估指标的鲁棒性问题:

  • 剔除异常值

设定一个相对误差 $\frac{|y_i-\hat{y_i}|}{y_i}$,当该值超过一定的阈值时,则认为其是一个异常点,剔除这个异常点,将异常点剔除之后。再计算平均误差来对模型进行评价。

  • 使用误差的分位数来代替,

如利用中位数来代替平均数。例如 MAPE:

MAPE是一个相对误差的中位数,当然也可以使用别的分位数。

  • 精度 Accuracy
  • 混淆矩阵 Confusion Matrix
  • 准确率(查准率) Precision
  • 召回率(查全率)Recall
  • $F_\beta$ Score
  • AUC Area Under Curve
  • KS Kolmogorov-Smirnov

精度 Acc

预测正确的样本的占总样本的比例,取值范围为[0,1],取值越大,模型预测能力越好。

精度评价指标对平等对待每个类别,即每一个样本判对 (0) 和判错 (1) 的代价都是一样的

问题 6: 精度有什么缺陷?什么时候精度指标会失效?

  • 对于有倾向性的问题,往往不能用精度指标来衡量。比如,判断空中的飞行物是导弹还是其他飞行物,很显然为了减少损失,我们更倾向于相信是导弹而采用相应的防护措施。此时判断为导弹实际上是其他飞行物与判断为其他飞行物实际上是导弹这两种情况的重要性是不一样的;
  • 对于样本类别数量严重不均衡的情况,也不能用精度指标来衡量。比如银行客户样本中好客户990个,坏客户10个。如果一个模型直接把所有客户都判断为好客户,得到精度为99%,但这显然是没有意义的。

对于以上两种情况,单纯根据Accuracy来衡量算法的优劣已经失效。这个时候就需要对目标变量的真实值和预测值做更深入的分析。

混淆矩阵 Confusion Matrix

混淆矩阵,在无监督学习中被称为匹配矩阵(matching matrix),之所以叫混淆矩阵,是因为我们能够很 easy 从图表中看到分类器有没有将样本的类别给混淆了。矩阵每一列表示分类器预测值,每一行表示样本真实值。

混淆矩阵如下图所示:

这里牵扯到三个方面:真实值,预测值,预测值和真实值之间的关系,其中任意两个方面都可以确定第三个。

通常取预测值和真实值之间的关系、预测值对矩阵进行划分:

  • True positive (TP) 真实值为Positive,预测正确(预测值为Positive)
  • True negative (TN) 真实值为Negative,预测正确(预测值为Negative)
  • False positive (FP) 真实值为Negative,预测错误(预测值为Positive),第一类错误, Type I error。
  • False negative (FN) 真实值为Positive,预测错误(预测值为 Negative),第二类错误, Type II error。

混淆矩阵的衍生指标:

准确率 (查准率) Precision

Precision 是分类器预测的正样本中预测正确的比例,取值范围为[0,1],取值越大,模型预测能力越好。

召回率 (查全率) Recall

Recall 是分类器所预测正确的正样本占所有正样本的比例,取值范围为[0,1],取值越大,模型预测能力越好。

应用场景:

问题 7: 某一家互联网金融公司风控部门的主要工作是利用机器模型抓取坏客户。互联网金融公司要扩大业务量,尽量多的吸引好客户,此时风控部门该怎样调整Recall和Precision?如果公司坏账扩大,公司缩紧业务,尽可能抓住更多的坏客户,此时风控部门该怎样调整Recall和Precision?

如果互联网公司要扩大业务量,为了减少好客户的误抓率,保证吸引更多的好客户,风控部门就会提高阈值,从而提高模型的查准率Precision,同时,也会放进一部分坏客户,导致查全率Recall下降。如果公司要缩紧业务,尽可能抓住更多的坏客户,风控部门就会降低阈值,从而提高模型的查全率Recall,但是这样会导致一部分好客户误抓,从而降低模型的查准率 Precision。

根据以上几个案,我们知道随着阈值的变化Recall和Precision往往会向着反方向变化,这种规律很难满足我们的期望,即Recall和Precision同时增大。

问题 8: 有没有什么方法权衡Recall和Precision 的矛盾?

我们可以用一个指标来统一Recall和Precision的矛盾,即利用Recall和Precision的加权调和平均值作为衡量标准。

$F_\beta$ Score

Precision和Recall 是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下Precision高、Recall 就低,Recall 高、Precision就低。为了均衡两个指标,我们可以采用Precision和Recall的加权调和平均(weighted harmonic mean)来衡量,即$F_\beta$ Score,公式如下:

$\beta$ 表示权重,

$\begin{equation}\begin{split} F_{\beta}& = \frac{(1+\beta^2)\times\text{P}\times\text{R}}{\beta^2\times\text{P}+\text{R}} \ & = \frac {1}{\frac{\beta^2}{(1+\beta^2)\times R}+\frac{1}{(1+\beta^2)\times P}}\ & = \frac {1}{\frac{1}{(1+\frac{1}{\beta^2})\times R}+\frac{1}{(1+\beta^2)\times P}} \end{split}\end{equation}$

当$\beta \rightarrow 0 : F_{\beta} \approx P$ ;当$\beta \rightarrow \infty: F_{\beta} \approx R$。

通俗的语言就是:$\beta$ 越大,Recall的权重越大,$\beta$越小,Precision的权重越大。

随着如 $\beta=1$ 为$F_1$,此时Precision和Recall的权重相等,公式如下:

由于$F_\beta$ Score 无法直观反映数据的情况,同时业务含义相对较弱,实际工作用到的不多。

问题 9: 根据以下混淆矩阵计算Recall, Precision,TPR,FPR?

问题 10: 有没有办法观察模型好坏随阈值的变化趋势呢(提示:利用TPR, FPR两个指标)?

有,ROC(Receiver Operating Characteristic)曲线

问题 11: lr模型输出的是概率,需要设置阈值才能得到好坏客户,从而得到混淆矩阵,有没有一种指标不依赖于阈值?

有,AUC

ROC 和 AUC

AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为”接受者操作特性曲线”。也就是说ROC是一条曲线,AUC是一个面积值。

ROC曲线为 FPR 与 TPR 之间的关系曲线,这个组合以 FPR 对 TPR,即是以代价 (costs) 对收益 (benefits),显然收益越高,代价越低,模型的性能就越好。

  • x 轴为假阳性率(FPR):在所有的负样本中,分类器预测错误的比例
  • y 轴为真阳性率(TPR):在所有的正样本中,分类器预测正确的比例(等于Recall)

为了更好地理解ROC曲线,我们使用具体的实例来说明:

如在医学诊断的主要任务是尽量把生病的人群都找出来,也就是TPR越高越好。而尽量降低没病误诊为有病的人数,也就是FPR越低越好。

不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的TPR应该会很高,但是FPR也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么TPR达到1,FPR也为1。

我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。

我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR

Original: https://www.cnblogs.com/nxld/p/9741716.html
Author: Little_Rookie
Title: 机器学习评估指标的前世今生

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8066/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部