机器学习:sklearn分类报告classification_report()中精确
率,召。。。
⼀、classification_report简介
def classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2,
output_dict=Fal)
print(classification_report(testY, predictions))
该函数就是在进⾏了分类任务之后通过输⼊原始真实数据(y_true)和预测数据(y_pred)⽽得到的分类报告,常常⽤来观察模型的好坏,如利⽤f1-score进⾏评判
它的输出是类似下⾯这样的(该输出结果为对mnist⼿写数字的分类,共有10类):
实用英语precision recall f1-score support
0 1.00 1.00 1.00 44
bathroom1 0.94 0.98 0.96 48
2 0.98 0.98 0.98 44
3 1.00 0.89 0.9
4 44
4 0.92 1.00 0.96 56
5 0.93 0.9
6 0.95 57
6 0.98 0.96 0.9
7 48
7 1.00 1.00 1.00 42
8 0.94 0.91 0.92 33
9 0.97 0.91 0.94 34
accuracy 0.96 450
macro avg 0.97 0.96 0.96 450
weighted avg 0.96 0.96 0.96 450
⼆、各分类指标的含义
济南市七里山幼儿园
要想知道这些数据是怎么算出来的,要先了解⼀下⼏个常见的模型评价术语,现在假设我们的分类⽬标只有两类,计为正例或阳例(positive)和负例或阴例(negtive)分别是:
(1)True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);
(2)Fal positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
(3)Fal negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
(4)True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。
实际类别预测类别
atm是什么意思是否总计
是TP FN P(实际上为该类的)
否FP TN N(实际上不是该类的)P‘被分类器分为属于该类的N’被分类器分为不属于该类的P+N
要注意P = TP + FN ⽽不是 TP+FP 1.精确率(precision)
precision = TP / ( TP + FP )
精确率是精确性的指标,表⽰被分类器正确分为正例的个数(TP)占被分类器分为正例的样本(TP+FP)的⽐重。
2.召回率(recall)
recall = TP / ( TP + FN ) = TP / P
英语26个字母发音
召回率是覆盖⾯的度量,也就是被分类器正确分为正例的个数(TP)占原始数据中全部正例(TP+FN)的⽐重。
如果有些难理解,可以看⼀下下⾯这张图:
上⾯relevant elements 可以理解成属于该类的,右半部分就是不属于该类的,其中TP = 5 , FN = 7,FP = 3 ,TN = 7
所以 precision =TP / ( TP + FP ) = 5/(5+3) = 0.625
recall =TP / ( TP + FN )= 5/(5+7) = 0.417
3.F1 score
也称为F-beta scorenaive是什么意思
只有当P和R都很⾼的时候,F1才会⾼,所以称为调和平均数,F1的取值范围是0到1
按照前⾯的数值 F1 = 0.50
保证金英语4.support
⽀持度,是指原始的真实数据中属于该类的个数
5.accuracy
准确率,这个跟精确率只有⼀字之差,但实际上有很⼤的不同,它是指正确分类(不管是正确分为P还是N)的⽐率音频故事下载
accuray = (TP + TN) / (TP + FP + TN + FN ) = (TP + TN) / (P+N)
事实上从字⾯上看accuray和f1⼀样都可以作为⼀个指标评判整个模型,但是accruracy存在⼀个bug,当数据严重不均衡时, accuracy不起作⽤,⽐如我们看X光⽚,真实数据是:99%都是⽆病的,只有1%是有病的,假设⼀个分类器只要给它⼀张X 光⽚,它就判定是⽆病的,那么它的准确率也有99%,乍看很⾼,然⽽这个模型根本就不work。
6.宏平均(macro avg)和微平均(micro avg)
⽐如不同类别对于precision的宏平均是将各类的precision先算好再对它们求算术平均。
⽽对于precision的微平均是将所有类中中真阳例先加起来,再除以所有类中的(真阳例+假阳例)。下⾯是⼀个例⼦:
第⼀类
考研数学三国家线TP1= 12,FP1=9,FN1=3
Then precision (P1) and recall (R1) will be 57.14 and 80
第⼆类
TP2= 50,FP2=23 ,FN2=9
Then precision (P2) and recall (R2) will be 68.49 and 84.75
宏平均
Macro-average precision = (P1+P2)/2 = (57.14+68.49)/2 = 62.82
Macro-average recall = (R1+R2)/2 = (80+84.75)/2 = 82.25
微平均
Micro-average of precision = (TP1+TP2)/(TP1+TP2+FP1+FP2) = (12+50)/(12+50+9+23) = 65.96
Micro-average of recall = (TP1+TP2)/(TP1+TP2+FN1+FN2) = (12+50)/(12+50+3+9) = 83.78
微平均在classification_report中只有在多标签分类的时候才会显⽰,多标签不是指多个类,⽽是⼀个样本可能属于两个或以上的类。
7.加权平均(weighted avg)和样本平均(sample avg)
(1)加权平均(weighted avg):加上每个类的权重,即它的support的⼤⼩
精确度P的weighted avg = (P1 * support1 + P2 * support2) / (support1+support2)
(2)样本平均(sample avg):跟微平均⼀样,仅在多标签分类时显⽰
三、其他评判指标
(1)灵敏度(nsitive)
nsitive = TP/P,表⽰的是所有正例中被分对的⽐例,衡量了分类器对正例的识别能⼒,可以看到召回率与灵敏度是⼀样的。
(2)特效度(specificity)
specificity = TN/N,表⽰的是所有负例中被分对的⽐例,衡量了分类器对负例的识别能⼒;
参考资料:
en.wikipedia/wiki/Precision_and_recall
审时度势意思
en.wikipedia/wiki/F1_score