sklearn.metrics.f1_score

sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

计算F1分数,也称为平衡F分数或F度量值

F1分数可以解释为精度和召回率的加权平均值,其中F1分数在1时达到最佳值,在0时达到最差值。精度和召回率对F1分数的相对贡献相等。 F1分数的公式为:

F1 = 2 * (精度*召回率)/(精度+召回率)

在多类别和多标签的情况下,为每一类的F1分数的均值,类权重取决于average参数。

用户指南中阅读更多内容。

参数 说明
y_true 1d array-like, or label indicator array / sparse matrix
真实目标值。
y_pred 1d array-like, or label indicator array / sparse matrix
分类器返回的估计目标。
labels list, optional
当average!='binary'时要包括的一组标签,如果average是None,则是标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。 默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。

在版本0.17中进行了更改:针对多类问题改进了参数标签。
pos_label str or int, 1 by default
average ='binary'且数据为二进制的要进行报告的类。如果数据是多类或多标签的,则将被忽略;设置labels=[pos_label]及average!='binary'将仅报告该标签的得分。
average string,[None| ‘binary’(default)| ‘micro’| ‘macro’| ‘samples’| ‘weighted’]
对于多类/多标签目标,此参数是必需的。如果为None,则返回每个类的得分。否则,将确定数据执行的平均类型:
- 'binary':
仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。
- 'micro':
通过计算真正例、假负例和假正例的总数来全局计算度量。
- 'macro':
计算每个标签的度量,并找到其未加权平均值。 这没有考虑标签不平衡。
- 'weighted':
计算每个标签的度量,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。
- 'samples':
计算每个实例的度量,并找到它们的平均值(仅对不同于accuracy_score的多标签分类有意义)。
sample_weight array-like of shape (n_samples,), default=None
样本权重。
zero_division “warn”, 0 or 1, default=”warn”
设置除数为零(即所有预测和标签均为负)时的返回值。如果设置为“warn”,则该值为0,但也会发出警告。
返回值 说明
f1_score float or array of float, shape = [n_unique_labels]
二进制分类中的正例类的F1分数,或者对于多类别任务,每个类别的F1分数的加权平均值。

另见:

fbeta_score, precision_recall_fscore_support, jaccard_score

multilabel_confusion_matrix

当真正例+假正例== 0时,精度是不确定的;当真正例+假负例== 0时,召回率是不确定的。在这种情况下,默认情况下,度量将设置为0,f分数也将设置为0,并且将引发UndefinedMetricWarning。可以使用zero_division修改此行为。

参考

1 Wikipedia entry for the F1-score

示例

>>> from sklearn.metrics import f1_score
>>> y_true = [012012]
>>> y_pred = [021001]
>>> f1_score(y_true, y_pred, average='macro')
0.26...
>>> f1_score(y_true, y_pred, average='micro')
0.33...
>>> f1_score(y_true, y_pred, average='weighted')
0.26...
>>> f1_score(y_true, y_pred, average=None)
array([0.80. , 0. ])
>>> y_true = [000000]
>>> y_pred = [000000]
>>> f1_score(y_true, y_pred, zero_division=1)
1.0...

sklearn.metrics.f1_score应用示例