You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

机器学习:2:1类别不平衡数据如何不做上下采样训练模型

无需上采样/下采样的类别不平衡训练方案

首先梳理当前数据集与训练结果的基础信息:

  • 二分类数据集类别分布:0类共169072条样本,1类共84944条样本,类别比例2:1,属于轻度不平衡场景
  • 当前基线模型分类结果存在明显的多数类偏向:1类召回率为0,模型几乎将所有样本判定为多数类(0类),仅靠预测多数类拿到68%的虚高准确率,没有学到少数类的有效特征
precision    recall  f1-score   support

         0.0       0.68      1.00      0.81     51683
         1.0       1.00      0.00      0.00     24522

    accuracy                           0.68     76205
   macro avg       0.84      0.50      0.40     76205
weighted avg       0.78      0.68      0.55     76205  

不需要改动原始数据集(不丢失真实数据、不生成假数据)的可行训练方案如下:

  • 调整类权重
    这是成本最低、见效最快的方案,所有主流机器学习、深度学习框架都原生支持该功能。核心逻辑是在损失计算阶段给少数类样本分配更高权重,让模型参数更新时更重视少数类的预测错误。针对2:1的类别比例,可以手动设置权重为{0.0:1, 1.0:2},也可以直接调用框架内置的balanced权重模式自动按样本量计算权重,不需要额外做数据处理。当前基线模型就是默认等权重训练,才会出现“全判0类损失最低”的错误倾向,调整权重后该问题会直接改善。
  • 调整分类阈值+更换评估指标
    不要把准确率作为核心评估指标,当前68%的准确率完全不代表模型效果,优先关注少数类F1值、AUC-PR(比AUC-ROC更适配不平衡场景)。模型输出的是分类概率,不需要死守0.5的分类判定阈值:当前1类召回率为0,说明判定为1类的阈值设置过高,可以在验证集上遍历测试不同阈值,找到让两类F1达到业务要求平衡的最优阈值即可,全程不需要改动训练数据。
  • 更换适配不平衡场景的损失函数
    保持原始数据集不变,将普通交叉熵损失替换为Focal Loss等不平衡友好的损失函数即可。这类损失会自动降低易分样本(即占大多数的、特征非常明显的0类样本)的损失权重,让模型把训练注意力放在难分样本和少数类样本上,对2:1这种轻度不平衡场景适配性很好。
  • 使用集成模型内置的平衡参数
    如果使用XGBoost、LightGBM、随机森林这类树集成模型,直接调用内置的scale_pos_weight参数即可,本质是框架内置的类权重调整,效果稳定,不会带来数据损失或假数据问题。针对当前2:1的类别比例,直接把该参数设为2就能看到明显效果。

注:2:1的类别比例属于非常轻度的不平衡,完全不需要上来就做下采样丢数据、或者上采样生成假数据,很多场景下盲目用SMOTE、随机下采样反而会引入噪声、丢失有效特征,先把上述几个无数据改动的方案调好,基本就能解决当前少数类召回为0的问题。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:09:23