连载|模型评估与过拟合(下)

模型评估与过拟合

性能度量

我们在进行对学习器泛化能力评估的同时,不仅需要有效的评估方法,还需要一个好的衡量模型泛化能力的评价标准。我们先来学习一下在分类算法中经常用到的模型评价指标。

准确率(Accuracy)

分类正确的样本个数占总样本个数的比例。

Accuracy=ncorrectntotalAccuracy=\frac{n_{correct}}{n_{total}}

其中ncorrectn_{correct}就是被分类正确的样本数,ntotaln_{total}是总样本的个数。

精确率(Precision)

分类正确的正样本个数占分类器判定为正样本的个数的比例。

Precision=nright+ncorrect+Precision=\frac{n_{right+}}{n_{correct+}}

其中nright+n_{right+}表示分类正确的正样本的个数,ncorrect+n_{correct+}表示被分类器判定为正样本的个数。

召回率(Recall)

分类正确的正样本个数占真实正样本的个数的比例。

Recall=nright+nreally+Recall=\frac{n_{right+}}{n_{really+}}

其中nright+n_{right+}表示分类正确的正样本的个数,nreally+n_{really+}表示真实正样本个数的比例。

F1 score

F1 score可以认为是精确率和召回率的调和平均值。

F1score=2precisionrecallprecision+recallF1score = \frac{2*precision*recall}{precision+recall}

混淆矩阵

对于二分类问题我们可以将样例根据其真实类别与学习器预测类别的组合划分为真正例(True Positive)、假正例(False Positive)、真反例(True negative)、假反例(False negative),混淆矩阵如下表示:

连载|模型评估与过拟合(下)

在混淆矩阵下对精确率P和召回率R的定义如下:

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

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

对于精确率和召回率,其实是一对矛盾的度量,一般来说,精确率高时,召回率往往偏低,而召回率高时,精确率往往偏低。

ROC曲线(Receiver Operating Characteristic Curve)

关于ROC曲线中一个点的计算

ROC曲线经常作为评估2分类的重要指标,该曲线是2维平面内的曲线,其横坐标为假阳性率(FPR),纵坐标为真阳性率(TPR),二者的计算方式如下:

FPR=FPNFPR=\frac{FP}{N}

TPR=TPPTPR=\frac{TP}{P}

  • P:真实的正样本的数量
  • N:真实的副样本的数量
  • TP:P个正样本中被分类器预测为正样本的个数
  • FP:N个副样本中被分类器预测为正样本的个数

举个例子:

假设有10个人疑似感冒了,其中有3人确实是感冒了(P=3),另外的7个人没有感冒(N=7)。医院对这10位患者做了诊断,诊断出3个感冒的人,其中有2个人确实是感冒了(TP=2)。那么真阳性率TPR=TPP=23TPR=\frac{TP}{P}=\frac{2}{3}。对于7位没感冒的人来说,有一位被误诊为感冒(FP=1),那么假阳性率FPR=FPN=17FPR=\frac{FP}{N}=\frac{1}{7}

此时上述的结果就可以看作是ROC曲线中的一个点(17,23)(\frac{1}{7},\frac{2}{3})

如何绘制ROC曲线

ROC曲线实际上是通过不断的移动分类器的截断点来生成曲线上的关键点的。

我们首先要对样本的预测概率从高到低进行排序,在输出最终的正例、负例之前我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本会被判为负例。

样本序号 真实标签 输出概率
1 p 0.9
2 p 0.8
3 n 0.7
4 p 0.6
5 p 0.55
6 p 0.54
7 n 0.53
8 n 0.52
9 p 0.51
10 n 0.505
11 p 0.4
12 n 0.39
13 p 0.38
14 n 0.37
15 n 0.36
16 n 0.35
17 p 0.34
18 n 0.33
19 p 0.3
20 n 0.1

就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负例,那么FP和TP必然都为0,FPR和TPR也都为0,因此曲线的第一个点的坐标就是 (0,0)。当把截断点调整为0.9时,模型预测1号样本为正样本,并且该样本确实 是正样本,因此,TP=1,20个样本中,所有正例数量为P=10, 故TPR=TPP=110TPR=\frac{TP}{P}=\frac{1}{10};这里没有预测错的正样本,即FP=0,负样本总数N=10, 故FPR=FPN=0FPR=\frac{FP}{N}=0,对应ROC曲线上的点(0,0.1)。依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的ROC曲线,如下图所示:

连载|模型评估与过拟合(下)

AUC(Area Under Curve)

说完了绘制ROC曲线,那么如何来计算AUC呢?

根据名称我们就可以知道,AUC就是在计算ROC曲线下方的面积,该值能够量化的反映基于ROC曲线衡量出的模型性能。由于ROC的曲线一般都处于Y=X这条直线的上方(若果不是的化把概率反转变成1-p即可成为更好的分类器),所以AUC的取值一般在0.5-1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

P-R曲线(Precision-Recall)

P-R曲线的存在是为了进行精确率和召回率的衡量,P-R曲线顾名思义P就代表精确率而R就是召回率,在P-R曲线中横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本, 小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率,整条P-R 曲线是通过将阈值从高到低移动而生成的。下图中,其中实线代表 模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的 精确率和召回率。

连载|模型评估与过拟合(下)

由图可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1, 这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几 个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋 势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用 某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的 整体表现,才能够对模型进行更为全面的评估。

偏差与方差

偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据。

bias2(x)=(f(x)y)2bias^2(x)=(f(x)-y)^2

方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散。

var(x)=1n1n(xixˉ)2var(x)=\frac{1}{n}\sum^{n}_{1}(x_i-\bar{x})^2

下图中展示高(低)偏差和高(低)方差对应的数据分布情况。

连载|模型评估与过拟合(下)

连载|模型评估与过拟合(下)