先复习一下查准率、召回率和 F1 分数:
为什么要使用平衡准确率(Balanced Accuracy)和加权 F1 值(Weighted F1)?
总的来说,平衡准确率和加权 F1 值都是在评估分类模型性能时非常重要的指标,它们可以帮助我们更全面、更准确地了解模型的性能。
平衡准确率(Balanced Accuracy)
平衡准确率用于处理二元分类问题中的标签不平衡数据集。它被定义为每个类别上获得的召回率的平均值。
balanced_accuracy_score
函数是 scikit-learn 库中的一个实现,它可以计算平衡准确率,从而避免在标签不平衡的数据集上过高估计性能。当参数 adjusted 设置为 False 时,平衡准确率的最佳值为 1,最差值为 0。下面是一个常用的计算示例:
from sklearn.metrics import balanced_accuracy_score
y_true = [0, 1, 0, 0, 1, 0]
y_pred = [0, 1, 1, 0, 0, 0]
balanced_accuracy_score(y_true, y_pred, adjusted=False)
有些研究文献提出了平衡准确率的替代定义。scikit-learn 对平衡准确率的定义是,它等同于具有类平衡样本权重的 accuracy_score,且与二进制案例具有相同的理想属性。对于二元分类问题,平衡准确率是灵敏度(真阳性率)和特异性(真阴性率)的算术平均值。具体的计算公式如下:
如果这个分类器在两个类别上的表现一样好,那么这个术语就简化为传统的准确率(即正确预测数除以总预测数)。平衡准确率取值范围从 0 到 1。当设置了 adjusted=True 时,它会重新调整到范围
到 1 之间,随机性能得分为 0。
加权 F1 值(Weighted F1)
F1 分数是评估模型在二分类任务中预测性能的常用指标,综合考虑了查准率和召回率。F1 分数是查准率和召回率的调和平均值,其取值范围为 0 到 1,其中,1 表示查准率和召回率均达到完美,而 0 则表示查准率和召回率均未达到完美。
F1 分数有多种变体,包括加权 F1 分数、宏观 F1 分数和微观 F1 分数,这些都适用于多元分类问题或需要对类别进行加权的场景。
scikit-learn 库实现的 f1_score
函数计算 F1 分数,一个常用代码示例如下所示:
import numpy as np
from sklearn.metrics import f1_score
# Ground truth (true labels)
y_true = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
# Predicted labels from your classifier
y_pred = np.array([0, 1, 2, 0, 1, 2, 0, 2, 2]) # The 8th label is misclassified
# Calculate Macro F1 Score
macro_f1 = f1_score(y_true, y_pred, average='macro')
print(f"Macro F1 Score: {macro_f1}")
# Calculate Micro F1 Score
micro_f1 = f1_score(y_true, y_pred, average='micro')
print(f"Micro F1 Score: {micro_f1}")
# Calculate Weighted F1 Score
weighted_f1 = f1_score(y_true, y_pred, average='weighted')
print(f"Weighted F1 Score: {weighted_f1}")
选择那种平均值,取决于具体情况,包括不同类别的重要性和样本分布的综合考虑。对于微观、宏观和加权平均 F1 分数的清晰解释,您可以参考这篇 Towards Data Science 的博客。通过简单的示例,帮助您理解多类别分类中微观平均、宏观平均和加权平均 F1 分数背后的概念。
📚️ 参考链接: