终于有人把准确率、精度、召回率、均方差和R²都讲明白了

导读:在真实场景中,模型很少能成功地预测所有的内容。我们知道应该使用测试集的数据来评估我们的模型。但是这到底是如何工作的呢?

简短但不是很有用的答案是,这取决于模型。人们已经提出了各种评分函数,它可用于在所有可能的场景中评估训练模型。好消息是,很多评分函数实际上是scikit-learn的metrics模块的一部分。

让我们快速了解一些最重要的评分函数。

作者:阿迪蒂亚·夏尔马(Aditya Sharma)、维什韦什·拉维·什里马利(Vishwesh Ravi Shrimali)、迈克尔·贝耶勒(Michael Beyeler)

来源:大数据DT(ID:hzdashuju)

01 使用准确率、精度和召回率评分分类器

在二值分类任务中只有两个不同的类标签,有许多不同的方法来度量分类性能。一些常见的评估指标如下所示:

  • accuracy_score:准确率(accuracy)计算测试集中预测正确的数据点数,并返回正确预测的数据点的比例。以将图片分类为猫或狗为例,准确率表示正确分类为包含猫或狗的图片比例。该函数是最基本的分类器评分函数。

  • precision_score:精度(precision)描述了一个分类器不把包含狗的图片标记为猫的能力。或者说,在分类器认为测试集所有包含猫的图片中,精度是实际包含一只猫的图片比例。

  • recall_score:召回率(recall,或者敏感度)描述了一个分类器检索包含猫的所有图片的能力。或者说,测试集所有包含猫的图片中,召回率是正确识别为猫的图片比例。

假设我们有一些ground truth(正确与否取决于我们的数据集)类标签,不是0就是1。我们使用NumPy的随机数生成器随机生成数据点。显然,这意味着只要我们重新运行代码,就会随机生成新数据点。

我们希望你能够运行代码,并总是得到和书中相同的结果。实现此目的的一个很好的技巧是固定随机数生成器的种子。这会保证你在每次运行脚本时,都以相同的方式初始化生成器:

1)我们使用下列代码可以固定随机数生成器的种子:

import numpy as np
np.random.seed(42)

2)然后,选取(0, 2)范围内的随机整数,我们可以生成0或1的5个随机标签:

y_true = np.random.randint(0, 2, size=5)
y_true

Out:

array([0, 1, 0, 0, 0])

在文献中,这两类有时也被称为正样例(类标签是1的所有数据点)和负样例(其他所有数据点)。

假设我们有一个分类器试图预测之前提到的类标签。为方便讨论,假设分类器不是很聪明,总是预测标签为1。通过硬编码预测标签,我们可以模拟这种行为:

y_pred = np.ones(5, dtype=np.int32)
y_pred

Out:

array([1, 1, 1, 1, 1], dtype=int32)

我们预测的准确率是多少?

如前所述,准确率计算测试集中预测正确的数据点数,并返回测试集大小的比例。我们只是正确地预测了第二个数据点(实际标签是1)。除此之外,实际标签是0,而我们预测为1。因此,我们的准确率应该是1/5或者0.2。

准确率指标的一个简单实现可总结为:预测的类标签与实际类标签相符的所有情况。

test_set_size = len(y_true)

predict_correct = np.sum(y_true == y_pred)

predict_correct / test_set_size

Out:

0.2

scikit-learn的metrics模块提供了一个更智能、更便捷的实现:


  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值