概述

在构建分类体系时,咱们需求一种办法来评价分类模型的功能,咱们期望有能够反映分类模型实在功能的评价方针。准确率(Accuracy)、准确度(Precision)、召回率(Recall)和 F1 分数都是评价分类模型功能的方针。

分类使命能够分为以下两类:

  • 二分类:类别数为二,例如垃圾邮件分类,分为垃圾邮件和非垃圾邮件两类。
  • 多分类:类别数大于二,例如将电子商务查询电子邮件分为三种类型:运送、退货或盯梢。

二分类使命评测

为了直观地解说这些概念,让咱们考虑一个简略的比方,假定咱们有一个用于猜测邮件是否为垃圾邮件的分类模型,咱们的使命是将电子邮件列表分为两类:垃圾邮件或非垃圾邮件。咱们将用整数 1(或正数)表明垃圾邮件,用 0(或负数)表明非垃圾邮件。这里咱们有一个包含 20 个电子邮件标题的数据集,咱们将每个数据点经过二元分类模型来取得猜测类别,然后将其与实践类别进行比较,分类模型返回以下成果:

分类评价方针:准确率、准确度、召回率和 F1 详解

准确率

准确率(Accuracy) : 准确率是分类正确的样本数占总样本数的份额。也便是说,它是模型正确猜测正类和负类的总次数除以总的猜测次数。

准确率 = (实在例 + 真负例) / (实在例 + 假正例 + 真负例 + 假负例)

在咱们的比方中,咱们有20封邮件,模型正确地辨认出了15封邮件的实在类别(不管是垃圾邮件仍是非垃圾邮件),那么准确率便是75%。

分类评价方针:准确率、准确度、召回率和 F1 详解

准确性一般被用作分类功能的衡量标准,由于它核算简略且易于解说,然而在处理正负样本不平衡的数据时,它或许会发生误导。让咱们回到咱们的数据集来了解这一点,假定分类器没有学习任何内容,只是将一切输出分类为 0(不是垃圾邮件),咱们将在 20 个正确分类中得到 17 个,这意味着 85% 的极高准确度!明显,咱们不能说模型的功能很好,因而必须有一种比单独运用准确度更好的办法来衡量分类模型的功能。在介绍其他方针之前有必要了解一下混杂矩阵。

  • 长处:
    • 直观易懂,用于衡量分类正确的样本与总样本数之比。
    • 关于均衡数据集(每个类的样本数附近)很有用。
  • 缺陷:
    • 在不平衡数据集上或许会发生误导性的高分数,即使模型对少数类别猜测作用很差。
    • 不适合评价需求对某一类别更活络的使命。

混杂矩阵

在咱们的比方中,咱们将事情(1 – 垃圾邮件)称为“正”,将事情(0 – 非垃圾邮件)称为“负”。二分类的混杂矩阵是一个 22 矩阵,其间每一列代表一个类,如下所示:

分类评价方针:准确率、准确度、召回率和 F1 详解

混杂矩阵将分类成果分为四类:

  • 实在例(TP):True Positive(简写为TP)表明实践上这个样本为Positive,模型也把这个样本猜测为Positive的状况。这是咱们猜测正确的部分。
  • 真负例 (TN):True Negative(简写为TN)表明实践上这个样本为Negative,模型也把这个样本猜测为Negative的状况。这是咱们猜测正确的部分。
  • 假正例 (FP):False Positive(简写为FP)表明实践上这个样本为Negative,可是模型猜测为了Positive的状况。这是猜测过错的部分,也是核算学上的第一类过错(Type I Error)。
  • 假负例(FN):False Negative(简写为FN)表明实践上这个样本为Positive,可是模型猜测为了Negative的状况。这是猜测过错的部分,也是核算学上的第二类过错(Type II Error)。

运用于前面的数据集,咱们得到以下值:

  • 实在例(TP):1
  • 真负例 (TN):14
  • 假正例 (FP):3
  • 假负例(FN):2

咱们能够将这些值填充到混杂矩阵中,如下所示:

分类评价方针:准确率、准确度、召回率和 F1 详解

