跟我一起学scikit-learn13:查准率和召回率

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

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

那么怎么样来评价这类问题的模型好坏呢?我们引入了另外两个概念,查准率(Precision)和召回率(Recall)。还是以癌症筛选为例:
cancer.png
查准率和召回率的定义如下:
precision_recall.png
如何理解True/False和Positive/Negative?

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值