内容简介:分类模型的性能(Performance)
分类模型的性能(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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 指标体系:四个模型教会你指标体系构建的方法
- 回归模型的评估指标
- 机器学习之类别不平衡问题:模型的评价指标
- 模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!
- 每秒聚合5亿个指标,Uber 开源大规模指标平台 M3
- 有赞指标库实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
iOS游戏编程之从零开始
李华明 / 2013-2 / 59.00元
《iOS游戏编程之从零开始:Cocos2d-x与cocos2d引擎游戏开发》是作者继《android游戏编程之从零开始》热销之后编写的又一本、基于cocos2d—x2.x和cocos2d—iphone版本,讲述ios平台游戏开发的新作。《iOS游戏编程之从零开始:Cocos2d-x与cocos2d引擎游戏开发》分为两个部分共11章,内容主要包括cocos2d—x引擎游戏开发的基础,常用的类、方法及......一起来看看 《iOS游戏编程之从零开始》 这本书的介绍吧!