平衡数据你好,
由于我的回复率只有 27%,我想在分析数据之前平衡一下数据。我首先创建了一个分层的(基于我的目标列)验证列,以创建训练集、验证集和测试集。我的问题是,我应该在训练集和验证集中平衡数据,而不是在测试集中平衡,还是只在训练集中平衡?我想使用 SMOTE 技术,最后在级联数据库(训练集+验证集+测试集)上使用模型筛选平台的交叉验证技术,并使用验证列进行测试集性能分析。这种方法可以在交叉验证之前平衡我的数据吗?欢迎提出其他建议?
问候,
周一
基础数据分析与建模预测模型和机器学习回复:平衡数据你好@鲁 ,
我对 SMOTE 或其他分类平衡技术有着复杂的感受:
- SMOTE 会彻底“破坏”分类器的校准(因为它会在学习阶段彻底改变两个类别的比例),这意味着分类器计算出的概率与数据集中实际测量的概率不符。这对于某些应用(医疗保健、金融/银行等)尤其敏感,因为有时您可能需要计算出的概率,而不是最终的多数类。
- 此外,在原始论文中以及后续研究中证实,当分类器是弱学习模型(例如决策树和朴素贝叶斯)时,SMOTE 仅能提供微小的改进。当与最先进的/“强”模型(例如随机森林、XGBoost 等)一起使用时,SMOTE 不仅不会带来任何好处,甚至可能对学习造成不利影响。另一项研究: 基于机器学习的预测模型的类别不平衡校正的危害:一项模拟研究 - Carriero - 2025 - 医学统计学 - Wiley 在线图书馆
在大多数研究中,关于这些技术的结论是相同的:“使用强分类器可以实现正确、最佳的预测,平衡数据既不是必需的,也无益”或“纠正类别不平衡并不总是必要的,甚至可能对旨在根据个人情况产生可靠风险估计的临床预测模型有害”。
- SMOTE 在某些特定情况下可能有效,例如使用弱学习器或无法调整决策阈值时,但其相对优势也可能因所选的性能指标而异。除此之外,我不建议使用它。
对于少数类来说,27% 的失衡并不算太大,调整决策阈值或指定利润矩阵等经典方法应该能够帮助你根据情况调整分类器的性能。添加新特征/变量、预处理数据(特征工程)以改进模型、添加新数据或选择最具代表性的不同观测值,以及尝试多个模型进行比较和基准测试,这些方法也有助于提升性能。
重要的是要理解,数据不平衡之所以会成为问题,仅仅是因为训练集中的少数类缺乏足够的代表性,以及/或者特征不足以作为标签的指标。理想的情况是解决这两个问题,这样模型即使存在不平衡,也能表现良好。
话虽如此,在工作流程中添加 SMOTE(或任何预处理)操作(如果需要)应谨慎操作,以避免数据泄露和过度乐观的性能预期。SMOTE 或任何其他平衡技术应该应用于训练集和验证集(用于训练、比较和选择性能最佳的模型),但显然不应用于测试集,因为模型需要在“真实”条件下(存在严重不平衡)执行和评估。
希望这个答案能对你有所帮助,
回复:平衡数据感谢 Victor 的明确建议。
目前,我已经使用“不平衡分类”插件检查了模型的性能,并计算了神经网络、Bootstrap Forrest 和 Boosted Tree 模型的准确率、召回率和 ROC 曲线下面积 (AUC),这些模型分别使用了 SMOTE 和 TOMEC 平衡,但 AUC 根本没有提升。所以,平衡数据可能无论如何都无法提升性能。
感谢您的支持,
问候
周一
回复:平衡数据嘿,Russ,
我有一个“验证”列,用于区分训练、验证和测试行。在应用嵌套交叉验证时,是否应该在模型筛选平台中指定此列?我注意到,性能统计摘要会根据是否包含此列而有所不同。
您能否确认在这种情况下推荐的方法是什么?
我想比较并报告 ML 模型的性能。
有没有一种快速的方法可以获取比当前生成的摘要报告更详细的信息,例如 F1、MCC、Sens、Spec、FP、FN 等?
问候,
周一
回复:平衡数据你好@鲁 ,
如果您在启动模型筛选平台时选择了交叉验证选项,则添加验证列不会改变任何内容,因为所选的交叉验证选项将接管验证列: 启动模型筛选平台(验证部分)。
如果你没有固定随机种子,那么你可能会得到不同的结果。在选择交叉验证选项时,无论是否添加验证列,都会在固定随机种子的情况下得到相同的结果:

关于模型评估、比较和选择的(广泛)主题,其他几个主题可能有助于您找到相关的验证策略:
如何对 ML 模型(例如神经网络和随机森林)进行 k 折交叉验证并在固定测试数据上检查模型性能? 模型筛选
一个或多个验证列
使用 k 折拟合质量进行交叉验证
留一法或 k 折交叉验证方法??
交叉验证 - 验证列方法
希望这个答案能对你有所帮助,