前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习/深度学习指标:Precision,Recall 和 Accuracy

机器学习/深度学习指标:Precision,Recall 和 Accuracy

作者头像
叶锦鲤
发布2019-09-30 14:50:56
1.5K0
发布2019-09-30 14:50:56
举报
文章被收录于专栏:悦思悦读悦思悦读
分类模型的性能(Performance)

分类问题是当前机器学习、深度学习领域最为常见的问题,各式各样的模型种类繁多。

如何评价这些模型的优劣呢?自然要做测试:

  • 首先,准备好一些已知其真实分类的样本;
  • 然后,用分类模型对它们进行分类;
  • 最后,将分类模型预测(predict)或者推断(inference)的结果与实际情况相比较,以预测/推断结果与真实的符合程度为依据来评价分类模型的性能(performance)。

既然要判断程度,就必然会用到能够描述“多少”的数值型指标。今天我们就要介绍几种分类模型最常用的评价指标。

二分类模型的指标

我们先从最基础的二分类模型说起。

所有的二分类模型做预测/推断的结果都只能两个:阳性(Positive,即正例)和阴性(Negative,即负例)。

二分类模型最常用的指标是:精准率(Precision)召回率(Recall)。

对于一个测试样本,它本身有一个真实分类(阳性或者阴性)。将其输入给二分类模型后,模型会给它打一个标签——要么阳性,要么阴性。

样本的真实分类和预测分类可能一致也可能不一致,总之会形成一个两两正交的情况,如下:

预测结果为阳性 (Positive)

预测结果为阴性 (Negative)

预测结果是真实的 (True)

TP:实际为Positive,也被预测为Positive的样本数

TN:实际为Negative,也被预测为Negative的样本数

预测结果是虚假的 (False)

FP:实际为Negative,但被预测为Positive的样本数

FN:实际为Positive,但被预测为Negative的样本数

精准率:Precision=TP / (TP+FP),即在所有被预测为阳性的测试数据中,真正是阳性的比率。

召回率:Recall=TP / (TP+FN),即在所有实际为阳性的测试数据中,真正是阳性的比率。

为了综合这两个指标并得出量化结果,又发明了F1Score

F1Score = 2*(Precision * Recall) / (Precision + Recall)

显然上面三个值都是越大越好,但往往在实际当中P和R是矛盾的,很难保证双高。

除了精准率和召回率,还有一个准确率(Accuracy),可以用来评估分类模型。

准确率指分类模型预测正确的结果在整体中的占比例。

Accuracy = 预测正确的样本数 / 所有样本数

二分类模型的Accuracy = (TP+TN) / (TP+TN+FP+FN) = (TP+TN) / Count(Samples)

多分类模型的指标

多分类模型的预测结果有多种类型,而不只是正例(阳性)和负例(阴性)两种。

虽然如此,前面说的Precision,Recall和Accuracy同样适用于多分类问题。

假设一个分类模型能预测N个分类:{Class1, Class2, ..., ClassN}.

每一个特定的测试样本都有一个真实的分类,经过模型预测后,又会有一个预测分类。

假设样本x1的真实分类是Class1,它的预测结果有N种可能({Class1, Class2, ..., ClassN}中的任何一个)。

但是不管预测结果如何,从预测与真实的符合程度来看,只有两种可能:预测正确(被预测为Class1),和预测错误(被预测为Class1之外的任何一类)。

当一个测试集全部被预测完之后,会有一些实际是Class1的样本被预测为其他类,也会有一些其实不是Class1的样本,被预测成Class1,这样的话就导致了下面这个结果:

预测结果为Class1(Positive)

预测结果为非Class1(Negtive)

预测结果是真实的(True)

Class1_TP:实际为Class1,也被预测为Class1的样本数

Class1_TN:实际不是Class1,也被测试为其他类(非Class1)的样本数

预测结果是虚假的(False)

Class1_FP:实际不是Class1,但被预测为Class1的样本数