咱们还能够将混杂矩阵映射到咱们之前看到的准确率公式,如下所示:

分类评价方针:准确率、准确度、召回率和 F1 详解

分类评价方针:准确率、准确度、召回率和 F1 详解

现在咱们能够经过这个矩阵了解为什么准确性有时会躲藏不平衡数据集的细微差别,原因是在此类数据集中,真负例(实在的非垃圾邮件)类别占主导地位,削弱了其他类别的影响。因而,即使分类模型在其他三个类别中体现欠安,其准确性仍然看起来不错,掩盖了其缺陷。

准确率

准确度(Precision) : 准确度是在一切被模型猜测为正类的样本中,实践上为正类的样本的份额。它反映了模型猜测为正类的成果的可信度。在信息检索领域,precision也被称为“查准率

准确度 = 实在例 / (实在例 + 假正例)

在咱们的比方中,咱们有20封邮件,模型猜测了4封邮件是垃圾邮件,但实践上只需1封是垃圾邮件,那么准确度便是1/4或25%。

分类评价方针:准确率、准确度、召回率和 F1 详解

从上图准确率的核算中能够看到真负例(实在的非垃圾邮件)不再参加核算,准确率反映了模型猜测为正类(垃圾邮件)成果的可信度。虽然之前的准确率高达 75%,可是咱们发现准确度只需25%。关于正负样本不平衡的数据,只重视准确率无法衡量模型的功能。

  • 长处:
    • 重视模型在猜测为正类(例如,患病)的样本中有多少是正确的。
    • 适合在误报(false positives)成本高的状况下运用,例如垃圾邮件检测中将非垃圾邮件猜测为垃圾邮件,这便是误报的成本很高,需求削减误报(FP),来进步准确率。
  • 缺陷:
    • 不考虑被过错分类为负类(false negatives)的正类样本。
    • 或许会疏忽实践正类样本中的很大一部分。

召回率

召回率(Recall) : 召回率是在一切实践为正类的样本中,被模型正确猜测为正类的样本的份额。它反映了模型捕获正类样本的才能。在信息检索领域,recall也被称为“查全率”。

召回率 = 实在例 / (实在例 + 假负例)

在咱们的比方中,咱们有20封邮件,实践上有3封是垃圾邮件,被模型正确猜测为垃圾邮件的有1封,那么召回率便是1/3或33%。

分类评价方针:准确率、准确度、召回率和 F1 详解

  • 长处:
    • 重视在一切实践正类样本中,有多少被模型正确猜测。
    • 适合在漏报(遗失实在的正例,即FN)价值很高的状况下运用,如疾病筛查。
  • 缺陷:
    • 不考虑过错分类为正类的负类样本(false positives)。
    • 或许导致模型过分重视正类而疏忽负类的猜测精度。

准确率和召回率的差异

准确率和召回率的差异是分母不同,准确率的分母是模型猜测为正样本的数量(TP+FP),重视的是模型猜测的正样本,召回率的分母是实践为正样本的数量(TP+FN),重视的是实践的正样本。

咱们应该优先考虑哪个方针——准确率仍是召回率?

答案是,这取决于咱们使命的性质,让咱们看看为什么。

例如,咱们有1000封邮件,其间垃圾邮件有100封,仍然是期望猜测出其间的垃圾邮件。

假如咱们期望precision高,那么在极点状况下,咱们只把最最或许是垃圾邮件的那一封邮件,也便是No.1的那一封挑出来,这时候precision高达 1/1 = 100%。可是,Recall相应的就会十分低就只需 1/100 = 1%。

假如咱们期望recall高,那么极点状况下,咱们只需无脑把一切的样本都猜测为垃圾邮件,那么此时咱们的recall就能够高达 100/100 = 100%,可是此时precision相应的只需 100/1000 = 10%。

咱们发现,假如只是看recall或许precision中的一个,有或许会在不知情的状况下走向极点;而Accuracy又会遭到不平衡样本的影响。

关于垃圾邮件分类使命,或许更期望防止重要的电子邮件被移入垃圾邮件文件夹,而不是将偶尔的垃圾邮件移入收件箱,因而关于这项使命,咱们期望优先考虑准确度而不是召回率。

