python机器学习评估指标

介绍

python机器学习评估指标_第1张图片

不仅在机器学习中,而且在一般生活中,尤其是商业生活中,您都会听到诸如“您的产品有多准确?”之类的问题。或“你的机器有多精确?”。当人们收到诸如“这是该领域最准确的产品!”之类的回复时。或“这台机器具有可以想象的最高精度!”,这两个答案让他们感到很欣慰。他们不应该吗?事实上,术语accurateprecise经常可以互换使用。我们将在本文后面给出确切的定义,但简而言之,我们可以说:准确度是对某些测量值与特定值的接近程度的度量,而精度是测量值彼此之间的接近程度。

这些术语在机器学习中也非常重要。我们需要它们来评估 ML 算法或改善其结果。

我们将在 Python 机器学习教程的本章中介绍四个重要指标。这些指标用于评估分类结果。指标是:

  • 准确性
  • 精确
  • 记起
  • F1-Score

我们将介绍这些指标中的每一个,并讨论每个指标的优缺点。每个指标衡量分类器性能的不同之处。这些指标对于我们机器学习教程的所有章节都至关重要。

准确性

准确度是测量值与特定值的接近程度的度量,而精度是测量值彼此之间的接近程度,即不一定与特定值接近。换句话说:如果我们有一组来自相同数量的重复测量的数据点,如果它们的平均值接近被测量数量的真实值,则称该组是准确的。另一方面,如果值彼此接近,我们称集合为精确的。这两个概念是相互独立的,这意味着数据集可以是准确的,也可以是精确的,或者两者兼而有之,或者两者都不是。我们在下图中展示了这一点:

python机器学习评估指标_第2张图片

混淆矩阵

在我们继续使用术语 之前accuracy,我们要确保您了解混淆矩阵的含义。

混淆矩阵,也称为列联表或误差矩阵,用于可视化分类器的性能。

矩阵的列代表预测类的实例,行代表实际类的实例。(注意:也可以反过来。)

在二进制分类的情况下,该表有 2 行和 2 列。

我们想用一个例子来演示这个概念。

混淆矩阵示例

预测类别
实际
班级
42 8
18 32

这意味着分类器在 42 个案例中正确预测了一只猫,并将 8 个猫实例错误地预测为狗。它正确地将 32 个实例预测为狗。18 例被错误地预测为猫而不是狗。

分类准确度

我们对机器学习感兴趣,准确性也被用作统计指标。准确度是一种统计量度,定义为分类器做出的正确预测(真阳性 (TP) 和真阴性 (TN))的商除以分类器做出的所有预测的总和,包括假阳性 (FP)和假阴性(FN)。因此,量化二进制精度的公式为:

准确性=吨磷+吨N吨磷+吨N+F磷+FN

其中: TP = 真阳性;FP = 误报;TN = 真阴性;FN = 假阴性

对应的混淆矩阵如下所示:

预测类别
消极的 积极的
实际
班级
消极的 田纳西州 FP
积极的 FN TP

我们现在将计算猫狗分类结果的准确性。我们在这里看到的不是“真”和“假”,而是“猫”和“狗”。我们可以这样计算准确度:

TP  =  42 
TN  =  32 
FP  =  8 
FN  =  18

精度 =  ( TP  +  TN ) / ( TP  +  TN  +  FP  +  FN )
打印(精度)

输出:

0.74

假设我们有一个分类器,它总是预测“狗”。

预测类别
实际
班级
0 50
0 50

在这种情况下,我们的精度为 0.5:

TP , TN , FP , FN  =  0 , 50 , 50 , 0
精度 =  (TP  +  TN )/ (TP  +  TN  +  FP  +  FN )
打印(精度)

输出:

0.5

准确性悖论

我们将证明所谓的准确性悖论。

垃圾邮件识别分类器由以下混淆矩阵描述:

预测类别
垃圾邮件 火腿
实际
班级
垃圾邮件 4 1
火腿 4 91
TP , TN , FP , FN  =  4 , 91 , 1 , 4
准确性 =  (TP  +  TN )/ (TP  +  TN  +  FP  +  FN )
打印(准确性)

输出:

0.95

以下分类器仅预测“ham”并具有相同的准确性。

预测类别
垃圾邮件 火腿
实际
班级
垃圾邮件 0 5
火腿 0 95
TP , TN , FP , FN  =  0 , 95 , 5 , 0
精度 =  (TP  +  TN )/ (TP  +  TN  +  FP  +  FN )
打印(准确性)

输出:

0.95

该分类器的准确率为 95%,即使它根本无法识别任何垃圾邮件。

精确

精度是正确识别的阳性案例与所有预测的阳性案例的比率,即正确和错误预测的案例为positive。精度是检索到的与查询相关的文档的比例。公式:

pr电子C一世秒一世○n=吨磷吨磷+F磷

我们将通过一个例子来证明这一点。

预测类别
垃圾邮件 火腿
实际
班级
垃圾邮件 12 14
火腿 0 114

我们可以计算precision我们的例子:

TP  =  114 
FP  =  14 
# 公式中不需要 FN (0) 和 TN (12)!
精度 =  TP  /  ( TP  +  FP )
打印( f "precision: {precision:4.2f} " )

输出:

精度:0.89