Class1_FN:实际为Class1,但被预测为其他类(非Class1)的样本数

根据上表,我们就可以计算:

Class1的精准率:Class1_Precision = Class1_TP/(Class1_TP+Class1_FP),即在所有被预测为Class1的测试数据中,预测正确的比率。

Class1的召回率:Class1_Recall = Class1_TP/(Class1_TP+Class1_FN),即在所有实际为Class1的测试数据中,预测正确的比率。

Class1的F1Score: Class1_F1Score = 2 * (Class1_Precision * Class1_Recall) / (Class1_Precision + Class1_Recall)

同理,Class1的准确率:Class1_Accuracy = (Class1_TP + Class1_TN) / count(Samples)

一个多分类模型指标计算的例子

下面我们用一个例子来说明一下多分类模型的几种指标的计算。具体数据如下表:

Actual_Class1

Actual_Class2

Actual_Class3

Total_Precdicted

Predicted_Class1

30

20

10

60

Predicted_Class2

50

60

10

120

Predicted_Class3

20

20

80

120

Total_Actual

100

100

100

可以看出,分类器一共可分出三个类:Class1,Class2和Class3;测试样本一共有300个;测试样本中三个类是平均分布的。

然后,针对这三个类,我们用下面四种颜色分别标注出它们各自对应的TP,TN,FP和FN:

TP

TN

FP

FN

Class1

Actual_Class1

Actual_Class2

Actual_Class3

Predicted_Class1

30

20

10

Predicted_Class2

50

60

10

Predicted_Class3

20

20

80

Class1_TP = 30

Class1_TN = 60 + 10 + 20 + 80 = 170

Class1_FP = 20 + 10 = 30

Class1_FN = 50 + 30 = 70

Class1_Precision = 30 / 60 = 0.5

Class1_Recall = 30 / 100 = 0.3

Class1_Accurancy = (30 + 170) / 300 = 0.67

Class2

Actual_Class1

Actual_Class2

Actual_Class3

Predicted_Class1

30

20

10

Predicted_Class2

50

60

10

Predicted_Class3

20

20

80

Class2_TP = 60

Class2_TN = 30 + 10 + 20 + 80 = 140

Class2_FP = 50 + 10 = 60

Class2_FN = 20 + 20 = 40

Class2_Precision = 60 / 120 = 0.5

Class2_Recall = 60 / 100 = 0.6

Class2_Accurancy = (60 + 140 ) / 300 = 0.67

Class3

Actual_Class1

Actual_Class2

Actual_Class3

Predicted_Class1

30

20

10

Predicted_Class2

50

60

10

Predicted_Class3

20

20

80

Class3_TP = 80

Class3_TN = 30 + 20 + 50 + 60 = 160

Class3_FP = 20 + 20 = 40

Class3_FN = 10 + 10 = 20

Class3_Precision = 80 / 120 = 0.67

Class3_Recall = 80 / 100 = 0.8

Class3_Accurancy = (80 + 160) / 300 = 0.8

多分类模型的整体性能

当我们评估一个多分类模型的时候,一般不会用具体某一个类的Precision,Recall或者Accuracy去对其进行评价,而是会用一个数值来代表整体性能。

通常会用到的指标是整体准确率。我们可能会想,整体正确率就是对所有类的Accuracy求均值或者加权求均值。

但是实际上,有一个更直接更方面的方法:

Overall Accuracy = 各类被预测对了的样本数量的累加 / 样本总数 = sum (class_i_TP) / count(Samples)

比如上面的例子里,Overall Accuracy = (30 + 60 + 80) / 300 = 0.57

指标和数据绑定

需要注意的是,所有的性能指标:Precision,Recall,Accuracy等,都和具体的测试数据有关。

同样的模型,换一套测试数据后,很可能某一类,甚至所有类的P,R,A会有所变化。

有变化是一正常的,但如果这种变化超过了一定幅度,就要考虑是否存在bias或者overfitting的情况。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智汇AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档