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

RandomForestClassifier中class_weight参数在不平衡数据集无效果问题排查

问题排查与解决方案

核心原因:SMOTE与class_weight重复作用

你已经对训练集做了SMOTE过采样,这会让训练集中的正负类样本数量趋于平衡。而class_weight的作用是在类别不平衡的训练集中,给少数类更高的权重来引导模型关注它。现在训练集已经平衡了,权重调整自然不会产生任何效果,模型测试时依然会倾向于多数类的固有分布。

具体解决方案

  • 二选一:去掉SMOTE或放弃class_weight
    如果想通过class_weight提升少数类召回率,直接使用原始不平衡的训练集训练,不要做SMOTE过采样。可以用class_weight='balanced'让sklearn自动计算权重,比手动设置更准确:

    model = RandomForestClassifier(bootstrap=False, criterion='gini', max_depth=24, max_features='log2', min_samples_leaf=1, min_samples_split=2, n_estimators=200, class_weight='balanced')
    model.fit(X_train, y_train)  # 用原始训练集,不是SMOTE处理后的
    
  • 调整决策阈值(适合保留SMOTE的场景)
    如果你想继续用SMOTE处理后的训练集,可以通过降低模型预测的决策阈值来提升少数类召回率。默认阈值是0.5,你可以用predict_proba获取概率,然后自定义阈值:

    y_pred_proba = model.predict_proba(X_test_outliers)[:, 1]
    # 降低阈值,比如设为0.3,让模型更容易预测为正类
    y_pred = (y_pred_proba >= 0.3).astype(int)
    

    这个操作会让更多样本被预测为正类,直接提升少数类的召回率,同时牺牲部分精确率,符合你的预期。

  • 检查数据一致性
    确认X_test_outliers和y_test是严格对应的测试集数据,没有出现数据错位、混淆的情况,这会导致评估结果失真。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:54:54