机器学习:ACC、ROC和AUC

   

引言

   

很多时候我们都用到ROCAUC来评判一个二值分类器的优劣,其实AUCROC息息相关,AUC就是ROC曲线下部分的面积,所以需要首先知道什么是ROCROC怎么得来的。然后我们要知道一般分类器会有个准确率ACC,那么既然有了ACC,为什么还要有ROC呢,ACCROC的区别又在哪儿,这是我喜欢的一种既生瑜何生亮问题。

   

最后又简单说明了一下有了ROC之后,为什么还要有AUC

   

ROC简介

   

ROC曲线的横坐标为false positive rate(FPR)即负类样本中被判定为正类的比例,也就是传说中的误纳率

   

纵坐标为true positive rate(TPR)即正类样本中被判定为正类的样本,1-TPR也就是传说中的误拒率

   

接下来我们考虑ROC曲线图中的四个点和一条线。

   

第一个点,(0,1),即左上角的点,在这个点意味着FPR=0TPR=1,稍微翻译一下就是误纳率为0,误拒率为0,再翻译成人话就是负类样本中被判断为正类的比例为0,说明负类样本都被判断为负类,判断正确,正类样本中被判断为正类的比例为1,说明正类样本都被判断正确,所以这是一个完美的分类器,它将所有的样本都正确分类。

   

第二个点,(1,0),即右下角的点,在这个点意味着FPR=1TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确分类。把该判断为正类的判断为负类,把该判断为负类的判断为正类

   

第三个点,(0,0),即左下角的点,在这个点意味着FPR=TPR=0,可以发现该分类器预测所有的样本都为负样本(negative),在后面我们可以看到这种情况说明阈值选得过高。

   

第四个点(1,1),即右下角的点,分类器实际上预测所有的样本都为正样本,在后面我们可以看到这种情况说明阈值选得过低。

   

如何画ROC曲线

   

由于每次从分类模型中只能得到一个用于判定分类结果的分数,要将这个分数与一个阈值进行比较,判定这个样本属于哪个类,所以我们可以更改阈值,得到不同的分类结果,也就是不同的TPR和FPR

   

之前说到当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点

   

将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。

   

既然有了ACC为什么要有ROC呢(既生瑜何生亮呢)

   

我们知道,我们常用ACC准确率来判断分类器分类结果的好坏,既然有了ACC为什么还需要ROC呢,很重要的一个因素是实际的样本数据集中经常会出现数据偏斜的情况,要么负类样本数大于正类样本数,要么正类样本数大于负类样本数。

   

比如说我负类样本数有9,000个,正类样本数有100个,如果阈值选得过高,正类样本都判断为负类,同样负类样本都判定为负类,那么准确率90%,看起来还不错,但是如果考虑ROC中的TPRFPR的话就会知道,此时的TPR=0FPR=0,也就是误纳率是0,但是误拒率是100%,是左下角的点,并不是很好的一个点,而原来的ACC就不具有代表性

   

既然有了ROC为什么要有AUC呢(既生瑜何生亮呢)

   

使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而相对于AUC是个数值而言,对应AUC更大的分类器效果更好,数值更好判断一些。

   

posted @ 2015-04-28 20:40  keedor  阅读(13960)  评论(1编辑  收藏  举报