拥抱脸 K 折叠

Hugging Face K-fold

提问人:Alireza 提问时间:8/13/2023 最后编辑:Alireza 更新时间:8/13/2023 访问量:83

问:

我想为整个 Hugging Face BERT 模型计算带有 K 折叠的混淆矩阵。

问题是,每当我计算没有 K 折的混淆矩阵时,它都会给我更大的数字,如下所示: {'tn': 75, 'fp': 30, 'fn': 36, 'tp': 77}

但是如果我添加 K-fold,它会给我这个结果: {'tn': 44, 'fp': 1, 'fn': 1, 'tp': 39}.

是我做错了什么还是结果是正确的?

以下是使用 K 折计算混淆矩阵的代码:

confusion_matrices = []

for eval_result in eval_results:
    confusion_matrices.append(eval_result["eval_confusion_matrix"])

total_confusion_matrix = {'tn': 0, 'fp': 0, 'fn': 0, 'tp': 0}

for confusion_matrix in confusion_matrices:
    total_confusion_matrix['tn'] += confusion_matrix['tn']
    total_confusion_matrix['fp'] += confusion_matrix['fp']
    total_confusion_matrix['fn'] += confusion_matrix['fn']
    total_confusion_matrix['tp'] += confusion_matrix['tp']

num_folds = len(confusion_matrices)
avg_confusion_matrix = {
    'tn': total_confusion_matrix['tn'] // num_folds,
    'fp': total_confusion_matrix['fp'] // num_folds,
    'fn': total_confusion_matrix['fn'] // num_folds,
    'tp': total_confusion_matrix['tp'] // num_folds
}

print("Confusion matrix:", avg_confusion_matrix)
蟒蛇 拥抱脸-变形金刚 混淆矩阵

评论


答:

0赞 Anilosan15 8/13/2023 #1

您的结果看起来不同,因为:

  1. 如果没有 K 折叠,您将在整个数据集上进行测试。使用 K-fold,您每次都只测试其中的一部分。 确保您的数据被很好地洗牌。如果班级不平衡,请尝试分层 K-Fold。
  2. 您的 K 折代码是每个折牌的结果的平均值。与单次运行相比,这可能会给出不同的数字。
  3. 您的 K 折叠结果可能是正确的,但请务必检查您的数据洗牌,并考虑平衡每个折叠中的类。

您的 K 折叠结果可能是正确的,但请务必检查您的数据洗牌,并考虑平衡每个折叠中的类。

我希望这会有所帮助!