在二分类任务且类别极不平衡的情况下,模型在二八分测试集上表现很好而在十折交叉验证中表现差的现象,更可能是由于训练/验证分布不均衡或评价指标不合适所导致的。下面是专门针对类别不平衡下的问题分析和解决建议。
一、问题分析:为什么二八分高而交叉验证低?
1. 样本分布偏差
- 二八分中测试集可能刚好包含较多的主类(多数类),使得模型预测偏向主类也能取得不错的Accuracy。
- 十折交叉验证时,每折的数据分布不同,部分折可能主类比例较低,导致模型失衡暴露得更明显。
2. 优化目标函数的问题
- 如果贝叶斯优化时使用的是
accuracy
或loss
,这类指标对不平衡数据不敏感,容易误导优化方向。 - 模型可能通过“全预测为多数类”来获得较低损失或较高accuracy,但F1、AUC很低。
二、如何调整优化策略,使模型在十折上表现也好?
✅ 1. 选择更适合不平衡分类的指标作为优化目标
在贝叶斯优化中使用以下之一作为目标:
- F1-score
- AUC (Area Under ROC Curve)
- Balanced Accuracy
- Matthews Correlation Coefficient (MCC)
from sklearn.metrics import f1_score, roc_auc_score
def objective(trial):
# 训练 + 验证代码
...
y_true, y_pred = ... # 从验证集中获取
return f1_score(y_true, y_pred