分类评价方针:准确率、准确度、召回率和 F1 详解

  • 准确率高意味着较少的误报,即较少的非相关实例被过错地辨认为相关。
  • 召回率高意味着较少的漏报,即更多的相关实例被正确地辨认出来。

怎么挑选:

挑选准确率仍是召回率取决于详细运用和业务方针。

  • 假如过错的猜测正类(误报)的成本十分高,你或许会倾向于更高的准确率。例如,在引荐体系中,假如体系频频引荐用户不喜欢的产品,将导致用户体会下降。
  • 假如错失实践正类(漏报)的成本十分高,你或许会挑选更高的召回率。例如,在疾病筛查中,错失一个病例的价值或许是生命,因而需求更高的召回率。

在某些状况下,你或许需求在准确率和召回率之间找到一个折衷。这时候能够运用F1分数作为归纳方针,它结合了准确率和召回率的信息,供给了一个平衡两者的办法。假如准确率和召回率相等重要,那么F1分数是一个很好的挑选。可是在某些状况下,或许需求依据详细运用调整对准确率和召回率的权重,这时能够运用F-分数(一个更一般化的F1分数)来调整准确率和召回率之间的相对重要性。

F1分数

F1 分数: F1 分数是准确度和召回率的谐和均匀值,它同时考虑准确度和召回率,给出一个总体的功能方针。

F1 = 2 * (准确度 * 召回率) / (准确度 + 召回率)

假如准确度是25%而召回率是33%,F1 分数便是 2 * (0.25 * 0.33) / (0.25 + 0.33) ≈ 0.28 或 28%。

分类评价方针:准确率、准确度、召回率和 F1 详解

F1 供给了准确率和召回率之间的平衡

分类评价方针:准确率、准确度、召回率和 F1 详解

  • 长处:
    • 是准确率和召回率的谐和均匀,平衡了准确率和召回率。
    • 关于不平衡数据集,比单纯的准确率方针更有信息量。
    • 适合在准确率和召回率都相等重要的场景中运用。
  • 缺陷:
    • 不考虑实在的负类样本,即关于多分类问题或许不行活络。
    • 在一些状况下,或许需求更侧重于准确率或召回率,F1分数或许会躲藏模型在这两个方面的潜在偏差。

多分类使命评测

在多类别分类问题中,宏均匀(Macro Average)和微均匀(Micro Average)是两种常用的办法来核算全体的准确率、召回率和F1分数。这两种办法考虑了类别不平衡的状况,即不同类别的样本数量或许不同。

宏均匀

在多分类使命中,宏均匀是对每个类别独立核算方针,然后取一切类别方针的均匀值。

宏均匀(Macro Average)核算办法:

  • 对每个类别单独核算准确率、召回率和F1分数。
  • 然后核算一切类别准确率、召回率和F1分数的算术均匀值。

宏均匀准确率 = (准确率1 + 准确率2 + … + 准确率N) / N

宏均匀召回率 = (召回率1 + 召回率2 + … + 召回率N) / N

宏均匀F1分数 = (F1分数1 + F1分数2 + … + F1分数N) / N

其间N是类别的数量。

宏均匀核算举例

下面经过一个比方来展现怎么核算多分类使命中的宏均匀准确率、召回率和F1分数。假定咱们的使命是将电子商务客户电子邮件列表分类为三个类别之一:发货、退货和盯梢,将别离用整数值 0、1 和 2 来表明每个类。

这里咱们有一个包含 15 个电子邮件标题的数据集。咱们将每个数据点经过多类分类器来取得猜测类别,然后将其与实践类进行比较。

分类评价方针:准确率、准确度、召回率和 F1 详解

首要,准确率的核算与二分类相同——正确猜测的数量除以猜测的总数。关于咱们的数据集,有 10 个正确的猜测和 5 个过错的猜测,这使咱们的准确率为 10/15 ≈ 67%。

接下来,为了核算精度、召回率和 F1,咱们将构建混杂矩阵。由于咱们有三个类,因而矩阵现在变成了 33 矩阵,每一列代表一个类。运用于咱们的数据集,咱们得到以下矩阵:

