Gradient Boosting有个公开的秘密:没人知道该塞多少棵树。数据科学家们一边调参一边祈祷,像厨师凭手感撒盐——尝一口,再撒一点,直到味觉失灵。
这个困境最近被摊开了。XGBoost和LightGBM的文档都写着"用early stopping",但真到生产环境,团队还是得先猜一个数。有人从100试到1000,有人直接拉满5000看收敛,Kaggle上甚至流传着"宁多勿少"的玄学。
问题出在两个互相打架的指标。树太少,模型欠拟合,像没煮熟的米饭;树太多,过拟合找上门,训练集准确率100%,测试集直接翻车。更麻烦的是,这个"甜蜜点"随数据集变化——今天1000树刚好,换批数据可能200就炸了。
Scikit-learn的开发者给出了一个被很多人忽略的解法:「别找完美数字,找完美曲线」。用validation_curve画误差随树数量的变化,比GridSearch快十倍,还能一眼看出哪里开始过拟合。实际代码就三行,但Stack Overflow上相关提问攒了12万浏览。
有工程师在GitHub评论区吐槽,自己团队曾花两周调参,最后发现默认值的早停策略反而比分级搜索强。现在他直接把n_estimators设成10000,让early_stopping_rounds去操心——反正多出来的树不会跑,少设了却得重训。
热门跟贴