机器学习实战---详解模型评价指标

来源:互联网 发布:淘宝买家真实福利图 编辑:程序博客网 时间:2024/06/01 10:26


作者:王千发

编辑:王抒伟





全篇概述


对于分类算法,我们熟知的评价指标是准确率(accuracy),但是在实际问题中,我们想要得到一个优秀的模型,仅仅使用准确率是不够的。


比如在,乳腺癌数据集中:

其中201名没有复发(标记为0),85名复发(标记为1)。


显然这是一个不平衡数据集,假如我们的分类模型将所有的患者都预测为未复发,那么这个模型的准确率是(201/286)*100%也就是70.28%,这是一个比较高的准确率了。


但是这样的模型实际上是很差的,将所有的复发的人都预测为不会复发,那么患者得到这个信息之后如果不去检查和治疗,会导致疾病恶化甚至是出现生命危险。


因此,对于这类不平衡数据集,我们需要引入其他评价指标,分类模型的评价指标主要有准确率(accuracy),召回率(recall),精确率(precision),F1-Measure,ROC曲线和AUC等




说明一:

   分析

        我们只讨论二值分类器。对于上面乳腺癌数据集来说,假如分类器的预测结     果是将201个未复发患者中190个预测为未复发,21个预测为复发;85个复发患      者中,80个预测为复发,5个预测为未复发,可以得到如下一张表

    


这就是所谓的混淆矩阵(Confusion Matrix),通过混淆矩阵,我们很容易能够得到这几个值,TP=80,FN=5,FP=21,TN=190。


那么准确率的公式就是A=(TP+TN)/(TP+FN+FP+TN)*100%,召回率的公式是R=TP/(TP+FN)*100%,精确率的公式为P=TP/(TP+FP)*100%。


其中,准确率描述的是所有被预测的结果中预测正确的比例,召回率描述的是所有实际为正类的被预测为正类的比例(有一部分会被预测为负类),而精确率描述的是在预测为正类的结果中(有一部分实际上为负类)。


实际上是确实是正类的比例。而F1值是召回率和精确率的调和均值,也就是F=2*P*R/(P+R),是综合了二者之后的评价模型的指标。







说明二:ROC曲线和AUC值


接下来介绍ROC曲线和AUC值,下面是ROC曲线的示例:




正如我们从示例图中看到的,ROC


曲线的横坐标为false positive rate(FPR),纵坐标为true positive rate(TPR)。其中,FPR=FP/(FP+TN)负样本的判错率,TPR=TP/(TP+FN)正样本的判对率,接下来我们考虑ROC曲线图中的四个点和一条线。


第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。Wow,这是一个完美的分类器,它将所有的样本都正确分类。


第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(truepositive)=0,可以发现该分类器预测所有的样本都为负样本(negative)。


类似的,第四个点(1,1),分类器实际上预测所有的样本都为正样本。经过以上的分析,我们可以断言,ROC曲线越接近左上角,该分类器的性能越好,也就是说,ROC曲线所包围的面积越大,分类器的性能越好。







说明三:如何画ROC曲线


对于分类器而言,都有概率输出的功能,拿逻辑回归来举例,我们得到的是该样本属于正样本的概率和属于负样本的概率,属于正样本的概率大,那么就判为正类,否则判为负类,那么实质上这里的阈值是0.5。


假如我们有20个样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率



分析

第一行就是说样本1,实际是正样本,分类器认为它属于正样本的概率为0.9。接下来将score按照从大到小排列,依次作为阈值,那么我们能够得到20组(FPR,TPR)的坐标,绘制出来的图像就是ROC曲线。


比如,首先是将1作为阈值,属于正类的概率大于1才会被判为正类,那么FPR=TPR=0,以此类推。


AUC(AreaUnder Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。


使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。以上这些指标和ROC曲线绘制,通过sklearn包中metrics模块都可以比较容易实现。






说明四:总结


回到乳腺癌复发预测问题中,我们知道了仅仅使用准确率来评价模型是不够的,我们要计算出模型的召回率和精确率,在这个问题中,我们可以容忍FP,也就是将不会复发预测为会复发,大不了进行医学检查后发现不会复发。


但是不能容忍FN,也就是将会复发的患者预测为不会复发,这会带来很严重的后果。


也就是说我们希望召回率越大越好,尽量所有的正类都被预测为正类,精确率要求不那么高,即使负类被预测为正类也是可以的,那么我们就可以牺牲精确率来提升召回率。


首先可以画出分类器的ROC曲线来判断分类器本身的性能,ROC曲线越靠左上角,AUC值越接近1,分类器效果越好。


改变分类器的阈值,来提升模型的召回率,一般来说会牺牲精确率,不过是可以接受的,这样就可以将一个比较差的模型改造为一个可以使用的模型。


但是在实际中需要根据实际情况分析,比如我们要做的是垃圾邮件判断,那么此时召回率就不如精确率重要了,万一把重要邮件判断为垃圾邮件,还是比较棘手的。




说明五:参考资料

  1. https://machinelearningmastery.com/classification-accuracy-is-not-enough-more-performance-measures-you-can-use/

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

  3. https://blog.argcv.com/articles/1036.c




本文函数都是深度学习常用的激活函数当然还有其它的,大家可以维基百科!大家有其他看法,或者这里有漏洞都可以在群中探讨,欢迎留言或赞赏。




阅 


  1. 客官,来嘛,谷歌小菜请你尝尝!

  2. 机器学习之——自动求导

  3. 朴素贝叶斯实战篇之新浪新闻分类

  4. Object Detection R-CNN




燕哥开课了,赶紧报名!

还有机会获取签名机器学习图书赠送。



扫描燕哥微信号,

拉你进机器学习大牛群。

福利满满,名额已不多…

群里目前包括:

清华张长水教授,

清华顾险峰教授,

北大黄铁军教授,

西安电子科技大学焦李成教授,

新加坡南洋理工大学黄广斌教授,

北交李清勇教授

And so on……


原创粉丝点击