我试图找出为什么F1得分与sklearn
中的得分相同。据我所知,它计算如下:
F1 = 2 * (precision * recall) / (precision + recall)
我的代码:
from sklearn.metrics import f1_score, precision_score, recall_score
...
fmeasure1 = f1_score(true_output, predicted_output, average="macro")
fmeasure2 = f1_score(true_output, predicted_output, average="micro")
precision = precision_score(true_output, predicted_output, average="macro")
recall = recall_score(true_output, predicted_output, average="macro")
print 2*(precision*recall)/(precision + recall), fmeasure1, fmeasure2
我获得的数据值是:
0.785744255639 0.769527615775 0.984532095901
我不明白为什么这三个值彼此不同。我已经尝试阅读文档here了,但我还是输了。
我的数据集是多类的,本质上是非常不平衡的。这里的哪个值是"正确"价值,并且通过扩展,我应该使用哪些平均参数(即无,微观,宏观,重量)?
谢谢,任何见解都非常有价值。
答案 0 :(得分:2)
查看返回值:
Returns:
f1_score : float or array of float, shape = [n_unique_labels]
F1 score of the positive class in binary classification or weighted average of the F1 scores of each class for the multiclass task.
每个值都是该特定班级的F1分数,因此可以使用不同的分数预测每个班级。
关于什么是最好的分数。
best value at 1 and worst score at 0.[ \[From documentation\]][1]
另一方面,如果您正在处理高度不平衡的数据集,您应该考虑查看抽样方法,或者只是在允许的情况下从现有数据中进行子抽样。
如果您想要平均预测average='weighted'
:
sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='weighted')