F1分数计算方法

F1分数,也称为平衡F分数或F-measure,是一种衡量分类模型性能的指标。它综合了精确率和召回率,提供了一个单一的数值来评价模型的整体性能。F1分数的取值范围从0到1,其中1表示最佳性能,0表示最差性能。F1分数的计算公式如下:

F1 = 2 * TP / (2 * TP + FP + FN)

其中,TP代表真正例(True Positives),FP代表假正例(False Positives),FN代表假负例(False Negatives)。在没有真正例、假负例或假正例的情况下,默认F1分数计算为0.0。

对于二分类问题,如果设置average参数为'binary',将只返回指定正类的F1分数。如果average参数不是'binary',则忽略pos_label参数,计算两个类别的F1分数,然后进行平均或都返回(当average=None时)。对于多分类和多标签目标,F1分数可以为所有标签返回或平均,这取决于average参数的设置。

average参数用于多分类/多标签目标,其可能的取值包括'micro'、'macro'、'weighted'、'samples'和'binary'。如果设置为None,则返回每个类别的分数。否则,它决定了数据上执行的类型平均:

  • 'binary':只报告由pos_label指定的类别的结果。
  • 'micro':通过计算总的真正例、假负例和假正例来全局计算指标。
  • 'macro':为每个标签计算指标,并找到它们的未加权平均值。
  • 'weighted':为每个标签计算指标,并找到它们的加权平均值,权重是支持(每个标签的真实实例数)。
  • 'samples':为每个实例计算指标,并找到它们的平均值(仅对多标签分类有意义,与accuracy_score不同)。

sample_weight参数允许为每个样本指定权重,而zero_division参数设置了当出现零除错误时返回的值。如果设置为'warn',则行为类似于0,但还会发出警告。如果设置为np.nan,则这样的值将从平均值中排除。

F1分数的计算结果可以是一个浮点数,也可以是一个浮点数数组,形状为[n_unique_labels],表示二分类中正类的F1分数,或者是多类任务中每个类的F1分数的加权平均值。

在实际应用中,F1分数是一个重要的性能指标,尤其是在类别不平衡的情况下。例如,当一个类别的样本数量远多于另一个类别时,精确率和召回率可能会受到较大影响,而F1分数则提供了一个平衡的视角。

下面是一个使用Python的scikit-learn库计算F1分数的示例代码:

import numpy as np from sklearn.metrics import f1_score y_true = [0, 1, 2, 0, 1, 2] y_pred = [0, 2, 1, 0, 0, 1] print(f1_score(y_true, y_pred, average='macro')) # 输出: 0.26... print(f1_score(y_true, y_pred, average='micro')) # 输出: 0.33... print(f1_score(y_true, y_pred, average='weighted')) # 输出: 0.26... print(f1_score(y_true, y_pred, average=None)) # 输出: [0.8, 0. , 0. ]

在上述代码中,首先导入了numpy和scikit-learn库中的f1_score函数。然后,定义了真实的标签y_true和预测的标签y_pred。接着,使用不同的average参数计算了F1分数,并打印了结果。

需要注意的是,当一个类别在y_true或y_pred中完全缺失时(即真阳性+假阳性+假阴性==0),F分数是未定义的。在这种情况下,默认F分数将被设置为0.0,并引发UndefinedMetricWarning。这种行为可以通过设置zero_division参数来修改。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485