分类评价方针:准确率、准确度、召回率和 F1 详解

在这个混杂矩阵中,行表明实在的类别,列表明模型的猜测类别,对角线上的值是每个类别的实在例(TP)。

首要,咱们核算每个类别的准确率和召回率:

关于类别 0(Shipping):

  • TP(0) = 3
  • FP(0) = 1 + 0 = 1
  • FN(0) = 0 + 2 = 2
  • 准确率(0) = TP(0) / (TP(0) + FP(0)) = 3 / (3 + 1) = 0.75
  • 召回率(A) = TP(0) / (TP(0) + FN(0)) = 3 / (3 + 2) = 0.60
  • F1分数(A) = 2 * (准确率(A) * 召回率(A)) / (准确率(A) + 召回率(A)) = 2 * (0.75 * 0.60) / (0.75 + 0.60) ≈ 0.67

关于类别 1(Returns):

  • TP(1) = 4
  • FP(1) = 0 + 2 = 2
  • FN(1) = 1 + 0 = 1
  • 准确率(1) = TP(1) / (TP(1) + FP(1)) = 4 / (4 + 2) = 0.67
  • 召回率(1) = TP(1) / (TP(1) + FN(1)) = 4 / (4 + 1) = 0.80
  • F1分数(B) = 2 * (0.67 * 0.80) / (0.67 + 0.80) ≈ 0.73

关于类别 2(Tracking):

  • TP(2) = 3
  • FP(2) = 2 + 0 = 2
  • FN(2) = 0 + 2 = 2
  • 准确率(2) = TP(2) / (TP(2) + FP(2)) = 3 / (3 + 2) = 0.60
  • 召回率(2) = TP(2) / (TP(2) + FN(2)) = 3 / (3 + 2) = 0.60
  • F1分数(2) = 2 * (0.60 * 0.60) / (0.60 + 0.60) ≈ 0.60

现在,咱们用这些值来核算宏均匀方针:

宏均匀准确率 = (准确率(0) + 准确率(1) + 准确率(2) ) / 3 = (0.75 + 0.67+ 0.6) / 3 ≈ 0.66

宏均匀召回率 = (召回率(0) + 召回率(1) + 召回率(2) ) / 3 = (0.60 + 0.80 + 0.60) / 3 ≈ 0.67

宏均匀F1分数 = (F1分数(0) + F1分数(1) + F1分数(2) ) / 3 = (0.67 + 0.73 + 0.60) / 3 ≈ 0.66

因而,咱们核算得到的多个类别的宏均匀F1分数大约为0.66,它代表了模型在一切类别上的均匀功能,不考虑类别之间的样本数量不平衡。经过宏均匀,咱们能够了解模型在一切类别上的全体体现,特别适用于类别平衡的状况或许你想给每个类别相等的重要性。

微均匀

在多分类使命中,微均匀(Micro Average)用于核算整个数据集的统一准确率和召回率,而不区分不同的类别。

微均匀(Micro Average)核算办法:

  • 将一切类别的实在例(TP)、假正例(FP)和假负例(FN)累加起来,得到总的TP、FP和FN。
  • 然后运用这些总量来核算全体的准确率、召回率和F1分数。

微均匀准确率 = 总TP / (总TP + 总FP)

微均匀召回率 = 总TP / (总TP + 总FN)

微均匀F1分数 = 2 * (微均匀准确率 * 微均匀召回率) / (微均匀准确率 + 微均匀召回率)

微均匀核算举例

下面经过一个比方来展现怎么核算多分类使命中的微均匀准确率和召回率。咱们仍是曾经面的使命举例:

假定咱们的使命是将电子商务客户电子邮件列表分类为三个类别之一:发货、退货和盯梢,将别离用整数值 0、1 和 2 来表明每个类。

分类评价方针:准确率、准确度、召回率和 F1 详解

在这个混杂矩阵中,行表明实在的类别,列表明模型的猜测类别,对角线上的值是每个类别的实在例(TP)。

