《scikit-learn机器学习常用算法原理及编程实战》—3.6 查准率和召回率
3.6 查准率和召回率
有时候,模型准确性并不能评价一个算法的好坏。比如针对癌症筛查算法,根据统计,普通肿瘤中癌症的概率是0.5%。有个机器学习算法,测试得出的准确率是99.2%,错误率是0.8%。这个算法到底是好还是坏呢?如果努力改进算法,最终得出的准确率是99.5%,错误率是0.5%,模型到底是变好了还是变坏了呢?
坦白讲,如果单纯从模型准确性的指标上很难判断到底是变好了还是变坏了。因为这个事情的先验概率太低了,假如写了一个超级简单的预测函数,总是返回0,即总是认为不会得癌症,那么我们这个超级简单的预测函数的准确率是99.5%,错误率是0.5%。因为总体而言,只有那0.5%真正得癌症的却被我们误判了。
那么怎么样来评价这类问题的模型好坏呢?我们引入了另外两个概念,查准率(Precision)和召回率(Recall)。还是以癌症筛查为例:
预测数据/实际数据
查准率和召回率的定义如下:
如何理解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()。
- 点赞
- 收藏
- 关注作者
评论(0)