sklearn:precision、recall、F1值得average参数理解
程序员文章站
2022-06-13 07:55:07
...
分类实验的评价指标多用精确率(查准率)、召回率(查全率)、F1值。其二分类时的计算方式不做解释,着重记录多分类时其评价值的平均值的计算方式,主要有两种macro和weighted。
以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方式则可较好反映模型的优劣,因为若类别数量较小则存在蒙对或蒙错的概率,其结果不能真实反映模型优劣,需要较大的样本数量才可计算较为准确的评价值,通过将样本数量作为权重,可理解为评价值的置信度,数量越多,其评价值越可信。
上一篇: 疑异步罕有