首要,咱们核算每个类别的实在例(TP),假正例(FP)和假负例(FN)。

关于类别 0 :

  • TP(0) = 3(猜测和实在都是0的数量)
  • FP(0) = 1 + 0 (其他实在类别猜测为0的数量)
  • FN(0) = 0 + 2(猜测为其他类别,但实在为0的数量)

类似地,咱们能够核算B、C和D的TP、FP和FN。

然后,咱们将一切类别的TP、FP和FN合计起来得到总的TP、FP和FN。

总TP = TP(0) + TP(1) + TP(2)

总FP = FP(0) + FP(1) + FP(2)

总FN = FN(0) + FN(1) + FN(2)

运用上面的混杂矩阵数据,咱们有:

总TP = 3 + 4 + 3 = 10

总FP = 1 + 0 + 0 + 2 + 2 + 0 = 5

总FN = 0 + 2 + 1 + 0 + 0 + 2 = 5

现在咱们能够核算微均匀准确率和召回率:

微均匀准确率 = 总TP / (总TP + 总FP)

微均匀召回率 = 总TP / (总TP + 总FN)

核算得出:

微均匀准确率 = 10 / (10 + 5) ≈ 0.66

微均匀召回率 = 10 / (10 + 5) ≈ 0.66

最后,假如需求核算微均匀F1分数,能够运用以下公式:

微均匀F1分数 = 2 * (微均匀准确率 * 微均匀召回率) / (微均匀准确率 + 微均匀召回率)

微均匀F1分数 = 2 * (0.66 * 0.66) / (0.66 + 0.66) ≈ 0.66

这样,咱们得到了微均匀准确率、召回率和F1分数,它们反映了模型在整个数据集上的总体功能,不考虑类别间的不平衡。

宏均匀和微均匀的差异

宏均匀和微均匀的差异在于它们对不同类别的权重处理。宏均匀给予每个类别相同的权重,不论类别的样本数量大小。因而,它或许会遭到小类别(样本数量少的类别)的过度影响。微均匀则将一切类别的奉献视为相等,不管类别的大小,因而在每个样本对成果有相等奉献时,微均匀或许是更好的挑选。

一般状况下:

  • 假如你关怀的是每个类别的相等权重,比方在进行文档分类时,每个类别都相等重要,那么能够运用宏均匀。
  • 假如你关怀的是每个样本的相等权重,比方在猜测用户行为时,每个用户的行为都相等重要,那么能够运用微均匀。

在类别不平衡的数据集中,微均匀或许更能反映模型的实践功能,由于它确保了大类别不会对全体的评价方针发生过大影响。

评测方针核算东西

前面详细介绍了一下分类使命常用评价方针的核算办法,在评测的时候能够依据核算公式自定义办法核算方针,也能够现成的开源东西进行核算,下面我将介绍一下 Hugging Face 开源的 evaluate ,以及怎么经过 evaluate 核算准确率、召回率和F1分数。

evaluate 库介绍

Hugging Face 开源的 evaluate 是一个构建在其 Transformers 库之上的评价东西库,它供给了一种简略、统一的办法来评价机器学习模型,特别是自然言语处理(NLP)领域的模型。evaluate 旨在使评价模型变得愈加简略、灵活和可复现。

evaluate 库的要害特色包含:

  1. 多样的评价方针: 供给了一系列标准化的评价方针,用于不同类型的NLP使命,如文本分类、序列标示、问答和言语生成等。这些方针包含但不限于准确率(accuracy)、F1分数、BLEU、ROUGE和METEOR等。
  2. 简略的API: evaluate 设计了简略直观的API,易于运用。用户只需少量代码就能够核算各种评价方针。
  3. 与Transformers库集成: evaluate 与 Hugging Face 的 Transformers 库严密整合,便利用户在模型训练和测试过程中直接运用评价方针。
  4. 社区奉献: Hugging Face社区鼓励用户奉献新的评价方针和数据集,这些社区驱动的奉献都经过严格的审核,确保质量和可用性。
  5. 成果复现: 由于评价方针的标准化和自动化,evaluate 能够协助研究人员和开发者更简略地复现实验成果,从而促进透明度和学术诚信。

