详解 Scikit-learn 的 metrics.f1_score函数:计算分类器 F1 值

  • Post category:Python

1. F1-Score 介绍

F1-Score是一种用于评估二分类模型(Binary Classification)好坏的指标。它是精确率(Precision)和召回率(Recall)的调和平均数。在二分类问题中,精确率指的是预测为Positive的样本中,实际也为Positive的比例,召回率表示实际为Positive的样本中,被预测为Positive的比例。F1-Score在精确率和召回率权衡的问题上比较优秀,尤其是在不可靠的数据集上。

F1-Score的取值范围是0到1之间,取得最大值1时,说明分类器的效果最佳。反之,取值越小,分类器效果越差。公式如下:

$$ F1=\frac{2\times Precision\times Recall}{Precision+Recall} $$

其中,精确率(Precision)计算公式为:

$$ Precision=\frac{True Positive}{True Positive+False Positive} $$

召回率(Recall)计算公式为:

$$ Recall= \frac{True Positive}{True Positive+False Negative} $$

2. sklearn.metrics.f1_score函数的参数与用法

在Scikit-learn中,可以通过sklearn.metrics.f1_score函数来计算二分类模型的F1-Score。该函数的使用方法如下:

f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)

其中,参数说明如下:

  • y_true:array-like,一维数组,表示真实标签数组;
  • y_pred:array-like,一维数组,表示预测标签数组;
  • labels:array-like,一维数组,表示所有分类的标签;
  • pos_label:int 或 str,默认值为1,表示正类标签;
  • average:str,可选值为(‘micro’, ‘macro’, ‘samples’, ‘weighted’, ‘binary’)之一,默认值为‘binary’,表示计算二分类问题的F1-Score;
  • sample_weight:array-like,可选,用于表示各样本权重的数组。

3. sklearn.metrics.f1_score函数的实例

为了更好的说明上述函数的用途,下面提供两个实例。

3.1 实例1:二分类问题

from sklearn.metrics import f1_score
y_true = [0, 1, 0, 1, 1]
y_pred = [1, 0, 0, 1, 1]
f1 = f1_score(y_true, y_pred)
print("F1-Score: {}".format(f1))

上述代码中,首先导入了f1_score函数,然后定义了两个一维数组y_truey_pred,分别表示真实标签和预测标签。接下来,调用f1_score函数,计算二分类问题的F1-Score。最后输出结果,得到:

F1-Score: 0.6666666666666666

3.2 实例2:多分类问题

from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
f1 = f1_score(y_true, y_pred, average='micro')
print("F1-Score (micro): {}".format(f1))
f1 = f1_score(y_true, y_pred, average='macro')
print("F1-Score (macro): {}".format(f1))

在这个例子中,我们考虑一个三分类问题,标签分别为0、1、2,真实标签和预测标签分别表示为y_truey_pred。在计算F1-Score时,我们先使用‘micro’参数计算,然后使用‘macro’参数计算。最后输出结果,得到:

F1-Score (micro): 0.3333333333333333
F1-Score (macro): 0.26666666666666666

其中,使用‘micro’参数计算得到的F1-Score为0.3333,而使用‘macro’参数计算得到的F1-Score为0.2667。