sklearn的metrics,如何原理上理解预测结果的得分好坏?
发布于 作者:苏南大叔 来源:程序如此灵动~

从原理上分析模型预测结果得分的算法,这些预测模型的得分算法包括:查准率precision
、召回率recall
、以及整体的f1
得分,文章的主要内容就是模拟这些得分是怎么计算的。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程感想感悟。本文的模型得分算法分析实验的测试环境:win10
,python@3.11.0
,sklearn@1.2.2
。本文的基本思路前提是:二分法(非此即彼),而不是多分类。注意:本文所描述的评分是【分类任务/classification tasks
】的评分标准。如果不是分类任务,请不要使用这个标准。
基本数据
这里还是以二分类数据为例子,非零即一。场景假设为某种进口海鱼的安全合格率,这里假设1
为目标检查数据,即不合格的海鱼。海关要尽力把数据为1
的海鱼,即受污染的海鱼给找出来。
某一批海洋鱼类产品,
- 它的实际情况是:
[0 0 0 1 1 1]
- 大数据模型根据机器学习的结果预测的结果是:
[1 1 1 0 0 1]
。
基础分类
专业术语里面使用"阳性/Positive"来表示有问题,"阴性/Negative"表示没有问题。使用"真实/True"来表示符合情况,"虚假/False"来表示不符合情况。所以,这里对数据分成了分类,即:
变量 | 含义 | 预测 | 实际 | 是否准确 | 解释 |
---|---|---|---|---|---|
tp | 正确的阳性结论 | 1 | 1 | 准确 | 有问题,还被预测出来了 |
fp | 虚假的阳性结论 | 1 | 0 | 不准确 | 没问题,却被错误的预测出来了 |
tn | 正确的阴性结论 | 0 | 0 | 准确 | 没问题,同时也确实被预测出来 |
fn | 虚假的阴性结论 | 0 | 1 | 不准确 | 有问题,但是没被预测出来 |
算法上实际计算的是上述分类的样本总数:

查准率 precision_score
精准度可以有三种表述:
- 阳性有关的样本中,预测准确的样本比率。【查准率】
- 阴性有关的样本中,预测准确的样本比率。
- 所有样本中,预测准确的样本比率。
精准度,实际上计算的是阳性精准度。并不是阴性精准度,也不是整体的精准度【重大误解】。
尽量不冤枉好人,也不放过每个坏人。
算法是:

本文的例子中:
对比代码:
召回率recall_score
召回率就是:有问题的样本被召回(预测)的比率,无论有多少被错误召回的样本,只计算被正确召回的比率。
宁可错杀一千,不可放过敌军一个。
涉及的就是阳性相关的预测值:
- 预测为阳性,[==>]真实阳性,准确(tp)。真实阴性,不准确(fp)。
- 预测为阴性,真实阴性,准确(tn)。[==>]真实阳性,不准确(fn)。
算法是:
对比代码:
f1得分f1_score
f1
得分是综合上述两者得分的,f1
得分越低,证明模型选的越不好。计算方法是:
对比代码:
测试代码
输出值为:
从预测结果上来看,f1
得分实在是低的可怜。“这个”模型很失败,不合适。

结束语
查准率原来是阳性查准率,召回率居然可以容错,f1
得分才是最终的模型评判标准。更多机器学习文章,可以参考:


