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

分类实验的评价指标多用精确率(查准率)、召回率(查全率)、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方式则可较好反映模型的优劣,因为若类别数量较小则存在蒙对或蒙错的概率,其结果不能真实反映模型优劣,需要较大的样本数量才可计算较为准确的评价值,通过将样本数量作为权重,可理解为评价值的置信度,数量越多,其评价值越可信。

你可能感兴趣的:(科学数据处理)