evaluate 库包含了一系列的评价方针和数据集,允许用户运用共同的接口来核算常用的方针,比方准确率(accuracy)、准确率(precision)、召回率(recall)、F1 分数等。此外,该库也支撑更详细的使命相关方针,比方机器翻译的 BLEU 分数、文本生成的 ROUGE 分数等。

运用 evaluate 库能够十分便利地对模型进行评价。用户只需求加载相应的方针,并将模型的猜测输出以及实在标签传递给评价函数即可取得评价成果。这样做的长处在于,用户无需自己编写评价代码,能够确保评价成果的准确性和可比较性。

evaluate 库运用

运用 Hugging Face 的 evaluate 库进行模型评价一般触及以下过程:

  1. 装置 evaluate : 首要需求装置 evaluate 库。能够运用 pip 进行装置:
pip install evaluate
  1. 挑选评价方针: 依据你的使命类型,挑选适合的评价方针。evaluate 库支撑多种方针,如accuracy, precision, recall, f1 等。你能够拜访 Hugging Face 的 evaluate 页面查看支撑的一切方针。
  2. 加载评价方针: 经过 evaluate 库中的 load 函数加载你挑选的评价方针:
import evaluate
# 加载核算准确率的方针
accuracy = evaluate.load("accuracy")
  1. 收集模型猜测和实在标签: 在你有了模型的猜测输出和对应的实在标签后,就能够核算方针了。这些数据能够来自于验证集、测试集或许其他任何你想要评价模型功能的数据集。
  2. 核算方针: 调用方针目标的 compute 办法,传入猜测和标签,核算得到评价成果:
predictions = [...] # 模型的猜测成果列表
references = [...]  # 实在标签列表
results = accuracy.compute(predictions=predictions, references=references)
  1. 分析成果: 查看核算得到的方针值,分析模型的功能。依据需求,你能够对模型进行调优,然后重复上述过程进行评价,直到到达满意的功能水平。
  2. (可选)运用多个方针: 有时候,你或许需求依据多个方针来归纳评价模型功能。在这种状况下,能够重复加载和核算过程,针对不同的方针进行评价。

这个流程的长处是它供给了一个标准化且易于运用的办法来评价模型,而且能够确保评价的共同性和可复现性。经过 evaluate 库,研究者和开发者能够更专心于模型的开发和改善,而不需求花费过多的时间在完成和校验评价方针上。

核算准确率

运用 accuracy 核算准确率,官网中给出的运转代码如下:

import evaluate
accuracy_metric = evaluate.load("accuracy")
results = accuracy_metric.compute(references=[0, 1], predictions=[0, 1])
print(results) # {'accuracy': 1.0}

直接运转上面的代码会报错,由于默许状况下 evaluate.load("accuracy")会从 huggingface 下载对应 metric 评测文件,也从 huggingface 找到 metrics/accuracy/accuracy.py文件,可是在国内无法拜访 huggingface,所以需求在evaluate.load()办法中指定 accuracy.py文件的途径才能运转。

在运用 evaluate.load()加载评测脚本时,其间的参数 path 是核算处理脚本途径,能够是处理脚本途径或包含该脚本的目录(假如该脚本与该目录具有相同的名称) ,例如./metrics/rouge ./metrics/rouge/rouge.py

下面我将运用 evaluate 东西对咱们前面多分类使命的评价方针,宏均匀和微均匀进行核算,如下所示:

分类评价方针:准确率、准确度、召回率和 F1 详解

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
accuracy_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/accuracy", module_type='metric')
results = accuracy_metric.compute(references=actual, predictions=predicted)
print(results)
# 输出成果:{'accuracy': 0.6666666666666666}

其间 accuracy.py 文件能够从 github.com/huggingface… 下载。

核算准确率

运用 precision 核算准确率:

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
precision_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/precision", module_type='metric')
results = precision_metric.compute(references=actual, predictions=predicted, average='macro')
print(results) 
# 输出成果:{'precision': 1.0}

核算召回率

