研究机器学习都会研究分类算法,当创建了一个分类算法的模型以后,模型的好坏是须要量化的,最重要的就是分类器的评价指标。那下面主要谈谈分类器的指标。(在这里,主要是介绍一下两类的分类器的评价指标)算法
下面咱们能够看一下两类结果的分析:机器学习
一、accuracy(正确率)学习
它表示的预测结果正确比例。包括正例和负例。测试
accuracy=(TP + TN) /(P+N)spa
二、precision(精确度)排序
它表示的是预测是正例的结果中,实际为正例的比例。ci
precision=TP/(TP+FP)it
三、recall(召回率)io
它表示的是实际为正例样本中,预测也为正例的比例。class
recall=TP/(TP+FN)
四、F1=2(P*R)/(P+R)
它其实是precision和recall的一个综合指标。
五、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来肯定划定正样本的几率边界选择在哪里比较合适!
六、为何选择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曲线则变化较大。