研究机器学习都会研究分类算法,当建立了一个分类算法的模型之后,模型的好坏是需要量化的,最重要的就是分类器的评价指标。那下面主要谈谈分类器的指标。(在这里,主要是介绍一下两类的分类器的评价指标)
下面我们可以看一下两类结果的分析:
1、accuracy(正确率)
它表示的预测结果正确比例。包括正例和负例。
accuracy=(TP + TN) /(P+N)
2、precision(精确度)
它表示的是预测是正例的结果中,实际为正例的比例。
precision=TP/(TP+FP)
3、recall(召回率)
它表示的是实际为正例样本中,预测也为正例的比例。
recall=TP/(TP+FN)
4、F1=2(P*R)/(P+R)
它实际上是precision和recall的一个综合指标。
5、AUC
说到AUC指标,首先需要说一下的是ROC曲线,ROC曲线表示的是以横轴为FPR(False Position Rate 假阳率),纵轴为TPR(True Position Rate 真阳率)的曲线,其中,FPR和TPR的计算方法如下:
由一连串(FPR,TPR)这样的点构成了一条曲线,该曲线就是ROC曲线。而ROC曲线下的面积就是AUC(Area under the curve of ROC)。这就是AUC指标的由来。
对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值构成的点,才能得到这样的曲线,这又是如何得到的呢?
实际上,在我们的分类器模型输出的结果中,它是一种概率输出,并没有给出实际的类别。我们可以根据这个类动态调整某个预测值是否归为哪一类。现在,假如我们已经得到了所有预测样本的概率输出(属于正样本的概率),现在的问题是如何改变这个阈值(概率输出)得到每个样本的类别?我们可以根据每个测试样本属于正样本的概率值(Score)从大到小排序。
下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。
接下来,我们从高到低,依次将“Score”值作为阈值,当测试样本属于正样本的概率大于或等于这个阈值时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的阈值,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:
当我们将阈值设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当阈值取值越多,ROC曲线越平滑。
可以根据ROC来确定划定正样本的概率边界选择在哪里比较合适!
6、为什么选择ROC、AUC作为分类器的评价指标呢?
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:
在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。