机器学习之分类器性能指标之ROC曲线、AUC值

分类器性能指标之ROC曲线、AUC值

一 roc曲线

1、roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-Specificity)

纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率)

2针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况.

(1)若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)

(2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)

(3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)

(4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)

TP:正确的肯定数目

FN:漏报,没有找到正确匹配的数目

FP:误报,没有的匹配不正确

TN:正确拒绝的非匹配数目

列联表如下,1代表正类,0代表负类:

机器学习之分类器性能指标之ROC曲线、AUC值

由上表可得出横,纵轴的计算公式:

(1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity

(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity

(3)真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR=1-FPR。Specificity

假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

如下面这幅图,(a)图中实线为ROC曲线,线上每个点对应一个阈值。

 机器学习之分类器性能指标之ROC曲线、AUC值

横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。


二 如何画roc曲线

假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图*有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。

机器学习之分类器性能指标之ROC曲线、AUC值


第二步,让我们依次来看每个样本。对于样本1,如果我们将他的score值做阈值,也就是说,只有score大于等于0.9时,我们才把样本归类到真阳性(true positive),这么一来, 在ROC曲线图中,样本1对应的混淆矩阵(confusion matrix)为

机器学习之分类器性能指标之ROC曲线、AUC值

其中,只有样本1我们看作是正确分类了(也就是我们预测是正样本,实际也是正样本);其余还有9个实际是正样本,而我们预测是负样本的(2,4,5,6,9,11,13,17,19);剩下的实际是负样本,我们都预测出是负样本了(也就是false positive = 0, true negative = 10)。

从混淆矩阵中,我们可以算出X轴坐标(false positive rate)= 0/(0+10)= 0 和Y轴坐标(true positive rate)= 1/(1+9)= 0.1,这就是下图中的第一个点

机器学习之分类器性能指标之ROC曲线、AUC值机器学习之分类器性能指标之ROC曲线、AUC值

同理我们来看样本3,它的混淆矩阵为

机器学习之分类器性能指标之ROC曲线、AUC值机器学习之分类器性能指标之ROC曲线、AUC值

其中,样本1,2我们看作是正确分类了(也就是我们预测是正样本,实际也是正样本);其余还有8个实际是正样本,而我们预测是负样本的(2,4,5,6,9,11,13,17,19);而样本3是假阳性(我们预测是正样本,实际是负样本);剩下的(7,8,10,12,14,15,16,18,20)实际是负样本,我们都预测出是负样本了(也就是false positive = 1, true negative = 9)。

从样本3的混淆矩阵中,我们可以算出X轴坐标(false positive rate)= 1/(1+9)= 0.1 和Y轴坐标(true positive rate)= 2/(2+8)= 0.2,这就是下图中的第三个点。

依次把20个样本的混淆矩阵列出来,再算出X轴坐标(false positive rate) 和Y轴坐标(true positive rate),就可以得到ROC曲线了。

AUC(Area under Curve):Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。

首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。

三 为什么使用Roc和Auc评价分类器

既然已经这么多标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。下图是ROC曲线和Presision-Recall曲线的对比:

机器学习之分类器性能指标之ROC曲线、AUC值 

在上图中,(a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线。

(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果,可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。

参考:

http://alexkong.net/2013/06/introduction-to-auc-and-roc/

http://blog.csdn.net/abcjennifer/article/details/7359370

https://www.zhihu.com/question/22844912