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

自定义Random Forest模型训练零误差但测试准确率极低问题排查

问题根因分析

  • 最致命的错误是测试集特征维度与训练集不匹配:

    你给出的训练集shape为(300,30),代表300个样本、每个样本含30个特征;但测试集shape为(300,1),每个样本仅1个特征。模型训练阶段学习的是30维特征的分布规律,预测时输入1维特征完全不符合模型预期,输出结果基本等同于随机猜测,二分类任务下准确率自然接近50%。大概率是你在拆分训练/测试集时操作失误,把特征和标签的维度搞混了。

  • 决策树未做剪枝,严重过拟合训练集:
    你直接使用sklearn默认参数的DecisionTreeClassifier,默认没有设置最大深度、最小样本分裂数等剪枝参数,决策树会生长到完全拟合所有训练样本,因此训练准确率极高,但泛化能力极差。
  • Bagging采样逻辑不符合标准实现:
    标准Bagging是有放回随机采样构建每个树的训练子集,你当前的实现是直接打乱训练集后取前size_of_bag个样本,属于无放回采样,会导致不同树的训练集重叠度过高,树之间的相似度太高,集成后反而会降低泛化效果。

修复方案

  1. 优先修正数据集拆分逻辑,保证测试集的特征维度和训练集一致,即测试集shape应为(M, 30),对应测试标签shape为(M,1),你当前的测试集(300,1)大概率是误把测试标签当成了测试特征。
  2. 给决策树添加剪枝参数,示例:
tree = DecisionTreeClassifier(max_depth=5, min_samples_split=10)
  1. 修正Bagging的采样逻辑,改为有放回采样:
# 替换原fit_tree_on_bag函数内的采样逻辑
indices = np.random.choice(train_data.shape[0], size=size_of_bag, replace=True)
train_data_bag = train_data[indices]
train_labels_bag = train_labels[indices]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:00