GradientBoostingClassifier中min_samples_leaf设为超样本数为何仍有正常输出?
为什么GradientBoostingClassifier设置min_samples_leaf大于训练样本数仍能运行?
模型退化为仅根节点的弱学习器
当min_samples_leaf设置远大于训练样本数时,梯度提升里的每一棵决策树都没法做任何分裂——因为任何分裂后的子节点样本数都达不到设定的阈值,所以每棵树只能保留一个根节点,直接输出训练集标签的统计结果(分类任务里就是多数类的概率)。无报错的原因
Scikit-learn对这个参数只限定了整数范围是[1, inf),没有强制要求必须小于训练样本数,这种边界情况属于合法输入,所以不会报错,只会自动生成最简单的树结构。结果接近调优后模型的原因
这说明你的训练集本身类别分布极度偏向某一类(比如多数类占比大概92%),当模型直接预测多数类时,就能拿到不错的准确率,所以和调优后的模型得分差距不大。你可以统计train_y的类别占比,应该和输出的训练集准确率(0.924)基本吻合。验证子树无分裂
你的猜测是对的,所有子树都没有深度。可以用这段代码验证:
# 查看单棵树的深度 print(clf.estimators_[0, 0].get_depth()) # 遍历所有树输出深度 for estimator in clf.estimators_.flatten(): print(estimator.get_depth())
输出会全为1,证明每棵树都只有根节点,没有任何分裂操作。
内容的提问来源于stack exchange,提问作者deutan_suave
相关产品推荐
相关产品推荐