练习:在继续阅读文本之前,请先考虑该值的precision含义。如果您查看我们的垃圾邮件过滤器示例的精确度度量,它会告诉您关于垃圾邮件过滤器质量的什么信息?理想垃圾邮件过滤器的混淆矩阵的结果是什么样的?什么更糟,高 FP 或 FN 值?

您将在以下说明中间接找到答案。

顺便说一下,理想的垃圾邮件过滤器的 FP 和 FN 值都为 0。

先前的结果意味着 100 封邮件中有 11 封会被归类为火腿,即使它们是垃圾邮件。89 个被正确归类为火腿。这是我们应该讨论错误分类成本的地方。当垃圾邮件不被识别为“垃圾邮件”,而是作为“火腿”呈现给我们时,这很麻烦。如果百分比不是太高,这很烦人但不是灾难。相比之下,当非垃圾邮件被错误地标记为垃圾邮件时,该电子邮件在许多情况下不会显示甚至自动删除。例如,这会带来失去客户和朋友的高风险。该措施precision没有对最后提到的这个问题类别作出任何声明。其他措施呢?

我们将看看recallF1-score

记起

召回率,也称为灵敏度,是正确识别的阳性案例与所有实际阳性案例的比率,它是“假阴性”和“真阳性”的总和。

r电子C一个升升=吨磷吨磷+FN

TP  =  114 
FN  =  0 
# 公式中不需要 FT (14) 和 TN (12)!
召回 =  TP  /  ( TP  +  FN )
打印( f "recall: {recall:4.2f} " )

输出:

召回:1.00

值 1 表示没有非垃圾邮件被错误地标记为垃圾邮件。对于一个好的垃圾邮件过滤器来说,这个值应该是 1 很重要。我们之前已经讨论过这个。

F1-分数

我们将检查的最后一个指标是 F1 分数。

F1=21r电子C一个升升+1pr电子C一世秒一世○n=2⋅pr电子C一世秒一世○n⋅r电子C一个升升pr电子C一世秒一世○n+r电子C一个升升

TF  =  7  # 我们将 True false 值设置为 5 % 
print ( " FN FP TP pre acc rec f1" ) 
for  FN  in  range ( 0 ,  7 ): 
    for  FP  in  range ( 0 ,  FN + 1 ): 
        # the sum FN、FP、TF 和 TP 的
        值为100:TP  =  100  -  FN  -  FP  -  TF 
        #print(FN, FP, TP, FN+FP+TP+TF) 
        precision  =  TP  /  ( TP  +  FP)
        准确率 =  ( TP  +  TN ) / ( TP  +  TN  +  FP  +  FN )
        召回率 =  TP  /  ( TP  +  FN ) 
        f1_score  =  2  * 准确率 * 召回率 /  (准确率 + 召回率)
        打印( f " {FN:6.2f} {FP:6.2f}{TP:6.2f} " ,  end = "" )
        打印( f" {precision:6.2f}{accuracy:6.2f}{recall:6.2f}{f1_score:6.2f} " )

输出:

  FN FP TP pre acc rec f1
  0.00 0.00 93.00 1.00 1.00 1.00 1.00
  1.00 0.00 92.00 1.00 0.99 0.99 0.99
  1.00 1.00 91.00 0.99 0.99 0.99 0.99
  2.00 0.00 91.00 1.00 0.99 0.98 0.99
  2.00 1.00 90.00 0.99 0.98 0.98 0.98
  2.00 2.00 89.00 0.98 0.98 0.98 0.98
  3.00 0.00 90.00 1.00 0.98 0.97 0.98
  3.00 1.00 89.00 0.99 0.98 0.97 0.98
  3.00 2.00 88.00 0.98 0.97 0.97 0.97
  3.00 3.00 87.00 0.97 0.97 0.97 0.97
  4.00 0.00 89.00 1.00 0.98 0.96 0.98
  4.00 1.00 88.00 0.99 0.97 0.96 0.97
  4.00 2.00 87.00 0.98 0.97 0.96 0.97
  4.00 3.00 86.00 0.97 0.96 0.96 0.96
  4.00 4.00 85.00 0.96 0.96 0.96 0.96
  5.00 0.00 88.00 1.00 0.97 0.95 0.97
  5.00 1.00 87.00 0.99 0.97 0.95 0.97
  5.00 2.00 86.00 0.98 0.96 0.95 0.96
  5.00 3.00 85.00 0.97 0.96 0.94 0.96
  5.00 4.00 84.00 0.95 0.95 0.94 0.95
  5.00 5.00 83.00 0.94 0.95 0.94 0.94
  6.00 0.00 87.00 1.00 0.97 0.94 0.97
  6.00 1.00 86.00 0.99 0.96 0.93 0.96
  6.00 2.00 85.00 0.98 0.96 0.93 0.96
  6.00 3.00 84.00 0.97 0.95 0.93 0.95
  6.00 4.00 83.00 0.95 0.95 0.93 0.94
  6.00 5.00 82.00 0.94 0.94 0.93 0.94
  6.00 6.00 81.00 0.93 0.94 0.93 0.93

我们可以看到,这f1-score最能反映 FN 值上升的最坏情况,即 ham 被归类为垃圾邮件!

你可能感兴趣的:(计算机,python)