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

GridSearchCV调参疑问:决策树criterion未输出及调参结果不符问题

问题解答

1. 最优结果未显示criterion参数的解决

  • 直接查看GridSearchCV的best_params_属性:自定义的「best results」输出大概率是代码漏了提取该参数,调用grid_search.best_params_会返回所有最优超参数,包括criterion,示例代码:
    print(grid_search.best_params_)
    
  • 检查param_dist格式:确保criterion以列表形式传入,比如'criterion': ['gini', 'entropy'],单个字符串会导致GridSearchCV不遍历该参数。
  • 确认refit参数:如果设置了refit=False,不会保留最优模型的完整参数信息,需保证refit为默认True或指定的评分指标。

2. GridSearchCV推荐结果与手动测试不符的原因及修复

评分指标不匹配

GridSearchCV默认以**准确率(accuracy)**为优化目标,若数据集不平衡,准确率会偏向多数类,而你手动测试关注精度/召回率,自然出现结果不符。解决方法是明确指定scoring参数:

# 优先优化召回率
grid_search = GridSearchCV(estimator=dt, param_grid=param_dist, cv=5, scoring='recall')
# 或同时评估多指标,指定refit目标
grid_search = GridSearchCV(estimator=dt, param_grid=param_dist, cv=5, 
                           scoring=['precision', 'recall'], refit='recall')

K-Fold验证的偏倚或随机性

默认KFold不打乱数据,若数据存在顺序偏倚(如前半部分全是某类样本),交叉验证结果会失真。解决方法是启用打乱并固定随机种子:

from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=42)
grid_search = GridSearchCV(estimator=dt, param_grid=param_dist, cv=kf)

超参数网格范围不足

若param_dist中max_depth只设置到7,GridSearchCV无法推荐≥9的值。需确保网格包含目标测试范围:

param_dist = {
    'criterion': ['gini', 'entropy'],
    'max_depth': [3,5,7,9,11,None]  # 加入≥9的取值
}

模型训练的随机性

决策树分裂过程存在随机性,手动测试未固定random_state会导致结果波动。初始化决策树时需固定种子:

from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(random_state=42)

数据划分不一致

手动测试的训练/测试集划分与GridSearchCV的交叉验证划分不同,导致结果差异。建议直接使用GridSearchCV选出的最优模型验证:

best_dt = grid_search.best_estimator_
# 用该模型计算精度、召回率等指标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:24:51