欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn:precision、recall、F1值得average参数理解

程序员文章站 2022-06-13 07:55:07
...

分类实验的评价指标多用精确率(查准率)、召回率(查全率)、F1值。其二分类时的计算方式不做解释,着重记录多分类时其评价值的平均值的计算方式,主要有两种macroweighted

以precision为例,P表示二分类时精确率的计算结果

macro:不考虑类别数量,不适用于类别不均衡的数据集,其计算方式为: 各类别的P求和/类别数量

weighted:各类别的P × 该类别的样本数量实际值而非预测值)/ 样本总数量

from sklearn.metrics import precision_score
true = [0]*98 + [1]*2 +[3]*100
pre = [3]*98 + [1]*2 +[0]*100
precision_score(true, pre, average='macro')
Out[5]: 0.33333333333333331
precision_score(true, pre, average='weighted')
Out[6]: 0.01

如实际样本中,0类有98个样本,1类有2个样本,3类有100个样本,共有3类,样本总数为20。

预测结果中,0类全部预测为3类,全部错误;1类全部预测正确;3类全部预测为0类,全部预测错误。

则P_macro = 0 + 1 + 0 / 3 = 0.33333333

P_weighted = 0×98 + 1×2 + 0×100 / 200 = 2/200 = 0.01

true = [0]*98 + [1]*2
pre = [0]*100
precision_score(true, pre, average='macro')
Out[9]: 0.48999999999999999
precision_score(true, pre, average='weighted')
Out[10]: 0.96039999999999992

如共有100个样本,0类98个,1类2个;

预测结果为全0

则P_macro = 0.98 + 0 / 2 = 0.49

P_weighted = 98×0.98 + 0×2 / 100 = 2/200 = 0.9604

 

对于类别不均衡的分类模型,采用macro方式会有较大的偏差,采用weighted方式则可较好反映模型的优劣,因为若类别数量较小则存在蒙对或蒙错的概率,其结果不能真实反映模型优劣,需要较大的样本数量才可计算较为准确的评价值,通过将样本数量作为权重,可理解为评价值的置信度,数量越多,其评价值越可信。

相关标签: sklearn