classification_report vs f1_score 在 scikit-learn 的分类指标中
classification_report vs f1_score in scikit-learn's classification metrics
使用 scikit-learn 的评估指标评估二元分类器的正确方法是什么?
给定 y_test 和 y_pred 作为黄金和预测标签,classification_report 输出中的 F1 分数不应该与 f1_score 产生的相同吗?
这是我的做法:
print(classification_reprot(y_test, y_pred)
给出以下 table:
precision recall f1-score support
0 0.49 0.18 0.26 204
1 0.83 0.96 0.89 877
avg / total 0.77 0.81 0.77 1081
然而,
print(f1_score(y_test, y_pred)
给出 F1 分数 = 0.89
现在,给定以上输出,这个模型的性能 F1 分数是 0.89 还是 0.77?
简而言之,对于您的情况,f1-score 为 0.89,加权平均 f1-score 为 0.77。
看看sklearn.metrics.f1_score
的文档字符串:
The F1 score can be interpreted as a weighted average of the precision and
recall, where an F1 score reaches its best value at 1 and worst score at 0.
The relative contribution of precision and recall to the F1 score are
equal. The formula for the F1 score is::
F1 = 2 * (precision * recall) / (precision + recall)
In the multi-class and multi-label case, this is the weighted average of
the F1 score of each class.
关键是这里的最后一句。如果您正在寻找每个 class 的加权平均 f1 分数,那么您不应该为函数提供 0/1 二进制 class 化。所以,例如,你可以做
f1_score(y_test + 1, y_pred + 1)
# 0.77
如果 class 标签不是 0/1,则它被视为多 class 指标(您关心所有 precision/recall 分数)而不是二进制指标(您只关心正样本的 precision/recall )。我同意这可能有点令人惊讶,但通常 0/1 classes 被视为二进制 classification.
的标记
编辑:自 Scikit-learn 0.16 以来,此处列出的某些行为已被弃用 – 特别是关于二进制与非二进制的令人困惑的隐式假设 classifications。有关详细信息,请参阅 this github thread。
使用 scikit-learn 的评估指标评估二元分类器的正确方法是什么?
给定 y_test 和 y_pred 作为黄金和预测标签,classification_report 输出中的 F1 分数不应该与 f1_score 产生的相同吗?
这是我的做法:
print(classification_reprot(y_test, y_pred)
给出以下 table:
precision recall f1-score support
0 0.49 0.18 0.26 204
1 0.83 0.96 0.89 877
avg / total 0.77 0.81 0.77 1081
然而,
print(f1_score(y_test, y_pred)
给出 F1 分数 = 0.89
现在,给定以上输出,这个模型的性能 F1 分数是 0.89 还是 0.77?
简而言之,对于您的情况,f1-score 为 0.89,加权平均 f1-score 为 0.77。
看看sklearn.metrics.f1_score
的文档字符串:
The F1 score can be interpreted as a weighted average of the precision and
recall, where an F1 score reaches its best value at 1 and worst score at 0.
The relative contribution of precision and recall to the F1 score are
equal. The formula for the F1 score is::
F1 = 2 * (precision * recall) / (precision + recall)
In the multi-class and multi-label case, this is the weighted average of
the F1 score of each class.
关键是这里的最后一句。如果您正在寻找每个 class 的加权平均 f1 分数,那么您不应该为函数提供 0/1 二进制 class 化。所以,例如,你可以做
f1_score(y_test + 1, y_pred + 1)
# 0.77
如果 class 标签不是 0/1,则它被视为多 class 指标(您关心所有 precision/recall 分数)而不是二进制指标(您只关心正样本的 precision/recall )。我同意这可能有点令人惊讶,但通常 0/1 classes 被视为二进制 classification.
的标记编辑:自 Scikit-learn 0.16 以来,此处列出的某些行为已被弃用 – 特别是关于二进制与非二进制的令人困惑的隐式假设 classifications。有关详细信息,请参阅 this github thread。