我试图弄清楚为什么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
我不明白为什么这三个值彼此不同。我尝试在这里阅读文档,但我仍然迷路了。
我的数据集是mutli级的,从本质上讲,我的数据集高度不平衡。这里的哪个值是"正确"的值,并通过扩展为平均参数(即无,微,宏,重量)的哪个值?
谢谢,任何见解都会很有价值。
查看返回值:
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')