来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件

和回归模型一样,这一节介绍一些常用的方法来评估分类模型的好坏。

错误率和精度

错误率指分类错误的样本数占样本总数的比例:

E(f;D)=1mi=1mI(f(xi)yi) E(f;D) = \frac{1}{m} \sum_{i=1}^m I(f(x_i) \neq y_i)

精度和错误率相反,指的是分类正确的样本数占样本总数的比例:

acc(f;D)=1mi=1mI(f(xi)=yi)=1E(f;D) acc(f;D) = \frac{1}{m} \sum_{i=1}^m I(f(x_i) = y_i) = 1 - E(f;D)

查准率和查全率

对于二分类问题,可以将样本的真实类别和模型的识别结果组成四种情形:

  • True Positive
    • 真正类(TP),样本的真实类别是正类,并且模型识别的结果也是正类。
  • False Negative
    • 假负类(FN),样本的真实类别是正类,但是模型将其识别成为负类。
  • False Positive
    • 假正类(FP),样本的真实类别是负类,但是模型将其识别成为正类。
  • True Negative
    • 真负类(TN),样本的真实类别是负类,并且模型将其识别成为负类。

将这四种情形写成矩阵形式如下:

真实情况预测结果
正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

这个矩阵被称为 混淆矩阵(confusion matrix)。

查准率(precision)也叫做 准确率,定义如下:

P=TPTP+FP P = \frac{TP}{TP + FP}

查全率(recall)也叫做 召回率,定义如下:

R=TPTP+FN R = \frac{TP}{TP + FN}

查准率和查全率是一对矛盾的度量,一般情况下,查准率高时,查全率会偏低,查全率高时,查准率会偏低。以查准率为纵轴,查全率为横轴,可以画出查准率-查全率曲线,简称为 P-R曲线

如果一个学习器的 P-R 曲线把另一个学习器的 P-R 曲线包住,则可以断言第一个学习器要好,比如上图中 A 和 B 的性能要大于 C。

如果两个学习器的 P-R 曲线发生了交叉,如上图中 A 和 B,这时两个学习器的性能就不好比较了,通常有几种不同的方法:

  • 比较 P-R 曲线下面积的大小,但这个面积不太容易估算
  • 比较 BEP 大小,BEP 是 平衡点(Break-Even Point)的简称,它是 查准率 = 查全率 时的取值,比如上图中 A 的 BEP = 0.8,B 的 BEP = 0.72,所以 A 优于 B
  • 比较 F1F_1 大小,根据 F1F_1 还可以推广到一般形式 FβF_\beta,可以根据实际情况调整查准率和查全率的相对重要性

F1F_1 定义如下:

F1=2×P×RP+R F_1 = \frac{2 \times P \times R}{P + R}

F1F_1 是基于查准率和查全率的 调和平均(harmonic mean)定义出来的:

1F1=12(1P+1R) \frac{1}{F_1} = \frac{1}{2} (\frac{1}{P} + \frac{1}{R})

FβF_\beta 定义如下:

Fβ=(1+β2)×P×R(β2+P)+R F_\beta = \frac{(1 + \beta^2) \times P \times R}{(\beta^2 + P) + R}

FβF_\beta 是基于查准率和查全率的 加权调和平均 定义出来的:

1Fβ=11+β2(1P+β2R) \frac{1}{F_\beta} = \frac{1}{1 + \beta^2} (\frac{1}{P} + \frac{\beta^2}{R})

和算术平均(P+R2\frac{P+R}{2})和几何平均(P×R\sqrt{P \times R})相比,调和平均更重视较小值。

ROC 与 AUC

从混淆矩阵中还可以定义出 真正例率(True Positive Rate,简称 TPR)和 假正例率(False Positive Rate,简称 FPR):

TPR=TPTP+FN TPR = \frac{TP}{TP + FN} FPR=FPTN+FP FPR = \frac{FP}{TN + FP}

将 TPR 作为纵轴,FPR 作为横轴,可以画出 ROC 曲线(ROC 全称为 Receiver Operating Characteristic,受试者工作特征):

通过 ROC 也可以判断两个学习器的性能优劣,如果一个学习器的 ROC 包住另一个学习器的 ROC,则认为第一个学习器要好。如果两个学习器的 ROC 发生交叉,则可以通过比较 ROC 曲线下的面积,这个面积有一个专门的名称叫 AUC(Area Under ROC Curve)。