前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习实战---详解模型评价指标

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

作者头像
机器学习算法工程师
发布2018-03-06 14:01:37
1.3K0
发布2018-03-06 14:01:37
举报

作者:王千发

编辑:王抒伟

全篇概述:

对于分类算法,我们熟知的评价指标是准确率(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

本文函数都是深度学习常用的激活函数当然还有其它的,大家可以维基百科!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法全栈工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档