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

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


{‘accuracy’: make_scorer(accuracy_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 决定系数

## 平均绝对误差 MAE

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

## 决定系数 $R^2$

$\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}$

## 解决评估指标鲁棒性问题

• 剔除异常值

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

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

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

## 精度 Acc

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

## 混淆矩阵 Confusion Matrix

• 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]，取值越大，模型预测能力越好。

## $F_\beta$ Score

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

$\beta$ 表示权重，

$$$\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}$$$

## ROC 和 AUC

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

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

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

(0)