本节摘要:决策树用递归分裂把特征空间切成矩形块,单树易过拟合,集成来救场:Bagging 并行降方差,Boosting 串行降偏差。GBDT 把残差拟合成一条流水线,XGBoost 在它之上补了二阶信息、正则化与工程优化。本节按这条演进链组织全部高频追问。
上一节的线性模型在特征交叉与非线性的边界上力不从心,树模型是另一种极端:不做任何全局假设,让数据自己说话。这条「单树、森林、提升」的演进链是表格数据面试的主航道,其中 XGBoost 与 GBDT 的差异几乎是指定考题——本节把它拆成可背的五点。
主问题:「决策树选择分裂特征的准则有哪些,它们有什么区别?」
三大准则对应两种任务与一个哲学分歧。ID3 用信息增益,偏爱取值多的特征,取值唯一的特征增益直接拉满,是个著名漏洞;C4.5 用信息增益率,给取值数打了惩罚补丁;CART 用基尼系数(分类)或平方误差(回归),计算不需要对数、支持回归,是现代实现的默认选择。三者本质上都在度量「分裂前后不确定性的下降」,区别在熵的非线性惩罚与可分性度量的细节。
讲完准则要主动补上停机与剪枝:max_depth、min_samples_leaf 是预剪枝的旋钮;后剪枝(如代价复杂度剪枝)先长满再回剪,效果通常更好但更费算力。单树的问题是高方差——数据抖一抖,树形大变,这句话是把话题交给集成的完美引桥。
追问:「随机森林和 GBDT 都是树的集成,它们有效的原因一样吗?」
不一样,而且「不一样」正是这道题的得分点。两者在数据、训练顺序、模型角色、鲁棒性四个维度上全是反着来的:

顺带回收第 1.4 节的线头:类别不平衡在随机森林与 GBDT 里都能以样本权重进入分裂增益的计算,不需要造数据。这句能让面试官看到你的知识是连成网的。
追问:「XGBoost 是 GBDT 的实现还是改进?说得出差异吗?」
标准说法是「框架级改进」,差异可背成五点,建议按「数学、正则、处理、工程、通用性」的顺序输出:
LightGBM 若被追问,再补两点:直方图分裂替代预排序,单边梯度采样丢弃小梯度样本——都是拿微小精度换数量级速度的工程交易。
from sklearn.datasets import make_classification from xgboost import XGBClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score X, y = make_classification(n_samples=20000, weights=[0.95, 0.05], n_features=20, random_state=0) Xtr, Xva, ytr, yva = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0) clf = XGBClassifier(n_estimators=400, learning_rate=0.05, max_depth=5, scale_pos_weight=19, # 代价敏感:负正比倒数 eval_metric="aucpr", # 不平衡场景看 PR 而非 AUC early_stopping_rounds=30, random_state=0) clf.fit(Xtr, ytr, eval_set=[(Xva, yva)], verbose=False) print("PR-AUC:", round(roc_auc_score(yva, clf.predict_proba(Xva)[:, 1]), 4))
这段样板代码把本章三个考点焊在一起:scale_pos_weight 是 1.4 节的代价敏感、eval_metric 选 PR 系指标是 1.3 节的口径换血、early_stopping 是 Boosting 方差控制的落地。
及格:讲清一种分裂准则与随机森林的基本机制;良好:Bagging 与 Boosting 能用偏差方差语言对齐差异,XGBoost 五点差异至少完整说出三点;优秀:能在白板上写出二阶展开下的分裂增益式,并把缺失值默认方向、直方图加速这类工程细节讲成「精度换速度的交易」。从这一节往后的面试,考官往往不再问概念而直接问取舍——请保持「每句话都带代价」的表达习惯。
下一节进入间隔视角的 SVM:一个把「最大化间隔」刻进目标函数的另类经典。
问:树的分裂对特征量纲敏感吗?为什么?
不敏感。分裂只比较特征内部的排序,任何单调变换不改变候选分裂点的好坏排序——这与距离类模型形成鲜明对照,也是树模型省去缩放步骤的数学原因。但样本权重与类别权重会改变增益计算,那是另一回事。
问:为什么随机森林对异常值和噪声更鲁棒?
两重平均在起作用:行采样让异常点只进入部分树,列采样进一步稀释其影响;最终预测是全体树的投票或平均,单棵树被异常点带偏的幅度被稀释在集成里。集成不是消除错误,是让错误互相抵消。
问:GBDT 能做分类吗,损失怎么进残差?
能。分类时损失换成交叉熵,每轮拟合的是负梯度(对数几率的伪残差),输出经 sigmoid 映射为概率。「GBDT 拟合残差」的说法只在平方损失下字面成立,一般情形是拟合负梯度——这个修正能救很多追问。
表达纪律:集成题的每个论断都往「降偏差还是降方差」上挂,让面试官看到一棵理论树而不是一堆算法名。