随机森林是 Bagging:并行训练多棵相互独立的深决策树,各自在自助采样样本和随机特征子集上生长,最后投票/平均,主要作用是降低方差。GBDT 是 Boosting:串行训练浅树,每棵新树拟合当前模型的残差(更准确地说是损失函数的负梯度),逐步降低偏差。XGBoost 是 GBDT 的工程与算法增强版。

XGBoost 的关键改进:损失函数做二阶泰勒展开,同时利用梯度和海森矩阵信息;目标函数中加入叶子数和叶子权重的正则项,抑制过拟合;支持列采样、缺失值自动学习默认分裂方向;工程上有分块并行、缓存感知、近似直方图算法,大幅提速。LightGBM 则进一步用直方图算法加 GOSS、EFB 提速。

易错点:认为随机森林的每棵树也有 boosting 关系;忽略 XGBoost 的正则项是其与原始 GBDT 的本质区别之一。追问方向:为什么 GBDT 用浅树而随机森林用深树?二阶导数为什么能加速收敛?