一年一度的“AI训练营”开营了。老王教练要把六个只会一招的学徒送上场:小红只会按身高分类,小绿只会按体重分类,小蓝只会按年龄分类……单拎出来,每个人都是一眼难尽的“弱鸡”。可老王并不嫌弃,他的训练方法很特别:第一轮先让小红去猜,把猜错的题圈出来;第二轮让小绿专门攻错题集;第三轮让小蓝再看还错的题……每一轮,所有人都只关注上一轮出错的题目。到了期末,六个人按“靠谱程度”加权投票,居然拿到了全校第一。这种“弱学徒接力补错、最后按权重合体投票”的套路,就是机器学习里的Boosting集成。 Boosting的核心信念是:把一堆只比瞎猜好一点点的弱模型串起来,让后面的模型反复盯住前面的错,最终形成一个强大的集成模型。它不靠神仙算法,而靠“错题集”的传导,把偏差一点点压下去。本文会从集成学习讲起,拆解AdaBoost、梯度提升树和XGBoost的底层逻辑,并分享Kaggle竞赛中真正用得上的实战心法。
学会Boosting,你就掌握了Kaggle竞赛中上分最快的武器,也能理解一线算法团队如何把“弱模型”整合成强系统,是AI从业者从入门走向实战的关键一跃。
可视化演示
演示Boosting通过弱学习器迭代提升与加权结合,逐步降低误差、增强模型整体性能,理解集成学习核心机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
迭代提升:弱到强 逐轮学习 误差下降 Σw₀y₀ 集成加权输出
集成学习基础
老王教练手里有六名学徒,各个只会看一个维度:小红只看身高,小绿只看体重,小蓝只看年龄。单独派谁上考场都是送分给对手,但老王有办法——他从不指望一个学徒是“全才”,而是把所有人的判断组合起来。这种“三个臭皮匠顶个诸葛亮”的思路,正是机器学习中集成学习(Ensemble Learning)的出发点。集成学习不追求单模型的极致,而是让多个普通模型互相配合,产生一加一大于二的效果。
集成学习主要有两大流派。Bagging(装袋)像“平行小组作业”:每个学徒拿到一份有放回抽样的独立数据集,各自闷头训练,最后大家投票,典型代表是随机森林。Boosting(提升)则像“错题接力赛”:学徒必须排好队,后面的学徒只需要重点看前面的学徒做错的题。Bagging用并行降低方差,Boosting用串行降低偏差,这两种思路的对比,就是理解集成学习的钥匙。
在机器学习中,模型的误差可以拆成三块:偏差(Bias)是模型平均预测与真实答案的距离,好比学徒总把身高看高了一截;方差(Variance)是换一批题目时表现波动的大小,好比学徒状态时好时坏;噪声(Noise)则是数据本身无法消除的随机干扰。Bagging通过多模型平均来压平波动,Boosting则通过反复纠错拉近平均预测与真实答案的距离。
老王把这段话记在小本子上:Bagging 是让学徒们各自稳定发挥,用平均压住波动;Boosting 是让他们瞄准同一个目标,用错题纠偏拉近真相。两条路都能通向强模型,但故事的主角,是后者。
- 期望误差符号$\mathrm{E}[\cdot]$ 表示在多次重复实验(如换多批训练数据)下取平均,计算整体预测误差的数学期望。
- 预测偏差平方$\hat{f}$ 是模型学到的函数,$f$ 是真实规律,$(\hat{f}-f)^2$ 量化模型平均预测离真相有多远。
- 偏差平方项$\mathrm{Bias}^2$ 代表模型的系统性偏差,Boosting 每轮修正错误,就是在持续压低这一项。
- 方差项$\mathrm{Var}$ 代表模型对训练数据变化的敏感程度,Bagging 通过并行平均来降低它。
- 噪声项$\sigma^2$ 是数据本身携带的随机噪声,不可消除,是任何模型的误差下限。
Boosting核心思想
错题本是老王最得意的教学工具。第一轮发卷子,学徒 A 做了一遍,把错题标红;第二轮,学徒 B 只做红色的题;第三轮,学徒 C 再盯着剩余没做对的题。每一轮都在“接上一轮的短处”,虽然每个学徒单独看还是偏科,但六轮下来,整个队伍的错题覆盖率越来越高。
Boosting 的核心思想正是如此:先用一个弱学习器(weak learner)训练,找出预测错的样本;下一轮把更多“注意力”放到这些错例上,训练一个新的弱学习器;如此重复,最后把所有弱学习器按各自表现加权合成。这里的“弱”不需要多弱,只要比随机猜好一点点,准确率略高于 50% 即可,比如只按身高是否大于 170 分类的决策树桩(decision stump)。
为什么这样做能变强?因为每一轮新模型都专注上一轮的失败区域,相当于把团队的整体偏差压下去。Boosting 模型最终的预测是所有弱学习器的加权投票结果,每个学习器的权重由它的表现决定。
错题本的本质,是把“群体智慧”从一句口号变成一套数学机制。老王看着六本越来越薄的错题本,心里明白:真正重要的不是单个学徒有多聪明,而是整个接力机制能不能让错误无处遁形。
- 最终强模型$F_T(x)$ 表示经过 $T$ 轮训练后得到的集成模型对样本 $x$ 的输出,也就是所有学徒的加权合体意见。
- 第 t 个弱学习器$h_t(x)$ 是第 $t$ 轮训练出的弱模型,只比随机猜好一点,例如一棵浅层决策树。
- 模型权重$\alpha_t$ 是该弱学习器在最终投票中的发言权,表现越好权重越大,对应老王给靠谱学徒更高的评分。
- 加权求和$\sum_{t=1}^{T}$ 把每一轮学徒的意见按靠谱程度加权相加,得到最终强模型 $F_T(x)$。
AdaBoost算法
AdaBoost 是“错题本”的定量化版本。老王不再随手画红圈,而是给每道题贴一个“注意力权重”标签,权重越高,下一轮训练时这道题越显眼。每轮训练结束后,他还给每位学徒算一个“靠谱系数” $\alpha$:做对越多,系数越大,最后投票时声音越响亮。
算法从等权开始:所有训练样本的权重初始化为均匀分布。每一轮训练出一个弱学习器 $h_t$,用带权重的样本计算它的加权错误率 $\varepsilon_t$。如果某个样本被分错,它的权重会被放大;被分对,权重就会缩小。这样一来,下一轮的弱学习器不得不“盯着”那些被反复做错的题。最后,每个弱学习器的权重 $\alpha_t$ 由错误率决定,错误率越低,$\alpha_t$ 越大。
得到 $\alpha_t$ 后,老王还要更新每道题的“注意力权重” $w_i$,让错题在新一轮变得更醒目:
AdaBoost 的聪明之处,是把“错题集”落成一组可计算的权重公式。老王在训练日志上写道:每个学徒都不完美,但通过不断放大错题的引力,整个团队最终能把弱分类准确率像滚雪球一样推向极值。
- 当前样本权重$w_i^{(t)}$ 是第 $i$ 个样本在第 $t$ 轮结束时的权重。
- 预测符号乘积$y_i$ 是真实标签(取 $+1$ 或 $-1$),$h_t(x_i)$ 是预测值;两者同号说明预测正确,乘积分 $+1$,反之为 $-1$。
- 指数更新因子$\exp(-\alpha_t \, y_i h_t(x_i))$ 在预测正确时让权重变小,在错误时让权重变大。
- 下一轮权重$w_i^{(t+1)}$ 更新后还需除以权重总和做归一化,保证总和为 1,相当于重新分配注意力资源。
梯度提升树
AdaBoost 走的是“调权重”的路线,梯度提升树(GBDT, Gradient Boosting Decision Tree)则换了一种更直接的思路。老王这回不急着改题目的权重,而是给每个学徒一张“改进卡”:上一轮训练完还差多少分,下一轮你就去补这个差距。这个差距,在机器学习里就叫残差(residual)。
具体来说,第一棵树直接拟合训练标签的均值,相当于让全队先给一个保守基线;第一棵树预测完,真实值减去预测值,就得到残差。第二棵树不再去拟合原来的标签,而是去拟合这些残差。第三棵树再去拟合前两棵树的残差。如此接力,每棵新树都在“补坑”,最后把每一棵树的预测相加,就得到完整的强模型。把“残差”推广到一般损失函数,就是负梯度方向,因此叫梯度提升。
为了不让单棵树步子迈得太大,梯度提升引入了学习率 $\nu$(也叫收缩系数)。每一棵新树对最终模型的贡献都要乘以一个很小的学习率,比如 0.1,迫使模型慢慢逼近答案,同时留出更多余地去防止过拟合。这个“小步慢走”的设计,是 GBDT 泛化能力的重要保障。
这张“改进卡”比 AdaBoost 的错题本更精细:AdaBoost 告诉学徒“这题你要重点看”,GBDT 则直接写出“这题你还差 0.3 分,照这个方向补”。老王把两种方法都收进工具箱,上赛场时看情况取用。
- 上一轮累计模型$F_{m-1}(x)$ 是前 $m-1$ 棵树累加得到的预测函数,相当于全队目前的总分数。
- 第 m 棵新树$h_m(x)$ 是第 $m$ 轮训练的决策树,它拟合的是上一轮模型的负梯度(即残差方向)。
- 学习率$\nu$ 是收缩系数(如 0.1),用来控制每棵树的贡献幅度,防止一次补太多导致过拟合。
- 更新后的模型$F_m(x)$ 是加入新树后的最新累计模型,等于上一轮总分加上本轮改进量。
XGBoost框架
当老王的草台戏班想要冲进职业联赛,就必须引入正规化训练体系。XGBoost 的出现,相当于给梯度提升装上了一套“职业俱乐部”级别的装备:更严谨的目标函数、更快的学习算法、更聪明的特征分裂策略。
普通 GBDT 在每轮树分裂时,只计算一阶导数(梯度);XGBoost 则把损失函数做二阶泰勒展开,同时利用一阶导和二阶导来更精确地估计最优分裂点,收敛更快、误差更低。同时,XGBoost 在目标函数中加入了正则化项:叶子数越多、叶子权重越大,惩罚越重。这套机制让模型从根源上拒绝“死记硬背”,是防止过拟合的有力武器。
在工程实现上,XGBoost 还对特征做了预排序和块存储,支持列采样并行,训练速度远超早期的 GBDT 实现。老王在笔记本上写下评语:“GBDT 是野外练出来的天赋队,XGBoost 是配上数据、营养师和战术板之后的正规军。”
- 样本损失求和$\sum_{i=1}^{n} \ell(\cdot)$ 表示所有训练样本预测值与真实值之间损失函数的总和。
- 前序预测与新增树$\hat{y}_i^{(t-1)}$ 是前 $t-1$ 轮对样本 $i$ 的累计预测,$f_t(x_i)$ 是本轮要加入的新树输出。
- 叶子数惩罚$T$ 是当前树的叶子节点数,$\gamma$ 控制复杂度惩罚力度,叶子越多惩罚越大。
- 叶子权重正则$w$ 是叶子节点输出的权重向量,$\lambda$ 控制 L2 正则强度,防止单个叶子权重过大。
竞赛实战技巧
到了 Kaggle 赛场,老王把训练营的经验沉淀成一本竞赛手册。第一页写的是:Boosting 不是万能药,但它是绝大多数表格数据竞赛的“默认神器”。翻开任何一场 top 方案,XGBoost、LightGBM 或 CatBoost 几乎从不缺席。
手册第一条是特征工程。Boosting 虽然能自动捕捉特征间的非线性关系,但它仍然依赖输入特征的“信息量”。把时间的年、月、日拆开,把类别变量做目标编码,把业务里的“最近 30 天消费次数”这类聚合特征加进去,往往比盲目调参涨分更快。第二条是交叉验证。竞赛中最怕“本地分数和 LB 分数对不上”,用 K 折交叉验证把训练集分成 K 份,轮流当验证集,得到更稳定的本地估计。
第三条是早停策略。训练时每多一轮就多一棵树,但树太多会开始死记硬背,验证集分数反而下降。设定“验证分数连续 N 轮不提升就停”,能同时节省时间并防止过拟合。第四条是多模型融合:把 Boosting 和 Bagging(随机森林)的结果再做一次 Stacking,或用不同随机种子、不同特征子集训练多个 Boosting 模型再平均,往往能再挤出一两个百分点的精度。老王在手册最后写了句大白话:单项冠军敌不过团队接力,Boosting 本身就是“融合”的胜利者。
- 折数 K$K$ 是交叉验证的折数,常见取 5 或 10,数据量小的时候可以增大 K。
- 第 k 折验证分数$\mathrm{Score}_k$ 是第 $k$ 次在训练集上训练、在留出验证集上评估得到的指标分数(如 AUC、F1)。
- 取平均$\dfrac{1}{K}\sum_{k=1}^{K}$ 把所有折的分数取平均,得到更平滑、更可信的模型性能估计。
调优与避坑
老王明白,训练学徒最怕的不是笨,而是“背题”。如果学徒把训练题答案全背下来,一换新题就懵——这在机器学习里就是过拟合:模型在训练集上分数极高,在验证集上一落千丈。调优与避坑的本质,就是防止背题、让模型真正学会解题规律。
第一个关键参数是学习率与树数量的配合。学习率越小,每棵树贡献越小,通常需要更多棵树,两者需要同时调节。第二个防过拟合手段是早停:每训练完一轮就在验证集上打分,若连续多轮没有提升,立即中止训练。另一个常用参数是子采样(subsample):每轮随机抽取 80% 的样本训练树,增加随机性,削弱模型对特定样本的依赖。
当正负样本比例严重失衡时,比如欺诈检测中坏样本只有 1%,用准确率(Accuracy)评判会显得“全都预测成好样本也有 99% 准确率”。此时要用更公平的评判指标:F1 分数,它同时关注精确率(Precision)和召回率(Recall),是类别不平衡任务里的“体检报告”。Boosting 框架中也通常提供正样本权重参数(如 scale_pos_weight)来缓解失衡。
最后别忘了可解释性。Boosting 模型虽强,但要向业务方交代“为什么给这个客户判负”,还需要借助特征重要性、SHAP 值等工具来解释。老王的训练营完结那天,学徒们问终极秘诀是什么。他笑着说:“记住一句话:降低期望,盯紧错误,小步快跑,随时喊停。这就是 Boosting。”
- 精确率 P$P = \dfrac{TP}{TP+FP}$,预测为正类的样本中真正正确的比例,衡量“抓得准不准”。
- 召回率 R$R = \dfrac{TP}{TP+FN}$,真实正类中被成功找出的比例,衡量“抓得全不全”。
- 调和平均$\dfrac{2PR}{P+R}$ 同时惩罚精确率或召回率过低的情形,只有两者都高,F1 才会高。
AI 应用场景
金融风控违约预测
阶段:特征工程与模型训练调优
解决的问题:传统评分卡多用逻辑回归,特征之间的复杂交互难以建模;同时信贷数据缺失值多、类别不平衡严重。XGBoost/LightGBM 等 Boosting 模型能自动处理缺失值、捕捉非线性关系,配合交叉验证和早停,显著提升违约预测的 AUC 与召回率。
具体案例:Kaggle 经典赛事“Home Credit Default Risk“中,选手们将原始数据做目标编码、聚合统计特征,再用 XGBoost 进行 5 折交叉验证,Top 方案的 AUC 普遍超过 0.79。实操中,还会将”过去 3 个月逾期次数”等业务特征加入训练,让模型学到更有业务含义的模式。
电商点击率预估
阶段:特征组合与排序模型构建
解决的问题:CTR 预估中,用户特征和商品特征存在大量交叉,人工组合特征费时费力。Boosting 模型可以把原始特征自动组合成高阶特征,再配合逻辑回归做最终排序,实现“GBDT 负责找特征、LR 负责做排序”的分工协作。
具体案例:某电商推荐系统中,算法团队训练一棵 GBDT 将用户年龄、性别、价格敏感度等特征组合成叶子节点编号,作为新的高阶特征输入 LR,最终点击率相对提升约 10%。这个过程和老王让学徒们各看一个维度、再合力投票的思路如出一辙。
医疗辅助风险分层
阶段:模型评估与可解释性分析
解决的问题:在术后并发症预测中,高风险人群只占少数,模型容易“忽视”这些关键样本。Boosting 框架支持为少数类设置更高权重,同时提供 SHAP 值来向医生解释“哪些指标让该患者风险升高”。
具体案例:某三甲医院 AI 辅助项目中,工程师用 XGBoost 预测术后 30 天内并发症风险,训练时设置 scale_pos_weight 缓解类别不平衡,并用早停避免过拟合。模型上线后,高风险人群召回率从 55% 提高到 78%,医生可通过特征重要性快速了解模型判断依据。
Python 演示
import numpy as np class DecisionStump: """单层决策树桩:选择一个特征和阈值,把样本分为两类。""" def __init__(self): self.feature = None self.threshold = None self.polarity = 1 # 1 表示大于阈值为正类,-1 相反 def predict(self, X): preds = np.ones(X.shape[0]) if self.polarity == 1: preds[X[:, self.feature] < self.threshold] = 0 else: preds[X[:, self.feature] >= self.threshold] = 0 return preds class AdaBoost: """AdaBoost 集成分类器。""" def __init__(self, n_estimators=5): self.n_estimators = n_estimators self.stumps = [] self.alphas = [] def fit(self, X, y): n = X.shape[0] w = np.full(n, 1 / n) for _ in range(self.n_estimators): stump = self._best_stump(X, y, w) pred = stump.predict(X) err = w[pred != y].sum() / w.sum() alpha = 0.5 * np.log((1 - err) / max(err, 1e-12)) w *= np.exp(-alpha * np.where(pred == y, 1, -1)) w /= w.sum() self.stumps.append(stump) self.alphas.append(alpha) def _best_stump(self, X, y, w): best = None best_err = float('inf') for feature in range(X.shape[1]): values = np.unique(X[:, feature]) for v in values: for polarity in (1, -1): dummy = DecisionStump() dummy.feature = feature dummy.threshold = v dummy.polarity = polarity pred = dummy.predict(X) err = w[pred != y].sum() / w.sum() if err < best_err: best_err = err best = dummy return best def predict(self, X): final = np.zeros(X.shape[0]) for alpha, stump in zip(self.alphas, self.stumps): final += alpha * np.where(stump.predict(X) == 1, 1, -1) return (final > 0).astype(int) if __name__ == "__main__": rng = np.random.RandomState(42) X = rng.randn(200, 2) y = (X[:, 0] + X[:, 1] > 0).astype(int) model = AdaBoost(n_estimators=6) model.fit(X, y) preds = model.predict(X) acc = (preds == y).mean() print(f"训练集准确率: {acc:.3f}")
alpha = 0.5 * np.log((1 - err) / max(err, 1e-12))根据当前树桩错误率计算模型权重,错误率越低权重越大。w *= np.exp(-alpha * np.where(pred == y, 1, -1))更新样本权重:预测正确的样本权重下降,错误的样本权重上升。w /= w.sum()归一化权重,保证样本权重总和为 1,相当于重新分配注意力。for feature in range(X.shape[1]):遍历每个特征,寻找能最大程度降低加权错误率的切分点。final += alpha * np.where(stump.predict(X) == 1, 1, -1)加权投票:每个树桩按自身靠谱系数对结果投票,取正负合计是否为 0 作为最终类别。
常见误区
误区初学者觉得 Bagging 和 Boosting 都是训练一堆模型再投票,区别不大,随机抽样细节无所谓。
正解两者训练方式有本质区别。Bagging 并行训练多个独立模型,互相不看对方结果,最后投票平均,主要降低方差;Boosting 串行训练,每个新模型都依赖上一轮的错题或残差,主要降低偏差。好比 Bagging 是“多专家各自独立答卷后汇总”,Boosting 是“错题接力、后者专攻前者的漏洞”。
为何常见:因为两者表面都是“多个模型组合决策”,初学时容易忽略训练顺序和样本依赖的差异。
误区认为公式里的 α(模型权重)直接加到样本权重上,样本的重要程度就是 α。
正解α 是弱学习器在最终投票时的发言权,决定“这个模型说话有多重”;样本权重 w 是每轮训练时分配给各题目的注意力,决定“这道题有多显眼”。α 和 w 是两个独立变量:先用 w 算出错误率 ε,再由 ε 决定 α,最后用 α 更新下一轮的 w。
为何常见:公式里同时出现 α 和 w,符号密集,初学者容易把“权重”两个字混为一谈。
误区认为 GBDT 每轮学习的目标都是原始标签 y,和普通决策树没有区别。
正解第一棵树有时拟合均值,但从第二棵树开始,拟合的是上一轮模型的残差(或负梯度方向)。真实值减去当前累计预测值,差值就是本轮要补的“坑”。这与 AdaBoost 调样本权重不同,GBDT 直接告诉模型“你还差多少”。
为何常见:因为决策树天然就是拟合标签的,惯性思维下容易忽略“残差接力”这一层递进。
误区看到教程写“学习率小能提升精度”,就把学习率设成 0.0001,再堆一万棵树,认为这样一定更强。
正解学习率越低,每棵树贡献越小,确实能更精细地逼近目标,但也需要更多树才能达到同样的拟合效果。树越多训练时间越长,还可能因训练不充分导致欠拟合。正确做法是学习率和树数量联合调参,配合早停找到平衡点,而不是盲目追求极低学习率。
为何常见:把“小步慢走”误解为“步子越小永远越好”,忽略了训练时间和容量匹配问题。
误区认为 XGBoost 能自动处理缺失值、自动选特征,所以原始数据不需要清洗和特征构造。
正解XGBoost 能处理部分缺失值和输出特征重要性,但它不会自动从原始日志里创造“最近 7 天消费次数”这种业务特征,也不负责去除异常值。脏数据配再强模型,也只是让模型更快地记住脏规律。特征工程依然是 Boosting 实战中涨分最有效的环节之一。
为何常见:厂商宣传强调“自动处理缺失值”等能力,被用户过度解读为“全自动 AI”。
面试题
Q1. Boosting与Bagging的核心区别是什么?
- A.并行训练多个模型并投票
- B.串行训练并修正前序错误← 正确答案
- C.只训练一个深度神经网络
- D.随机采样并训练单棵决策树
答案:B。Boosting 是串行训练,每个新模型都聚焦上一轮的错题或残差;Bagging 是并行训练独立模型后投票。选项 B 准确描述了 Boosting 的核心,其他选项要么是 Bagging 的特征,要么偏离集成学习的定义。
Q2. 为什么Boosting能降低模型偏差?
- A.因为增加训练数据的数量
- B.因为每轮都盯住上轮错题← 正确答案
- C.因为使用更深的决策树
- D.因为提升特征维度空间
答案:B。Boosting 每轮训练都强化上一轮的错误样本或残差方向,相当于持续修正系统性偏差。选 B。A 是数据层面的增强,C 指单模型复杂度提升,D 是特征工程范畴,都不是 Boosting 降低偏差的本质原因。
Q3. AdaBoost中被错分的样本,其权重如何变化?
- A.保持不变并参与下一轮训练
- B.权重减少并降低样本影响
- C.权重增大并吸引更多关注← 正确答案
- D.权重归零并移出训练集合
答案:C。AdaBoost 的核心机制是让下一轮弱学习器更关注被错分的样本,因此错分样本权重会增大,在下一轮训练中占更大比重。选 C。
Q4. 梯度提升树GBDT每轮拟合的对象是什么?
- A.原始标签真实值
- B.上一轮模型的残差← 正确答案
- C.样本权重的分布
- D.特征重要度排序
答案:B。GBDT 每轮拟合的是上一轮预测值与真实值之间的残差(推广到损失函数就是负梯度)。第一棵树可能拟合均值,但后续树都在“补差”,选 B。
Q5. XGBoost相比普通GBDT的改进包括哪些?
- A.加入正则化与缺失值处理← 正确答案
- B.使用二阶导数与列采样加速← 正确答案
- C.不需要学习率与早停机制
- D.只支持单线程线性模型
答案:AB。XGBoost 在目标函数中加入正则化项,并利用二阶泰勒展开精算分裂增益,同时支持列采样和并行加速,因此 A、B 正确。XGBoost 仍然需要学习率和早停,C 错误;它支持多线程并行,D 错误。
Q6. 关于XGBoost的正则化目标,下列说法正确的有哪些?
- A.叶子数量和叶子权重会被计入惩罚← 正确答案
- B.正则化有助于缓解过拟合← 正确答案
- C.正则化与训练数据完全无关
- D.叶子权重越大越好
答案:AB。XGBoost 的正则项由叶子数 γT 和叶子权重 L2 惩罚组成,复杂度越高惩罚越大,A 正确;这种约束让模型不敢轻易死记硬背,B 正确。C 错在正则化虽然不直接依赖具体特征值,但它约束模型复杂度,仍与训练负相关;D 与正则化方向相反。
Q7. 关于XGBoost正则化项,下列说法正确的是?
- A.叶子数越多正则惩罚越小
- B.叶子数越多正则惩罚越大← 正确答案
- C.叶子权重越大正则惩罚越小
- D.正则化项与叶子数完全无关
答案:B。XGBoost 的复杂度惩罚项包含 γT,其中 T 是叶子节点数,叶子越多惩罚越大,选 B。C 说反了,叶子权重越大 L2 惩罚也越大。A、D 均与公式矛盾。
Q8. Boosting中学习率与树数量的关系是什么?
- A.学习率越小需要的树越多← 正确答案
- B.学习率越小需要的树越少
- C.学习率与树数量完全无关
- D.学习率变大树数量也减少
答案:A。学习率控制每棵树的贡献幅度。学习率越小,每步走得越慢,达到同样拟合效果就需要更多的树,选 A。
Q9. 关于早停机制的正确理解有哪些?
- A.验证集性能不升反降时停止训练← 正确答案
- B.节省训练时间且防止过拟合← 正确答案
- C.自动增加训练样本的数量
- D.提前减少特征的数量
答案:AB。早停的核心是监控验证集分数,连续多轮不提升就停止,从而避免模型在训练集上过拟合,同时节省时间,A、B 正确。C 是数据增强,D 是特征选择,都不属于早停机制本身。
Q10. 处理类别不平衡时,Boosting中常用做法是什么?
- A.提高少数类样本的权重← 正确答案
- B.删除全部多数类数据
- C.不做处理维持原分布
- D.增加多数类样本的权重
答案:A。类别不平衡时,常用 scale_pos_weight 或样本重加权来放大少数类的贡献,选 A。B 会严重损失信息,C 会让模型偏向多数类,D 反而加重不平衡。