网站结构分析,关键词林俊杰的寓意,灵台县门户网,开发网站需要注意文章目录 一、分类指标函数1.1 precision_score函数1.2 recall_score函数1.3 accuracy_score函数1.4 f1_score函数1.5 precision_recall_curve函数1.6 roc_curve函数1.7 roc_auc_score函数1.8 classification_report函数 二、二分类任务三、多分类任务3.1 Macro Average#x… 文章目录 一、分类指标函数1.1 precision_score函数1.2 recall_score函数1.3 accuracy_score函数1.4 f1_score函数1.5 precision_recall_curve函数1.6 roc_curve函数1.7 roc_auc_score函数1.8 classification_report函数 二、二分类任务三、多分类任务3.1 Macro Average宏平均3.2 Micro Average微平均3.3 宏平均 vs. 微平均 在前面的文章中我们已经介绍了分类指标PrecisionRecallF1-Score的定义和计算公式详解分类指标PrecisionRecallF1-Score
我们可以知道精度(precision)、查全率(recall)、F1的计算是针对于二分类器来定义的。他们的计算只与y_true和y_pred有关要求y_true和y_pred中只含有0和1两个类别。
我们在实际计算上述二分类任务的评价指标时可以直接调用sklearn中的函数库实现。
一、分类指标函数
1.1 precision_score函数
precision_score函数用于计算分类结果的查准率。 – 官方文档https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html – 函数定义
sklearn.metrics.precision_score(y_true, y_pred, labelsNone, pos_label1, averagebinary, sample_weightNone) 1.2 recall_score函数
recall_score函数用于计算分类结果的查全率。 – 官方文档https://scikit-learn.org/stable/modules/generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score – 函数定义
sklearn.metrics.recall_score(y_true, y_pred, labelsNone, pos_label1,
averagebinary, sample_weightNone) 1.3 accuracy_score函数
accuracy_score函数用于计算分类结果的准确率。
sklearn.metrics.accuracy_score(y_true, y_pred, normalizeTrue, sample_weightNone)1.4 f1_score函数
f1_score函数用于计算分类结果的值。
sklearn.metrics.f1_score(y_true, y_pred, labelsNone, pos_label1,
averagebinary, sample_weightNone)1.5 precision_recall_curve函数
precision_recall_curve函数用于计算分类结果的P-R曲线。
sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_labelNone,
sample_weightNone)1.6 roc_curve函数
roc_curve函数用于计算分类结果的ROC曲线。其原型为
sklearn.metrics.roc_curve(y_true, y_score, pos_labelNone, sample_weightNone,
drop_intermediateTrue)1.7 roc_auc_score函数
oc_auc_score函数用于计算分类结果的ROC曲线的面积AUC。
sklearn.metrics.roc_auc_score(y_true, y_score, averagemacro, sample_weightNone)1.8 classification_report函数
sklearn中的classification_report函数用于显示主要分类指标的文本报告在报告中显示每个类的精确度召回率F1值等信息。
sklearn.metrics.classification_report(y_true, y_pred, labelsNone, target_namesNone, sample_weightNone, digits2)二、二分类任务
对二分类模型来说可以直接调用 sklearn.metrics 中的 precision_score, recall_score 和 f1_score 来进行计算将函数中的 average 参数设置为binary (averagebinary) 即可。
应用示例
from sklearn.metrics import precision_score, recall_score, f1_score, classification_reporty_true [1, 1, 1, 1, 1, 0, 0, 0, 0, 1]
y_pred [1, 1, 1, 1, 1, 1, 1, 0, 0, 0]precision precision_score(y_true, y_pred, averagebinary)
print(precision:, precision)recall recall_score(y_true, y_pred, averagebinary)
print(recall:, recall)f1_score f1_score(y_true, y_pred, averagebinary)
print(f1_score:, f1_score)输出结果如下
precision: 0.714285714286
recall: 0.833333333333
f1_score: 0.769230769231我们还可以使用 classification_report 函数来查看每一类的分类情况
target_names [class 0, class 1]
cla_report classification_report(y_true, y_pred, target_namestarget_names)
print(cla_report:, cla_report)输出结果如下 precision recall f1-score supportclass 0 0.67 0.50 0.57 4class 1 0.71 0.83 0.77 6avg / total 0.70 0.70 0.69 10三、多分类任务
前面提到传统的精度(precision)、查全率(recall)、F1的计算公式只适用于二分类模型。
对多分类模型来说要用Macro Average宏平均或Micro Average微平均规则来进行F1或者P、R的计算。
3.1 Macro Average宏平均
宏平均Macro-averaging是先对每一个类统计指标值然后在对所有类求算术平均值。
Macro Average宏平均会首先针对每个类计算评估指标如查准率Precesion查全率 Recall , F1 Score。然后对他们取平均得到Macro Precesion, Macro Recall, Macro F1。具体计算方式如下 举例来说假设是三个类别的分类模型
y_true[1,2,3]
y_pred[1,1,3]Macro Average F1的计算过程如下
1将第1个类别设置为True1非第1个类别的设置为False0计算P1, R1。
y_true[1,0,0]
y_pred[1,1,0]P1 (预测为1且正确预测的样本数)/(所有预测为1的样本数) TP/(TPFP) 1/(11)0.5
R1 (预测为1且正确预测的样本数)/(所有真实情况为1的样本数) TP/(TPFN) 1/1 1.0
F1_1 2*(PrecisionRecall)/(PrecisionRecall)20.5*1.0/(0.51.0)0.66666672将第2个类别设置为True1非第2个类别的设置为False0计算P2, R2。
y_true[0,1,0]
y_pred[0,0,0]P2 (预测为1且正确预测的样本数)/(所有预测为1的样本数) TP/(TPFP) 0.0
R2 (预测为1且正确预测的样本数)/(所有真实情况为1的样本数) TP/(TPFN) 0.0
F1_2 2*(Precision*Recall)/(PrecisionRecall)03将第3个类别设置为True1非第3个类别的设置为False0计算其P3, R3。
y_true[0,0,1]
y_pred[0,0,1]P3 (预测为1且正确预测的样本数)/(所有预测为1的样本数) TP/(TPFP) 1/11.0
R3 (预测为1且正确预测的样本数)/(所有真实情况为1的样本数) TP/(TPFN) 1/1 1.0
F1_3 2*(PrecisionRecall)/(PrecisionRecall)21.0*1.0/(1.01.0)1.04对P1、P2、P3取平均为P对R1、R2、R3取平均为R对F1_1、F1_2、F1_3取平均F1。
P(P1P2P3)/3(0.50.01.0)/30.5
R(R1R2R3)/3(1.00.01.0)/30.6666666
F1 (0.66666670.01.0)/30.5556最后这个取平均后的得到的P值/R值就是Macro规则下的P值/R值。对这个3类别模型来说它的F1就是0.5556。
【基于sklearn 实现 Macro Average】
下面给出基于sklearn计算Macro Average宏平均的样例将函数中的 average 参数设置为macro (averagemacro) 即可。
from sklearn.metrics import precision_score, recall_score, f1_scorey_true [1, 2, 3]
y_pred [1, 1, 3]precision precision_score(y_true, y_pred, averagemacro)
print(precision:, precision)recall recall_score(y_true, y_pred, averagemacro)
print(recall:, recall)f1_score f1_score(y_true, y_pred, averagemacro)
print(f1_score:, f1_score)输出结果如下
precision: 0.5
recall: 0.666666666667
f1_score: 0.5555555555563.2 Micro Average微平均
Micro Average微平均会考虑到所有类别的贡献将所有类别的预测结果合并在一起然后计算整体的性能指标。
Micro-average (TP FP) / (TP TN FP FN)
分母就是输入分类器的预测样本个数分子就是预测正确的样本个数无论类别。
对于Micro F1而言Micro F1 Micro Recall Micro Precesion Accuracy。
【基于sklearn 实现 Micro Average】
下面给出基于sklearn计算Micro Average微平均的样例将函数中的 average 参数设置为micro (averagemicro) 即可。
from sklearn.metrics import precision_score, recall_score, f1_scorey_true [1, 2, 3]
y_pred [1, 1, 3]precision precision_score(y_true, y_pred, averagemicro)
print(precision:, precision)recall recall_score(y_true, y_pred, averagemicro)
print(recall:, recall)f1_score f1_score(y_true, y_pred, averagemicro)
print(f1_score:, f1_score)输出结果如下
precision: 0.666666666667
recall: 0.666666666667
f1_score: 0.6666666666673.3 宏平均 vs. 微平均 Macro平均对每个类别的性能指标分别计算平均值然后再对这些平均值求平均。 – 在Macro平均中对于每个类别分别计算查准率、查全率和F1分数并对这些指标进行简单平均。 – Macro平均给予每个类别相同的权重不考虑样本数量的差异因此能够平等对待每个类别。 – Macro平均更适用于每个类别的性能对整体性能均等重要的情况。 Micro平均将所有类别的预测结果合并在一起然后计算整体的性能指标。 – 在Micro平均中所有类别的真正例、假正例和假负例的数量总和用于计算查准率、查全率和F1分数。 – Micro平均给予每个样本相同的权重无论其属于哪个类别因此对于样本数量不均衡的问题Micro平均会偏向于样本数量多的类别。 – Micro平均更适用于在不同类别上有明显不均衡样本分布的情况且更关注整体性能而不是每个类别的个别性能。
总结来说:Macro平均是对每个类别的结果进行独立计算并对各个类别的结果进行平均适用于每个类别的性能对整体性能均等重要的情况。而Micro平均是将所有类别的结果合并成一个总体进行计算适用于样本数量不均衡或关注整体性能的情况。而选择使用哪种平均方法取决于具体的问题和需求。