分类模型的评价指标:Precision,Recall 和 Accuracy

栏目: R语言 · 发布时间: 5年前

内容简介:分类模型的性能(Performance)

分类模型的评价指标:Precision,Recall 和 Accuracy

分类模型的评价指标:Precision,Recall 和 Accuracy

分类模型的性能(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的情况。

扫描下面二维码,搭上小编直通车

分类模型的评价指标:Precision,Recall 和 Accuracy

欢迎扫面下列二维码关注“悦思悦读”公众微信号

分类模型的评价指标:Precision,Recall 和 Accuracy


以上所述就是小编给大家介绍的《分类模型的评价指标:Precision,Recall 和 Accuracy》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java 8实战

Java 8实战

厄马(Raoul-Gabriel Urma)、弗斯科(Mario Fusco)、米克罗夫特(Alan Mycroft) / 陆明刚、劳佳 / 人民邮电出版社 / 2016-4-1 / CNY 79.00

本书全面介绍了Java 8 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和超越Java 8,清晰明了地向读者展现了一幅Java 与时俱进的现代化画卷。一起来看看 《Java 8实战》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换