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

Random Forest Classifier预测阳性样本比例低于实际的原因排查

解决Random Forest在类别不平衡任务中预测阳性比例偏低的问题

1. 调整类别权重参数

Random Forest默认class_weight=None,也就是对所有类别赋予相同权重,在负类占80%的场景下,模型天然会偏向预测多数类。你可以直接设置class_weight='balanced',它会根据样本占比自动计算权重:权重与类别的样本数成反比,公式为n_samples / (n_classes * np.bincount(y));如果用的是有放回采样(默认bootstrap=True),更推荐class_weight='balanced_subsample',它会在每个决策树的采样过程中重新计算类别权重,适配采样后的样本分布。

示例代码:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(class_weight='balanced', random_state=42)

2. 手动调整决策阈值

默认的0.5阈值是为类别均衡场景设计的,在不平衡数据下完全不适用。你可以先让模型输出样本属于正类的概率,再根据目标阳性比例调整阈值:

  • 用predict_proba()获取正类概率(假设正类标签是1)
  • 统计概率分布,找到一个阈值,让大于该阈值的样本占比接近20%

示例代码:

# 获取测试集正类预测概率
y_proba = clf.predict_proba(X_test)[:, 1]
# 取概率排名前20%的样本作为阳性预测,对应阈值为80分位数
threshold = np.percentile(y_proba, 80)
y_pred = (y_proba >= threshold).astype(int)

3. 尝试样本采样策略

除了模型参数,也可以从数据层面优化:

  • 过采样:对正类样本进行重复采样或生成合成样本(比如SMOTE),提升正类的样本占比
  • 欠采样:随机剔除部分负类样本,缩小正负类的样本量差距
    不过要注意,欠采样可能丢失负类的有效信息,过采样有一定过拟合风险,但你提到模型无过拟合迹象,可以尝试这类方法。

4. 更换更合适的评估指标

别只盯着预测阳性比例,类别不平衡任务里准确率基本没有参考价值。建议重点关注召回率(正类被正确识别的比例)、精确率、F1分数,以及PR-AUC(精确率-召回率曲线下面积)——PR-AUC对类别不平衡的敏感度远高于ROC-AUC,能更真实反映模型对正类的识别能力。

内容的提问来源于stack exchange,提问作者Jurgita-ds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:05:23