精确率、召回率、F1 值、ROC、AUC

转载
链接:https://www.zhihu.com/question/30643044/answer/225095821


本回答将以机器学习领域的"Hello World"数据集——MNIST为背景,来梳理一下关于分类问题模型评估的知识。分类问题有很多种,比如二分类(Binary Classification)、多类别分类(Multiclass Classification)、多类别分类(Multilabel Classification)和多输出分类(Multioutput Classification)等,本文以二分类问题为主要研究对象来展开介绍分类问题模型的评估方法及评估指标。

MNIST数据集

Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,MNIST一共有70000个手写数字图片,从Scikit-Learn中可以方便的获取该数据。(注:在用下面的代码获取数据集的时候是联网下载的,有时候可能因为网络问题使得数据集下载的不完整而导致错误,文末我已给出完整的文件:mnist-original.mat)

<img src="https://pic1.zhimg.com/50/v2-a301620063f3fb397c9fa36121134290_hd.jpg" data-rawwidth="455" data-rawheight="248" class="origin_image zh-lightbox-thumb" width="455" data-original="https://pic1.zhimg.com/v2-a301620063f3fb397c9fa36121134290_r.jpg">

每张图片都是28*28像素的,每个像素点都是一个特征,所以mnist数据集里的data有784个特征,本文以识别一个图片是否是5这样一个二分类问题来介绍模型评估方法k折交叉验证发(k-fold Cross-Validation)和一些评价指标精度(Precision)、查全率(Recall)、F1 score、P-R曲线以及ROC曲线。

将70000组数据按照6:1的比例分为训练集和数据集,为了保证在后续交叉验证中的每个验证集中都不缺少数字,将分好的数据打乱重排(shuffle)。


<img src="https://pic3.zhimg.com/50/v2-f714af8767f128c4c86dec8399786f8d_hd.jpg" data-rawwidth="557" data-rawheight="107" class="origin_image zh-lightbox-thumb" width="557" data-original="https://pic3.zhimg.com/v2-f714af8767f128c4c86dec8399786f8d_r.jpg">

方便起见,本文以识别一个图片是否为数字5这样一个二分类问题为例,训练了一个随机梯度下降分类器(SGD Classifier)

<img src="https://pic1.zhimg.com/50/v2-b60466688d3f47b93b3fc3c4a8b06e25_hd.jpg" data-rawwidth="364" data-rawheight="298" class="content_image" width="364">


性能评估方法:k折交叉验证法(k-fold Cross-Validation)

在一个问题的建模上,我们可以选择多种学习算法,甚至一个学习算法使用不同参数配置的时候也会产生差别明显的模型,那我们该选择哪种学习算法、使用哪个参数配置呢?这就是机器学习中“模型选择”问题,理想的解决方法当然是选择泛化误差最小的那个模型,但是我们无法直接获得泛化误差[1],通常我们通过实验测试的方法来对学习器的泛化误差来进行评估并作出选择,周志华老师在《机器学习》中提到了三个方法:留出法交叉验证法自助法。本文主要介绍常用的交叉验证法(也称k折交叉验证法)。

<img src="https://pic1.zhimg.com/50/v2-ae15e1de1cc23d09e48cbabd33b7fc44_hd.jpg" data-rawwidth="459" data-rawheight="243" class="origin_image zh-lightbox-thumb" width="459" data-original="https://pic1.zhimg.com/v2-ae15e1de1cc23d09e48cbabd33b7fc44_r.jpg">


一般我们将数据集分为训练集(training set)和测试集(test set),在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集D随机(分层抽样)分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。如上图所示

利用sklearn可以方面的实现:

<img src="https://pic4.zhimg.com/50/v2-590bd49c3fa90417ae2e9e0b6c5d169c_hd.jpg" data-rawwidth="514" data-rawheight="79" class="origin_image zh-lightbox-thumb" width="514" data-original="https://pic4.zhimg.com/v2-590bd49c3fa90417ae2e9e0b6c5d169c_r.jpg">

其中参数cv就是将数据分为3份,即k折交叉验证的k,分数是不是看起来很高,平均在95%以上了,使用的评价标准是accuracy,即正确预测的比例,但是事情并不那么简单,因为5这个数字,在所有数据集里大概只占了10%左右,即使我写一个算法,碰到的所有图片都认为不是5精度也可以达到90%!所以评价的指标非常重要,根据sklearn的文档,scoring参数可以有很多选择,详情见这里。下面主要介绍一些评价一个模型的指标。

性能评估指标

在介绍一些指标之前,首先要介绍一下混淆矩阵(Confusion Matrix)


<img src="https://pic4.zhimg.com/50/v2-c5d9056d4ee103b23bc65696906b459c_hd.jpg" data-rawwidth="727" data-rawheight="356" class="origin_image zh-lightbox-thumb" width="727" data-original="https://pic4.zhimg.com/v2-c5d9056d4ee103b23bc65696906b459c_r.jpg">

TN(true negatives):实际这个数字不是5,预测值也不是5

FN(false negatives):实际这个数字不是5,预测值却是5

FP(false positives):实际这个数字是5,预测值却不是5

TP(true positives):实际这个数字是5,预测值也是5

<img src="https://pic2.zhimg.com/50/v2-4753f84de6fb91571bfcbe6d5ad422f6_hd.jpg" data-rawwidth="491" data-rawheight="136" class="origin_image zh-lightbox-thumb" width="491" data-original="https://pic2.zhimg.com/v2-4753f84de6fb91571bfcbe6d5ad422f6_r.jpg">

