使用sklearn

时间:2016-12-22 07:33:19

标签: python scikit-learn

我试图找出为什么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了,但我还是输了。

我的数据集是多类的,本质上是非常不平衡的。这里的哪个值是"正确"价值,并且通过扩展,我应该使用哪些平均参数(即无,微观,宏观,重量)?

谢谢,任何见解都非常有价值。

1 个答案:

答案 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')