真实面经题目 · 原创解析
GBDT 的实现流程是什么?
GBDT 的实现流程是不断训练回归树去拟合当前模型的负梯度或残差,并把新树按学习率累加到集成模型中。回答时要讲清初始化、计算伪残差、建树、叶子权重、模型更新和停止条件。
真实面经题目 · 原创解析
GBDT 的实现流程是不断训练回归树去拟合当前模型的负梯度或残差,并把新树按学习率累加到集成模型中。回答时要讲清初始化、计算伪残差、建树、叶子权重、模型更新和停止条件。
GBDT 可以理解为加法模型加梯度下降。第一步用一个常数初始化模型,比如回归用均值、二分类用 log odds;第二步计算当前模型在每个样本上的负梯度,也就是下一棵树要拟合的目标;第三步训练一棵 CART 回归树划分样本;第四步为每个叶子计算最优输出值;第五步用学习率把这棵树加到已有模型上。重复这个过程直到达到树数、损失不再下降或早停条件。
GBDT 不是一开始就训练很多树,而是先用一个简单常数作为初始预测。平方损失下常用标签均值,二分类逻辑损失下常用正负样本比例对应的 log odds。
每轮迭代都基于当前模型计算损失函数对预测值的梯度。下一棵树的训练目标不是原始标签,而是负梯度方向;平方损失下这个目标刚好等价于残差。
GBDT 每一轮通常训练 CART 回归树,用特征切分把样本分到不同叶子。切分目标是让叶子内的负梯度更一致,从而让这棵树能解释当前模型没有拟合好的部分。
树结构确定后,要为每个叶子计算一个输出值。简单平方损失可取叶子内残差均值,复杂损失通常需要用一阶或二阶信息近似求解最优叶子分数。
新树会乘以学习率再加到已有模型中。学习率、树深、叶子数、采样比例和树数量共同控制泛化能力;验证集早停能防止树越加越多导致过拟合。
每棵树通过多次特征切分形成分段函数,多棵树累加后能表达复杂的非线性和特征交互,因此比单一线性模型表达能力更强。
随机森林是 bagging 思路,多棵树相对独立并行训练,主要降方差;GBDT 是 boosting 思路,后一棵树依赖前面模型的错误,主要降偏差。
可以降低树深、增加叶子最小样本数、减小学习率、使用子采样、限制树数量、加入早停,并通过验证集监控泛化误差。