查准率(Precision)

公式:

<img src="https://pic1.zhimg.com/50/v2-cb250eb0b1ee0ae82648c2d539a5dd4e_hd.jpg" data-rawwidth="179" data-rawheight="52" class="content_image" width="179">

查准率反映了被分类器判定的正例中真正的正例样本的比重,即目前预测出的所有为5的图片中,实际是5的比例。根据上面的混淆矩阵,可以算出precision = 4344/(4344+1307) = 76.87%,是不是比刚才的accuracy少了很多,因为accuracy = (53272+4344)/60000 = 96.03%,如果我还是没有说清楚,请再仔细看看上面那张混淆矩阵的图。

查全率(Recall)

公式:

<img src="https://pic4.zhimg.com/50/v2-78365c3411fd5af07082962a5b18a7e8_hd.jpg" data-rawwidth="149" data-rawheight="47" class="content_image" width="149">

查全率反映了被正确判定的正例占总的正例的比重,即在所有实际是5的图片中,我的分类器预测到了多少个(所占比例)。

F1 度量

公式:

<img src="https://pic2.zhimg.com/50/v2-e4a4afdb45d29d85170ae3b950c1e9a4_hd.jpg" data-rawwidth="512" data-rawheight="69" class="origin_image zh-lightbox-thumb" width="512" data-original="https://pic2.zhimg.com/v2-e4a4afdb45d29d85170ae3b950c1e9a4_r.jpg">

F1 score即precision和recall的调和平均数,它同时兼顾了分类模型的查准率和查全率


<img src="https://pic1.zhimg.com/50/v2-310a9a1ec8f76e371621b48eb5bd166b_hd.jpg" data-rawwidth="491" data-rawheight="240" class="origin_image zh-lightbox-thumb" width="491" data-original="https://pic1.zhimg.com/v2-310a9a1ec8f76e371621b48eb5bd166b_r.jpg">


为什么要有这么多度量指标呢?这是由我们的分类任务的性质所决定的,比如在商品推荐系统中,希望更精准的了解客户需求,避免推送用户不感兴趣的内容,查准率就更加重要;在疾病检测的时候,我们不希望查漏任何一项疾病,这时查全率就更重要。当两者都需要考虑时,F1度量就是一种参考指标。

为了更直观的分析,也可以采用作图的方式来评估:

P-R图

顾名思义,即以precision和recall为坐标的图


<img src="https://pic1.zhimg.com/50/v2-7738b849e41949545ad00189f44599a8_hd.jpg" data-rawwidth="596" data-rawheight="305" class="origin_image zh-lightbox-thumb" width="596" data-original="https://pic1.zhimg.com/v2-7738b849e41949545ad00189f44599a8_r.jpg">


<img src="https://pic4.zhimg.com/50/v2-d4e2eae8b439418877c1ab9ab58f7298_hd.jpg" data-rawwidth="433" data-rawheight="316" class="origin_image zh-lightbox-thumb" width="433" data-original="https://pic4.zhimg.com/v2-d4e2eae8b439418877c1ab9ab58f7298_r.jpg">

ROC曲线

ROC(receiver operating characteristic)是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积(AUC)越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。

ROC曲线的横轴是“假正例率”(FPR),公式为:

<img src="https://pic3.zhimg.com/50/v2-d9ede36040761d827f5826b7bbd1b032_hd.jpg" data-rawwidth="155" data-rawheight="51" class="content_image" width="155">

纵轴是“真正例率”(TPR),公式为:

<img src="https://pic3.zhimg.com/50/v2-d27521f553c077fa286afc202cf4efcb_hd.jpg" data-rawwidth="157" data-rawheight="48" class="content_image" width="157">

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

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


<img src="https://pic1.zhimg.com/50/v2-1ee2f890bfd795ce491bcbfd6cec041b_hd.jpg" data-rawwidth="432" data-rawheight="242" class="origin_image zh-lightbox-thumb" width="432" data-original="https://pic1.zhimg.com/v2-1ee2f890bfd795ce491bcbfd6cec041b_r.jpg">


<img src="https://pic3.zhimg.com/50/v2-e8507f5d6c826fa0fa6ac3d6dda6c6ea_hd.jpg" data-rawwidth="437" data-rawheight="314" class="origin_image zh-lightbox-thumb" width="437" data-original="https://pic3.zhimg.com/v2-e8507f5d6c826fa0fa6ac3d6dda6c6ea_r.jpg">


那什么时候用P-R曲线,什么时候用ROC曲线去评价模型呢?当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC曲线能够保持不变,但是P-R曲线上反映出的变化就比较大了。另一方面,当我们更关心FP(false positives)而不是FN(false negatives)时,也应该用P-R曲线来评价。

参考

[1]周志华. 机器学习[M]. 清华大学出版社, 2016.

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

[3]ROC曲线和PR曲线

[3]Hands On Machine Learning with Scikit Learn and TensorFlow

--------------------------------------------------------------------------------------------------------------------------


<img src="https://pic4.zhimg.com/50/v2-d97674419f51f3229602ca35bd87e794_hd.jpg" data-rawwidth="1235" data-rawheight="1677" class="origin_image zh-lightbox-thumb" width="1235" data-original="https://pic4.zhimg.com/v2-d97674419f51f3229602ca35bd87e794_r.jpg">


转载于:https://juejin.im/post/5aba209df265da23866feae8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值