运用 recall 核算召回率:

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
recall_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/recall", module_type='metric')
results = recall_metric.compute(references=actual, predictions=predicted, average='macro')
print(results)
# 输出成果:{'recall': 0.6666666666666666}

核算F1分数

运用 F1 核算F1分数:

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
f1_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/f1", module_type='metric')
results = f1_metric.compute(references=actual, predictions=predicted, average='macro')
print(results) 
# 输出成果:{'f1': 0.6646464646464646}

同时核算准确率、召回率、F1分数

二分类

关于二分类评价方针准确率、召回率、F1分数的核算,能够运用如下办法直接核算出来,下面将曾经面的二分类的比方核算相关的评测方针,比方中的 20 个样本分类如下:

分类评价方针:准确率、准确度、召回率和 F1 详解

能够直接运用下面的代码核算评价成果:

import evaluate
actual  =   [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
predicted = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0]
accuracy_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/accuracy", module_type='metric')
precision_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/precision", module_type='metric')
recall_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/recall", module_type='metric')
f1_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/f1", module_type='metric')
clf_metrics = evaluate.combine([accuracy_metric, precision_metric, recall_metric, f1_metric])
result = clf_metrics.compute(predictions=predicted, references=actual)
print(result)
# 输出成果如下:
"""
{
 'accuracy': 0.75,
 'precision': 0.25,
 'recall': 0.3333333333333333,
 'f1': 0.28571428571428575
 }
"""

多分类

关于多分类使命,咱们能够别离核算各个评测方针,然后将成果合并到一下,下面介绍一下运用evaluate 东西对咱们前面多分类使命的评价方针,宏均匀和微均匀进行核算。别离用整数值 0、1 和 2 来表明每个类,如下所示:

  • 发货: 0
  • 退货: 1
  • 盯梢: 2

宏均匀核算,需求在 compute()办法中指定 average='macro'

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
# 准确率
accuracy_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/accuracy", module_type='metric')
accuracy_results = accuracy_metric.compute(references=actual, predictions=predicted)
# 准确率
precision_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/precision", module_type='metric')
precision_results = precision_metric.compute(references=actual, predictions=predicted, average='macro')
# 召回率
recall_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/recall", module_type='metric')
recall_results = recall_metric.compute(references=actual, predictions=predicted, average='macro')
# F1分数
f1_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/f1", module_type='metric')
f1_results = f1_metric.compute(references=actual, predictions=predicted, average='macro')
results = {
    **accuracy_results, 
    **precision_results,
    **recall_results,
    **f1_results,
}
results
# 输出成果
"""
{
 'accuracy': 0.6666666666666666,
 'precision': 0.6722222222222222,
 'recall': 0.6666666666666666,
 'f1': 0.6646464646464646
}
"""

微均匀核算,需求在 compute()办法中指定 average='micro'

import evaluate
actual  =   [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
predicted = [0, 0, 2, 0, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2]
# 准确率
accuracy_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/accuracy", module_type='metric')
accuracy_results = accuracy_metric.compute(references=actual, predictions=predicted)
# 准确率
precision_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/precision", module_type='metric')
precision_results = precision_metric.compute(references=actual, predictions=predicted, average='micro')
# 召回率
recall_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/recall", module_type='metric')
recall_results = recall_metric.compute(references=actual, predictions=predicted, average='micro')
# F1分数
f1_metric = evaluate.load(path="/Users/xiniao/myproject/evaluate/metrics/f1", module_type='metric')
f1_results = f1_metric.compute(references=actual, predictions=predicted, average='micro')
results = {
    **accuracy_results, 
    **precision_results,
    **recall_results,
    **f1_results,
}
results
# 输出成果
"""
{
 'accuracy': 0.6666666666666666,
 'precision': 0.6666666666666666,
 'recall': 0.6666666666666666,
 'f1': 0.6666666666666666
}
"""

能够看到与咱们前面经过公式核算的成果是共同的。

参阅文档

Classification Evaluation Metrics: Accuracy, Precision, Recall, and F1 Visually Explained

huggingface.co/evaluate-me…

机器学习的评价方针(一):Accuracy、Precision、Recall、F1 Score