《scikit-learn机器学习常用算法原理及编程实战》—3.6 查准率和召回率

举报
华章计算机 发表于 2019/05/31 17:11:58 2019/05/31
【摘要】 本书摘自《scikit-learn机器学习常用算法原理及编程实战》一书中的第3章,第3.6节,编著是黄永昌 .

3.6  查准率和召回率

  有时候,模型准确性并不能评价一个算法的好坏。比如针对癌症筛查算法,根据统计,普通肿瘤中癌症的概率是0.5%。有个机器学习算法,测试得出的准确率是99.2%,错误率是0.8%。这个算法到底是好还是坏呢?如果努力改进算法,最终得出的准确率是99.5%,错误率是0.5%,模型到底是变好了还是变坏了呢?

  坦白讲,如果单纯从模型准确性的指标上很难判断到底是变好了还是变坏了。因为这个事情的先验概率太低了,假如写了一个超级简单的预测函数,总是返回0,即总是认为不会得癌症,那么我们这个超级简单的预测函数的准确率是99.5%,错误率是0.5%。因为总体而言,只有那0.5%真正得癌症的却被我们误判了。

  那么怎么样来评价这类问题的模型好坏呢?我们引入了另外两个概念,查准率(Precision)和召回率(Recall)。还是以癌症筛查为例:

预测数据/实际数据

image.png

  查准率和召回率的定义如下:

image.png


  如何理解True/False和Positive/Negative?True/False表示预测结果是否正确,而Positive/Negative表示预测结果是1(恶性肿瘤)或0(良性肿瘤)。所以,TruePositive表示正确地预测出恶性肿瘤的数量;FalsePositive表示错误地预测出恶性肿瘤的数量;FalseNegative表示错误地预测出良性肿瘤的数量。

  在处理先验概率低的问题时,我们总是把概率较低的事件定义为1,并且把y=1作为 Positive的预测结果。针对上文介绍的,对总是返回0的超级简单的肿瘤筛查预测函数,我们使用查准率和召回率来检验模型性能时,会发现查准率和召回率都是0,这是因为它永远无法正确地预测出恶性肿瘤,即 TruePositive永远为0。

  在scikit-learn 里,评估模型性能的算法都在sklean.metrics包里。其中,计算查准率和召回率的API分别为sklean.metrics.precision_score()和sklean.metrics.recall_score()。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。