机器学习中的评价指标

0 概述

为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每个样本进行预测,并根据预测结果计算评价分数。对于分类问题,常见的评价指标有准确率、精确率、召回率和F值等。给定测试集\(\tau =\left \{ \left ( \pmb{x}^{(1)},y^{(1)} \right ),...,\left ( \pmb{x}^{(N)},y^{(N)} \right )\right \}\),假设标签\(y^{(n)}\in \left \{ 1,...C \right \}\),用学习好的模型\(f(\pmb{x};\theta ^{*})\)对测试集中的每一个样本进行预测,结果为\(\left \{ \hat{y}^{(1)},...,\hat{y}^{(N)} \right \}\)。各指标定义如下:

1 准确率

准确率(Accuracy)是最常用的评价指标:

\[a=\frac{1}{N}\sum_{n=1}^{N}I(y^{(n)}=\hat{y}^{(n)}) \]

2 错误率

和准确率对应的就是错误率(Error Rate):

\[\varepsilon =1-a \]

3 精确率(查准率)和召回率(查全率)

对于一个分类问题,对类别c来说,模型在测试集上的结果可以分为以下四种情况:

  • 真正例(TP):真实类别为正例,预测类别为正例。

\[TP_{c}=\sum_{n=1}^{N}I(y^{(n)}=\hat y^{(n)}= c) \]

  • 假正例(FP):真实类别为负例,预测类别为正例。

\[FP_{c}=\sum_{n=1}^{N}I(y^{(n)}\neq c \cap \hat y^{(n)}= c) \]

  • 真负例(TN):真实类别为负例,预测类别为负例。
  • 假负例(FN):真实类别为正例,预测类别为负例。

\[FN_{c}=\sum_{n=1}^{N}I(y^{(n)}= c \cap \hat y^{(n)} \neq c) \]

类别c的混淆矩阵为:

类别c 预测为正 预测为负
真实类别为正 \(TP_{c}\) \(FN_{c}\)
真实类别为负 \(FP_{c}\) \(TN_{c}\)
  • 精确率定义如下:

\[P_{c} = \frac{TP_{c}}{TP_{c} + FP_{c}} \]

  • 召回率定义如下:

\[R_{c} = \frac{TP_{c}}{TP_{c} + FN_{c}} \]

  • F值定义如下:

\[F_{c} = \frac{(1+\beta ^{2})*P_{c} * R_{c}}{\beta ^{2} * P_{c} + R_{c}} \]

当\(\beta\)取值为1时,称为F1值。

4 宏平均和微平均

为了计算分类算法在所有类别上的总体精确率、召回率和F1值,经常使用两种平均方法,分别称为宏平均(Macro Average)和微平均(Micro Average)。

  • 宏平均的定义如下:

\[P_{macro} = \frac{1}{C}\sum_{c=1}^{C}P_{c} \]

\[R_{macro} = \frac{1}{C}\sum_{c=1}^{C}R_{c} \]

\[F1_{macro} = \frac{2*P_{macro} * R_{macro}}{P_{macro}+R_{macro}} \]

  • 微平均:微平均是每个样本的性能指标的平均值

\[P_{micro}=\frac{\sum_{n=1}^{n}TP_{i}}{\sum_{n=1}^{n}TP_{i}+\sum_{n=1}^{n}FP_{i}} \]

\[R_{micro}=\frac{\sum_{n=1}^{n}TP_{i}}{\sum_{n=1}^{n}TP_{i}+\sum_{n=1}^{n}FN_{i}} \]

\[F1_{micro}=\frac{2*P_{micro}*R_{micro}}{P_{micro}+R_{micro}} \]

5 例题

假设我们有一个两类鉴别模型和测试集,该模型在该测试集上预测结果与实际类别对比可得:
类别一
TP1 = 12,FP1 = 9,FN1 = 3

类别1 预测为正 预测为负
真实类别为正 12 3
真实类别为负 9 \(TN_{1}\)

易知:P1 = 57.1%,R1 = 80%
类别2
TP2 = 50,FP2 = 23,FN2 = 9

类别2 预测为正 预测为负
真实类别为正 50 9
真实类别为负 23 \(TN_{2}\)

易知:P2 = 68.5%,R2 = 84.75%
宏平均
P_macro P = (P1 + P2) / 2 = 62.82%
P_macro R = (R1 + R2) / 2 = 82.25
微平均
P_micro P = (TP1 + TP2) / (TP1 + TP2 + FP1 + FP2) = 65.96
P_micro R = (TP1 + TP2) / (TP1 + TP2 + FN1 + FN2) = 83.78

6 总结

如果每个class的样本数量差不多,那么宏平均和微平均没有太大差异,如果每个class的样本数量差异很大,而且你想:

  • 更注重样本量多的class:使用宏平均
  • 更注重样本量少的class:使用微平均

如果微平均大大低于宏平均,检查样本量多的class
如果宏平均大大低于微平均,检查样本量少的class

上一篇:Rust 的宏


下一篇:递归宏的应用