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

决策树模型超参数调优后测试集精度未提升问题求助

决策树调参后测试集精度无提升的问题分析与解决

问题本质

你的原始决策树模型严重过拟合:训练集精度接近100%,但测试集仅73.8%。调参后训练集精度下降到75.5%,说明参数确实限制了模型复杂度,但测试集精度未变,可能由以下原因导致:


可能的原因与解决方法

1. 手动调参的范围/方向不合理

你手动设置的max_depth=8、min_samples_leaf=6、max_leaf_nodes=11可能刚好落在了对测试集性能无增益的区间,甚至过度限制了模型学习能力。

  • 解决方式:用自动化调参工具遍历合理参数范围
    推荐使用GridSearchCV或RandomizedSearchCV来系统搜索最优超参数,示例代码:
    from sklearn.model_selection import GridSearchCV
    from sklearn.tree import DecisionTreeClassifier
    
    # 定义参数网格,覆盖合理的取值范围
    param_grid = {
        'max_depth': [3, 5, 8, 10, None],
        'min_samples_leaf': [2, 4, 6, 8, 10],
        'max_leaf_nodes': [10, 20, 30, None],
        'criterion': ['gini', 'entropy']
    }
    
    # 5折交叉验证,以精度为评分标准
    grid_search = GridSearchCV(
        DecisionTreeClassifier(random_state=42),
        param_grid,
        cv=5,
        scoring='accuracy',
        n_jobs=-1  # 并行加速
    )
    grid_search.fit(input_train, target_train)
    
    # 输出最优参数与交叉验证得分
    print("最优超参数:", grid_search.best_params_)
    print("交叉验证最优精度:", grid_search.best_score_)
    
    # 用最优参数评估测试集
    best_model = grid_search.best_estimator_
    print("测试集精度:", best_model.score(input_test, target_test))
    

2. 数据集本身存在瓶颈

73.8%的测试集精度可能已经是当前数据特征下的上限:

  • 检查训练集与测试集的标签分布一致性:
    print("训练集标签分布:\n", target_train.value_counts(normalize=True))
    print("\n测试集标签分布:\n", target_test.value_counts(normalize=True))
    
    如果分布差异大,说明划分数据集时可能存在偏差,需要重新划分(比如用StratifiedShuffleSplit保证分层抽样)。
  • 分析特征重要性,剔除无效特征或构造新特征:
    import matplotlib.pyplot as plt
    
    # 用原始模型查看特征重要性
    modeldt = DecisionTreeClassifier(random_state=42)
    modeldt.fit(input_train, target_train)
    plt.bar(range(len(modeldt.feature_importances_)), modeldt.feature_importances_)
    plt.show()
    
    对重要性极低的特征可以考虑删除,同时尝试基于现有特征构造交互项、统计特征等。
  • 尝试集成模型:决策树本身的性能上限有限,换成随机森林、XGBoost等集成模型往往能突破精度瓶颈。

3. 评估指标选择不当

如果数据集是类别不平衡的,精度可能无法反映模型真实性能:

  • 检查类别分布:如果某类占比刚好是73.8%,那模型随便猜该类就能达到这个精度,调参自然没用。
  • 改用更适合不平衡数据的指标(如F1-score、AUC-ROC)来调参,修改GridSearchCV的scoring参数即可,比如scoring='f1_macro'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:39:17