提问人:Alireza 提问时间:8/13/2023 最后编辑:Alireza 更新时间:8/13/2023 访问量:83
拥抱脸 K 折叠
Hugging Face K-fold
问:
我想为整个 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
您的结果看起来不同,因为:
- 如果没有 K 折叠,您将在整个数据集上进行测试。使用 K-fold,您每次都只测试其中的一部分。 确保您的数据被很好地洗牌。如果班级不平衡,请尝试分层 K-Fold。
- 您的 K 折代码是每个折牌的结果的平均值。与单次运行相比,这可能会给出不同的数字。
- 您的 K 折叠结果可能是正确的,但请务必检查您的数据洗牌,并考虑平衡每个折叠中的类。
您的 K 折叠结果可能是正确的,但请务必检查您的数据洗牌,并考虑平衡每个折叠中的类。
我希望这会有所帮助!
评论