【发布时间】:2012-01-07 05:45:33
【问题描述】:
我正在做多类分类,类别不平衡。
我注意到 f1 总是小于准确率和召回率的直接调和平均值,在某些情况下,f1 甚至小于准确率和召回率。
仅供参考,我打电话给metrics.precision_score(y,pred) 询问精度等等。
我知道微观/宏观平均值的差异,并使用precision_recall_fscore_support()的类别结果测试它们不是微观的。
不确定是使用了宏观平均还是其他原因?
更新详细结果如下:
n_samples:75,n_features:250
多项式NB(alpha=0.01, fit_prior=True)
2 倍简历:
第一次运行:
F1: 0.706029106029
Precision: 0.731531531532
Recall: 0.702702702703
precision recall f1-score support
0 0.44 0.67 0.53 6
1 0.80 0.50 0.62 8
2 0.78 0.78 0.78 23
avg / total 0.73 0.70 0.71 37
第二次运行:
F1: 0.787944219523
Precision: 0.841165413534
Recall: 0.815789473684
precision recall f1-score support
0 1.00 0.29 0.44 7
1 0.75 0.86 0.80 7
2 0.82 0.96 0.88 24
avg / total 0.84 0.82 0.79 38
总体:
Overall f1-score: 0.74699 (+/- 0.02)
Overall precision: 0.78635 (+/- 0.03)
Overall recall: 0.75925 (+/- 0.03)
来自Scholarpedia的关于微观/宏观平均的定义:
在多标签分类中,计算一个最简单的方法 跨类别的总分是对所有类别的分数进行平均 二进制任务。结果分数称为宏观平均召回率, 精度、F1 等。另一种平均方法是对 TP、FP、 首先对所有类别进行TN、FN和N,然后计算每个类别 上述指标。结果分数称为微平均。 宏观平均对每个类别赋予相同的权重,并且通常 由系统在稀有类别( 多数)在类似幂律的分布中。微平均给出了一个 每个文档的权重相等,并且通常由系统的 在最常见的类别上表现出色。
它是 Github 中的当前open issue,#83。
以下示例演示了微观、宏观和加权(当前在 Scikit-learn 中)平均可能有何不同:
y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
pred = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 2, 0, 1, 2, 2, 2, 2]
混淆矩阵:
[[9 3 0]
[3 5 1]
[1 1 4]]
Wei Pre: 0.670655270655
Wei Rec: 0.666666666667
Wei F1 : 0.666801346801
Wei F5 : 0.668625356125
Mic Pre: 0.666666666667
Mic Rec: 0.666666666667
Mic F1 : 0.666666666667
Mic F5 : 0.666666666667
Mac Pre: 0.682621082621
Mac Rec: 0.657407407407
Mac F1 : 0.669777037588
Mac F5 : 0.677424801371
上面的F5是F0.5的简写...
【问题讨论】:
-
如果我们是macro-averaging,意思是对每个观察值计算precision、recall和F1-score,然后计算所有precision值、recall值和F1-score的平均值返回值。所以最终准确率和最终召回率的调和平均值肯定不会等同于最终的 F1-score
标签: python machine-learning scikits scikit-learn