准确率(Accuracy)查准率(Precision)、召回率(Recall)、F1-score
对于最简单的二分类任务:
(此图叫混淆矩阵)
- TP:预测为Positive并且真实值也为Positive(样本为正类且预测为正类)
- TN:预测为Negative并且真实值也为Negative(样本为负类且预测为负类)
- FP:预测为Positive但真实值也为Negative(样本为负类但预测为正类)
- FN:预测为Negative但真实值也为Positive(样本为正类但预测为负类)
- TP+FP:预测为Positive的样本总数
- TP+FN:实际为Positive的样本总数
Accuracy(准确率)
Precision(精确率/查准率)
精确率表示的是在所有预测结果为真中的准确率:
Precision=TP/(TP+FP)
Recall(召回率)
所有正类中被预测为正类的比例, 衡量的是模型对实际正类的提取能力:
Recall=TP/(TP+FN)
F1-score
表示的是精确率和召回率的调和平均(类似于基于二者的一个综合水平),基于召回率和精确率计算的:
F1score=2∗Precision∗Recall/(Precision+Recall)
召回率和精确率是针对某一个类别说的,比如正类别的Recall,负类别的Recall等。如果你是多分类,那么可以有分类一这个类别的Precision,类别一的Precision,类别一的Recall等。而没有类似全部数据集的Recall或Precision这种说法。 通常对于二分类,我们说正类的recall和precision。
多分类任务
如上所说,某一个metrics是针对具体的一个类别,在多分类任务中,把某一类别视为正,其他所有的类别视为负。
例如有一混淆矩阵(行代表真实,列代表预测):
a b c d e f g
a [325, 32, 9, 0, 0, 2, 236],
b [57, 750, 454, 20, 0, 11, 23],
c [0, 128, 157, 71, 0, 11, 0],
d [8, 0, 160, 112, 0, 0, 0],
e [0, 321, 39, 2, 150, 0, 0],
f [0, 145, 52, 30, 0, 189, 0],
g [48, 35, 0, 0, 0, 0, 237]
行分析(RECALL)
第一行中的[325, 32, 9, 0, 0, 2, 316],表示有325个类别a被预测为类别a,有32个类别a被预测为类别b,有9个类别a被预测为类别c,有2个类别a被预测为类别f,有236个类别a被预测为g。
所以真实的正类共有325+32+9+2+236=604,其中FN=32+9+2+236=279,TP=325。
因此可以得出此类别a下的召回率为=TP/(TP+FN) =325/604=0.538
列分析(PRECISION)
同样的由于列代表的是预测结果,所以计算精确率的时候要关注列的结果。
第一列[325, 57, 0, 8, 0, 0, 48]表示的是在预测结果中,有325个类别a被预测为类别a, 有57个类别b预测成了类别a,有8个类别d预测成了类别a,有48个类别g预测成了类别a。所以此时仍然可以得出:
TP=325,FP=57+8+48=113,TP+FP=438
因此同样可以得出类别A下的Precision=TP/(TP+FP)=325/438=0.742
以此类推可以对每一类别计算其对应的Precision和Recall。这里要理解就是为什么Precision是计算的列和,Recall计算的是行和。因为列代表的是预测结果,行代表的是真实结果。
多分类下的F1
多分类的F1 score有两种常用的计算方式,一个是Micro,一个是Macro
micro的意思就是对所有类别求出总体的TP、FN、FP,然后再计算出总体的Precison、Recall最后再利用F1=2*P*R/(P+R)来计算出F1-score。简单说就是求出每一个类别的TP,FP,FN,然后汇总求解
而macro的意思就是先对每个类别求出对应的Precision、Recall、F1这些指标,然后进行平均来求出总体的F1-score