真实面经题目 · 原创解析
XGBoost 如何处理缺失值,为什么目标函数要二阶展开?
这题聚焦 XGBoost 两个核心机制:缺失值通过学习默认分裂方向处理,二阶展开用梯度和 Hessian 近似目标函数以高效评估分裂收益。
真实面经题目 · 原创解析
这题聚焦 XGBoost 两个核心机制:缺失值通过学习默认分裂方向处理,二阶展开用梯度和 Hessian 近似目标函数以高效评估分裂收益。
XGBoost 处理缺失值不是简单先填均值,而是在每个分裂节点为缺失样本学习一个默认方向。枚举某个特征分裂时,只用非缺失样本计算候选阈值,同时分别尝试把缺失样本放到左子树或右子树,选择带来更大增益的方向,推理时该节点缺失值就沿这个默认方向走。目标函数做二阶泰勒展开,是因为 XGBoost 每轮要在当前预测附近估计加一棵树后的损失变化,使用一阶梯度和二阶 Hessian 可以得到叶子权重的闭式解和分裂增益公式,让分裂选择更准确也更高效,并能自然结合正则化。
XGBoost 在每个节点学习缺失样本走左还是走右,而不是全局固定填充值。同一个特征在不同树、不同节点上的默认方向都可能不同,因为局部样本分布和目标不同。
枚举分裂时,非缺失样本按特征值计算候选切分;缺失样本先临时归到一侧,再临时归到另一侧,比较两种情况下的分裂增益,选择增益更大的作为该节点默认方向。
Boosting 每轮新增一棵树来修正当前预测。XGBoost 用当前预测处的一阶梯度和二阶 Hessian 近似新增树带来的损失变化,比只用一阶信息更能反映曲率。
二阶近似后,每个叶子的最优权重可以由该叶样本梯度和 Hessian 聚合得到,分裂增益也能写成左右子叶收益减去父叶收益再减正则项。这样可以快速比较大量候选分裂。
缺失值方向学习能利用缺失本身携带的信息,但如果训练和线上缺失机制不一致,效果会变差。回答时要补充缺失率监控、特征一致性和异常缺失切片评估。
均值填充把缺失当成一个数值,可能抹掉缺失信息;默认方向是在每个节点根据目标增益学习缺失样本该走哪边。
二阶项包含曲率信息,能更好估计新增树对损失的影响,并推导出叶子权重和分裂增益的闭式公式。
可能导致叶子权重过大或不稳定,因此需要 lambda、min_child_weight 等正则和结构约束。
如果线上缺失机制和训练不同,默认方向学到的规律可能失效,需要监控缺失率、分布漂移和分切片效果。