利用sklearn的metrics,如何评估模型预测结果的好坏?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
已经有这么多机器学习的预测模型(换参数之后更多)了,模型自带了一个model.score(X_test, y_test)
来评价自己的预测结果。那么,sklearn
作为这些模型的合集,也是有个专门的评价体系的,相关的函数都放在sklearn.metrics.
里面。本文将对其内置的三个模型预测结果的评分函数进行阐述。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程相关经验文章。本文测试环境:win10
,python@3.11.0
,sklearn@1.2.2
。
已知的预测模型
截止到发稿,苏南大叔的文章里面,写过的预测模型有下面这些:
这些模型的预测过程的最后,都会输出预测结果:
predictions = model.predict(X_test)
对本次预测的效果进行自评分:
model.score(X_test, y_test)
metrics示例代码
想对预测结果进行评分,
- 获得预测的结果,这个预测结果是属于二分类的概念,即非黑即白,符合结果或者不符合结果。
- 必须知道数据真实的情况,一般来说就是测试集的
y_test
值,记录了真实的情况,和预测的数据可能符合也可能不符合。
# ...
predictions = model.predict(X_test)
score = model.score(X_test, y_test)
需要数据 | metrics参数 | 模型变量 |
---|---|---|
真实数据 | y_true | y_test |
预测结果 | y_pred | predictions |
y_test = [] # 真实结果
predictions = [] # 预测数据
from sklearn.metrics import precision_score, recall_score, f1_score
p = precision_score(y_test, predictions) # 查准率
r = recall_score(y_test, predictions) # 召回率
f1 = f1_score(y_test, predictions) # f1得分(f1值越高,模型预测越有价值)
查准率:precision_score()
这里的中文表述为:查准率,并不是“精准度”。所以它表述的是:被认定为有问题的样品中,真正有问题的样品的比率。尽量不冤枉好人,也不放过每个坏人。
metrics.precision_score(y_true, y_pred)
两者的参数是不同的:
函数名称 | 形参 | 实参 |
---|---|---|
model.score() | X_test, y_test | |
metrics.precision_score() | y_true, y_pred | y_test, predictions |
举例:一共出库100箱食品货物,其中有一箱子是过期需要追回的,实际追回了五箱子,其中就有目标货物。所以,查准率是20%。
召回率/查全率:recall_score()
召回率(查全率),讲求一个目标数据的发现率,宁可错杀一百,不可放过一个。只要目标数据都找到,有多少被误判的都无所谓。
metrics.recall_score(y_true, y_pred)
举例:出库的一大车食品货物里面,有一箱过期食品。结果把两大车货物又拉回来了,那么召回率是100%。即使绝大多数货物都是没有问题的。
f1得分:metrics.f1_score()
metrics.f1_score(y_true, y_pred)
这个f1
得分实际上包含了查准率(precision_score)和查全率(recall_score)的概念,是两者的综合描述。所以,f1
得分越高,就越能体现模型预测的精准。
结束语
感觉这个recall
英文单词对于“查全”的意思表述的不是很精确。更多基于sklearn
的机器学习的经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。