admin 管理员组

文章数量: 887021

Accuracy, Precision, Recall和F1

本文解释分类问题常用评价指标Accuracy, Precision, Recall和F1-score
主要参考以下文章
多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨
02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理
precision,recall,F1-score主要解决数据集中不平衡的问题,偏斜类数据:正负样本比例差距巨大时,为偏斜类数据,尤其是在医疗应用领域。
本文和之前介绍的模型评估名词介绍相结合。
简要记录一些形象化表述,为了能快速理解与区分。
Precision着重评估在预测为Positive的所有数据中,真实Positve的数据到底占多少?
Recall着重评估:在所有的Positive数据中,到底有多少数据被成功预测为Positive?
F值就是尝试做precision和recall之间协调的一个评价指标,一般看F值,只有当precision和recall都还不错的时候,F值才会高
代码记录:

sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)y_true:类别的真实标签值,类标签的列表y_pred:预测值的标签,类标签的列表labels:labels:   报告中要包含的标签索引的可选列表;这个参数一般不需要设置(如果要设置,比如200个类别,那么就应该如此设置:lable= range(200);  然后在sklearn.metrics.classification_report中将labels=label),可是有的时候不设置就会出错,之所以会出错是因为:比如你总共的类别为200个类,但是,你的测试集中真实标签包含的类别只有199个,有一个类别缺失数据,如果不设置这个参数就会报错;target_names:与标签匹配的名称,就是一个字符串列表,在报告中显示;也即是显示与labels对应的名称sample_weight:设置权重的参数,一般不用,需要就可以用digits:这个参数是用来设置你要输出的格式位数,就是几位有效数字吧,大概就是这个意思,即是输出格式的精确度;output_dict:一般不用,好像没啥用;如果为True,则将输出作为dict返回。return:每个类别精确率与召回率
from sklearn.metrics import classification_reporty_true = [0, 1, 2, 2, 2]
y_pred = [0, 0 ,2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true,y_pred,target_names=target_names))
              precision    recall  f1-score   supportclass 0       0.50      1.00      0.67         1class 1       0.00      0.00      0.00         1class 2       1.00      0.67      0.80         3accuracy                           0.60         5macro avg       0.50      0.56      0.49         5
weighted avg       0.70      0.60      0.61         5

本文标签: Accuracy Precision Recall和F1