想象你是一位美食节目的总导演,要举办一场“厨神争霸赛”。你请来 100 位厨师,不让他们互相商量,只给每人发一份“自助菜单”:从同一个巨大的食材市场里随机抓取食材——每抓一次就把食材放回去再抓。于是有的厨师拿了一篮西红柿,有的厨师一个西红柿都没抓到,手里却握着四根土豆。每位厨师凭自己的手艺独立做一道菜。最后你请来评委团,把分数取平均——一道集百家之长的“满汉头菜”就此诞生。 这正是机器学习中赫赫有名的 Bagging 集成。翻译成行话:“食材市场”是全部训练数据,“自助菜单”是 Bootstrap 自助采样,“100 位厨师”是并行训练的多个基学习器,“评委取平均”是投票聚合。单个厨师可能今天手抖多放三勺盐(高方差),但 100 道菜平均下来,随机波动被抵消,最终出品稳定又美味。本文会带你从原理、公式、工程实践一路讲到 Kaggle 竞赛实战,最后送上面试高频题。

岗位关联

掌握 Bagging,意味着你从“只会训练单模型”进化到“能搭建稳定集成系统”的工程师;无论打比赛还是做生产,你的模型都会比别人更抗噪、更可靠。

目录
  1. 可视化演示
  2. 基础概念:一场厨神争霸赛的规则
  3. 核心算法流程:选材 → 做菜 → 评审
  4. 数学原理:为什么平均值得信
  5. 随机森林扩展:给厨师发“限定食材卡”
  6. 竞赛实战应用:Kaggle 融合兵法
  7. AI 应用场景
  8. Python 演示
  9. 常见误区
  10. 面试题

可视化演示

动态展示Bagging自助采样并行训练、随机森林特征随机、竞赛融合技巧与方差降低原理。

本节配有交互动效(进入视口后自动加载,约 3KB)。

基础概念:一场厨神争霸赛的规则

如果你只请一位大厨操办国宴,他状态一差,整场宴会就砸了;但如果你请 100 位普通厨师,每人独立做一道菜,最后让评委团综合打分,结果几乎不会翻车——这就是“三个臭皮匠,顶个诸葛亮”的朴素智慧。机器学习里的集成学习,正是把这句老话变成算法。

Bagging 是集成学习中最基础的一支,全称 Bootstrap Aggregating,中文叫“自助采样聚合”。它不追求造一个完美无缺的天才模型,而是组合一批水平普通的模型。三个关键词理解它:Bootstrap 采样,即有放回地从原始数据中抽取同样大小的子集;并行训练,让每个子集独立训练一个基学习器,互不干扰;聚合,回归任务取平均,分类任务做多数投票。

1. 基学习器输出 \(f_t(x)\):第 \(t\) 位厨师(基学习器)对同一道食材(样本 \(x\))给出的判断结果。

ft(x),t=1,2,…,T\displaystyle f_t(x), \quad t = 1, 2, \dots, T

2. 聚合操作 \(\mathrm{agg}\):评审团汇总方式——分类取投票众数,回归取算术平均。

agg(⋅)={majority vote,分类1T∑t=1T⋅,回归\displaystyle \mathrm{agg}(\cdot) = \begin{cases} \text{majority vote}, & \text{分类} \\ \dfrac{1}{T}\sum_{t=1}^{T} \cdot, & \text{回归} \end{cases}

3. 模型数量 \(T\):厨师人数,通常几十到几百,是 Bagging 最重要的超参数之一。

T∈N+\displaystyle T \in \mathbb{N}^+

4. 整体输出 \(F(x)\):最终上桌的“满分头菜”,比任何一位厨师单独的作品都稳定。

F(x)\displaystyle F(x)

所以 Bagging 的哲学是:不赌天才,只信团队。每位厨师水平普通没关系,只要他们的手艺各有千秋、互不雷同,最终的综合评分就让人放心。

latex1 行
\displaystyle F(x) = \mathrm{agg}\left(f_1(x),\, f_2(x),\, \dots,\, f_T(x)\right)

核心算法流程:选材 → 做菜 → 评审

比赛分三幕。第一幕“选材”:总导演给每位厨师发一张自助菜单,让他们从食材市场(全量数据)里抓取食材,抓完放回再抓,直到篮子里有 N 份食材。这一抓,就抓出了 Bagging 最独特的味道——有放回抽样,学名 Bootstrap。

第二幕“做菜”:100 位厨师在后厨各自为战,谁也不知道别人做了什么菜。第三幕“评审”:评委团把每道菜打分,取平均或投票,宣布最终头菜。技术上的三步与之严格对应:自助采样生成训练子集、并行拟合基学习器、聚合输出。

1. 单次抽中概率 \(\frac{1}{N}\):N 份食材中,某一份被厨师抓到的可能性是 N 分之一。

1N\displaystyle \frac{1}{N}

2. 单次未抽中概率 \(1 - \frac{1}{N}\):这一把没抓到它,很正常。

1−1N\displaystyle 1 - \frac{1}{N}

3. 连抽 N 次都没抽中:每次放回再抓,所以概率连乘。

(1−1N)N≈e−1≈0.368\displaystyle \left(1 - \frac{1}{N}\right)^{N} \approx e^{-1} \approx 0.368

4. 至少被抽中一次:用全概率 1 减去上面的“一次都没抽中”。

1−e−1≈0.632\displaystyle 1 - e^{-1} \approx 0.632

那 36.8% 从没进过这位厨师篮子的食材,恰好可以用来当“神秘顾客”——它们对应的样本没参与这棵树的训练,拿来评估这棵树的表现最公平,这就是 Bagging 免费附赠的袋外验证。评委不只能评菜,还能顺手考核每位厨师。

latex1 行
\displaystyle P(\text{样本进入某个子集}) = 1 - \left(1 - \frac{1}{N}\right)^{N} \approx 0.632

数学原理:为什么平均值得信

你可能会问:把普通厨师的作品平均一下,凭什么比大厨的单打独斗更稳?统计学早就给过答案——平均能压低方差。机器学习把模型误差拆成三块:偏差、方差、噪声。偏差是“系统性跑偏”,比如所有厨师都只会做咸味菜;方差是“随机性波动”,比如今天手抖多放三勺盐。Bagging 对偏差几乎无能为力,它专治方差。

假设 M 位厨师的手艺独立同分布,各自做菜的“随机波动”(方差)都是 σ²。把 M 道菜的分数量平均后,波动会怎样变化?公式给出答案。

1. 提取平均系数 \(\frac{1}{M^2}\):常系数从方差中提出时要平方,这是方差的基本性质。

Var(1M∑tft)=1M2Var(∑tft)\displaystyle \mathrm{Var}\left(\frac{1}{M}\sum_t f_t\right) = \frac{1}{M^2}\mathrm{Var}\left(\sum_t f_t\right)

2. 自方差部分 \(\sum_t \mathrm{Var}(f_t)\):每位厨师自己手艺的随机波动。

∑t=1MVar(ft(x))=Mσ2\displaystyle \sum_{t=1}^{M}\mathrm{Var}(f_t(x)) = M\sigma^2

3. 协方差部分 \(\sum_{t \neq s} \mathrm{Cov}(f_t, f_s)\):厨师之间的相互影响——如果都跟同一个师傅学的,菜式雷同,协方差就大。

∑t≠sCov(ft(x),fs(x))=M(M−1)ρσ2\displaystyle \sum_{t \neq s} \mathrm{Cov}(f_t(x), f_s(x)) = M(M-1)\rho\sigma^2

4. 完全独立情形:复述协方差为 0 时,方差变为原来的 \(1/M\)。

Var(fˉ)=Mσ2M2=σ2M\displaystyle \mathrm{Var}(\bar{f}) = \frac{M\sigma^2}{M^2} = \frac{\sigma^2}{M}

所以厨师越“各做各的”、越有创意,平均后的菜品就越稳定。这也解释了 Bagging 最重要的工程心法:一定要人为制造基学习器之间的多样性。随机森林之所以更强,就是因为它多加了“随机限制食材搭配”这味调料,让厨师们被迫做出更不重样的菜。

latex1 行
\displaystyle \mathrm{Var}\left(\frac{1}{M}\sum_{t=1}^{M} f_t(x)\right) = \frac{1}{M^2}\left(\sum_{t=1}^{M}\mathrm{Var}(f_t(x)) + \sum_{t \neq s}\mathrm{Cov}(f_t(x), f_s(x))\right)

随机森林扩展:给厨师发“限定食材卡”

Bagging 只有一条规则太单调,于是随机森林(Random Forest)给它加了一条:“每位厨师只能从随机抽到的若干种食材里做菜。”想象一下,如果市场里有 100 种食材,传统 Bagging 允许厨师随意取用全部食材,大家最后还是会撞车——顶尖厨师都去抢那块和牛。随机森林规定:每次选菜时,只随机抽取一小批食材类别(特征),厨师只能从这里面挑,于是有人被迫研究豆腐,有人被迫钻研萝卜,菜的多样性立刻上来了。

分类任务中,这个随机子空间的大小通常取特征总数的平方根;回归任务宽松些,取三分之一。

\displaystyle \epsilon_{\text{oob}} = \frac{1}{N}\sum_{i=1}^{N} L\left(y_i,\, F_{\text{oob}}(x_i)\right)

> 对每个样本,只用那些"没在自助采样中见过它"的树做预测,计算损失后取平均。省下一份独立验证集,竞赛中尤其宝贵。1. 袋外预测 \(F_{\text{oob}}(x_i)\):排除包含第 \(i\) 个样本的所有树,只用没见过它的树投票。$$\displaystyle F_{\text{oob}}(x_i) = \mathrm{agg}\left(\{f_t(x_i) : i \notin \text{训练集}_t\}\right)$$2. 损失函数 \(L(y_i, \cdot)\):分类用 0-1 损失(预测错记 1),回归用均方误差。$$\displaystyle L(y_i, \hat{y}_i) = \begin{cases} \mathbb{1}[y_i \ne \hat{y}_i], & \text{分类} \\ (y_i - \hat{y}_i)^2, & \text{回归} \end{cases}$$3. 对所有样本求和取平均 \(\frac{1}{N}\sum\):像评委把 N 位神秘顾客的评价汇总。$$\displaystyle \frac{1}{N}\sum_{i=1}^{N} L(\cdot)$$4. 无偏近似:每个样本恰好被大约 36.8% 的树"袋外评价",不需要单独留验证集。$$\displaystyle \epsilon_{\text{oob}} \approx \text{泛化误差}$$大规模后厨还要注意类别不平衡:如果牛肉食材(正样本)只有 1%,随机抽样时很多厨师根本拿不到它。实战里常用分层 Bootstrap——从正负样本里分别做自助采样,保证每篮食材都有牛肉可料理。
latex25 行
\displaystyle m_{\text{try}} = \lfloor \sqrt{d} \rfloor$$ > \(d\) 是原始特征总数,\(m_{\text{try}}\) 是每次分裂时随机挑选的特征候选数。给厨师发"限定食材卡",逼他们换着花样做菜。 #### 逐字解析 1. **特征总数 \(d\)**:食材市场的全部食材种类数。   $$\displaystyle d = \text{原始特征数量}$$2. **平方根 \(\sqrt{d}\)**:经验法则,保证每棵树都只看一小部分食材。   $$\displaystyle \sqrt{d}$$3. **向下取整 \(\lfloor \cdot \rfloor\)**:特征数必须是整数,有余数就舍去。   $$\displaystyle \lfloor\sqrt{d}\rfloor$$4. **每棵树的候选特征**:每次分裂前从全部 \(d\) 个特征中不重复地抽 \(m_{\text{try}}\) 个。   $$\displaystyle \text{候选特征集} \subseteq \{1, 2, \dots, d\},\quad |\text{候选特征集}| = m_{\text{try}}$$ 随机森林把 Bagging 的"样本多样性"升级为"样本+特征双多样性"。它带来的副产品是免费的特征重要性:如果某一种食材频繁出现在美味的菜里,说明它的贡献大。工程上可以用 `feature_importances_` 直接读出哪些特征最有用,这对特征筛选和数据探索帮助极大。 ### 工程实践要点:后厨管理的门道 办一场 100 人的后厨大赛,管理门道可不少。第一,食材总量得足够。如果整个市场只有几十份食材,厨师们再怎么随机抓,篮子内容也高度重叠,多样性无从谈起。所以 Bagging 通常需要足够的样本量,一般经验是至少有几千条样本才有意义。 第二,选什么样的厨师?Bagging 的理想基学习器是"低偏差高方差"的模型——比如浅层决策树。它本身不稳定,单独上菜时咸淡起伏很大,但正因为不稳定,不同的随机子集才能训练出差异明显的手艺,平均后收益最大。反过来,如果用线性回归做基学习器,它本身波动就小,再平均也没多大提升。 第三,验证环节不用额外抽评委——OOB 袋外误差就是免费的验证集。每棵树的"神秘顾客"各不相同,把样本交给所有没见过它的树综合打分,误差率就是泛化能力的近似估计。

竞赛实战应用:Kaggle 融合兵法

Kaggle 老手圈流传一句话:“单模型是门票,融合才是冲奖的关键。”Bagging 在竞赛中几乎无处不在,它的应用早已超出“训练一次、预测一次”的朴素玩法。最经典的姿势是用不同的随机种子跑很多次 Bagging,把每次的预测概率做平均——相当于举办 N 轮厨神争霸赛,再把 N 轮评审结果汇总,波动进一步被抹平。

更高级的技巧是“折外预测”:把训练集切成 K 折,每次用 K-1 折训练 Bagging,对剩下那一折做预测,拼出完整的训练集预测,这些预测可以作为第二层模型的输入特征(Stacking 的原料)。这套打法,本质上就是让厨师们每轮换一批神秘顾客,把评出来的分数当作新菜品的一部分继续升华。

\displaystyle GE \le \frac{\bar{\rho}\,(1 - s^2)}{s^2}

> 上界由两方博弈决定:树之间的平均相关性 \(\bar{\rho}\)(分子)与分类间隔 \(s\)(分母)。间隔越大、相关性越小,上界越小,泛化越好。1. 平均间隔 \(s\):正确类别的平均票数与最大错误类别的票数的差距,衡量“赢得多稳”。$$\displaystyle s = \mathrm{avg}\left(P(\hat{y}=y) - \max_{c \neq y} P(\hat{y}=c)\right)$$2. 平均相关性 \(\bar{\rho}\):树与树之间预测结果的相关系数均值,衡量厨师们手艺的雷同程度。$$\displaystyle \bar{\rho} = \frac{1}{T(T-1)}\sum_{t \neq s}\rho_{ts}$$3. 分子 \(\bar{\rho}(1 - s^2)\):相关性越高、间隔越小,上界越大,风险越高。$$\displaystyle \bar{\rho}(1 - s^2)$$4. 分母 \(s^2\):间隔越大,分母越大,上界被压得越低。$$\displaystyle s^2$$所以,当随机森林效果不好时,先看两件事:树之间是不是太像了(调大特征随机比例、减少特征冗余),以及分类间隔是否太薄(调树深、调代价敏感)。最后,可解释性也常被诟病——100 棵树的“众口一词”确实难讲清逻辑,实战中常用特征重要性 + SHAP 值给“黑箱”开一扇窗。---
latex25 行
\displaystyle \hat{y} = \arg\max_{c}\; \sum_{t=1}^{T} w_t \cdot \mathbb{1}\left(f_t(x) = c\right)$$ > 给每位厨师一个"信任权重",他投给某道菜类别 \(c\) 的票乘以权重后累加,总权重最高的类别胜出。这是加权投票融合的通用公式。 #### 逐字解析 1. **指示函数 \(\mathbb{1}(\cdot)\)**:第 \(t\) 位厨师预测类别 \(c\) 时记 1,否则记 0。   $$\displaystyle \mathbb{1}(f_t(x) = c) = \begin{cases} 1, & f_t(x) = c \\ 0, & f_t(x) \ne c \end{cases}$$2. **权重 \(w_t\)**:对更可靠的模型(如 OOB 误差低的)给更大权重。   $$\displaystyle w_t = \frac{1}{\epsilon_{\text{oob},t}} \bigg/ \sum_{s=1}^{T} \frac{1}{\epsilon_{\text{oob},s}}$$3. **求和 \(\sum_{t=1}^{T}\)**:把全部厨师投给类别 \(c\) 的权重票加总。   $$\displaystyle \text{score}(c) = \sum_{t=1}^{T} w_t \cdot \mathbb{1}(f_t(x)=c)$$4. **\(\arg\max\) 决胜**:选总权重分最高的类别作为最终头菜。   $$\displaystyle \hat{y}$$ 实战提醒:概率平均(软投票)通常优于硬投票——因为概率保留了置信度信息。比如两个模型分别给"牛肉"评 0.9 分和 0.6 分,平均后仍有 0.75 的胜算;而硬投票可能把 0.6 直接抹成 1 或 0,损失中间信息。 ### 问题与调优:翻车现场急救指南 集成模型是不是永远不会翻车?当然不是。第一种经典翻车:误以为 Bagging 能治欠拟合。如果基模型是"高偏差"——比如深度只有 1 的决策树,本身只会机械剁肉不会调味,平均 100 个剁肉大汉,做出来的还是一道没味道的菜。此时该换更强的基学习器或者加特征,而不是堆 Bagging。 第二种:特征冗余严重。如果 100 个特征里 90 个是同一个信息的复制品,随机特征采样也救不了——所有树都在反复用那同一个信息,多样性名存实亡。此时应当先做特征筛选。第三种:资源开销失控。1000 棵树、百万样本,训练和推理都慢得令人窒息;工程上要对树的数量做早停,或者用更轻量的基学习器。 Breiman 老爷子给随机森林推导过一个著名的泛化误差上界,一句话概括就是"相关性越低、分类间隔越大,模型越稳",这成为一切调参的总纲。

AI 应用场景

信贷风控:多专家会诊代替单人拍板

阶段:模型训练与集成

解决的问题:传统逻辑回归在信贷数据上方差大,换一批客户样本,模型分数波动剧烈;单个决策树又容易过拟合局部噪声,导致坏账误判。

具体案例:某消费金融公司构建违约预测模型,用深度为 5 的决策树做基学习器,跑 200 棵树的 Bagging。相比单棵决策树,AUC 从 0.74 提升到 0.81,且 OOB 误差与线上验证误差高度一致,省掉了原本要单独留出的 20% 验证集。

Kaggle 竞赛:房价预测的融合上分

阶段:模型融合与后处理

解决的问题:单模型预测房价时对异常样本敏感,交叉验证分数忽高忽低;新手常因一次 bad fold 误判模型好坏。

具体案例:Kaggle "House Prices" 比赛中,选手用 LightGBM 做基学习器、换 10 个随机种子跑 Bagging 概率平均,CV 分数从 0.121 降到 0.117;再结合 OOF 预测作为第二层 Ridge 的输入,最终冲进前 5%。

医疗辅助诊断:医生小组投票制度

阶段:模型可靠性与评估

解决的问题:单个影像分类模型对某些罕见病灶误诊率高,且缺少标注数据时方差很大。

具体案例:某医疗 AI 团队用 Bagging 集成 30 个 ResNet 骨干网络,训练时对每个子集做有放回采样,诊断肺炎的敏感度从 0.87 提高到 0.93;同时用 OOB 样本自动生成每个样本的“置信度预警”,低置信度样本转人工复核。

Python 演示

python53 行
import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import make_moonsfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score  class SimpleBagging:    def __init__(self, base_model=None, n_estimators=20, random_state=42):        self.base_model = base_model or DecisionTreeClassifier(max_depth=3)        self.n_estimators = n_estimators        self.random_state = random_state        self.models = []        self.oob_error = None     def fit(self, X, y):        rng = np.random.RandomState(self.random_state)        n = X.shape[0]        self.models = []        oob_scores = np.zeros(n)        oob_counts = np.zeros(n)        for _ in range(self.n_estimators):            idx = rng.choice(n, size=n, replace=True)            model = self.base_model.__class__(**self.base_model.get_params())            model.fit(X[idx], y[idx])            self.models.append(model)            mask = np.ones(n, dtype=bool)            mask[idx] = False            if mask.any():                oob_scores[mask] += model.predict(X[mask])                oob_counts[mask] += 1        valid = oob_counts > 0        oob_pred = np.zeros(n)        oob_pred[valid] = oob_scores[valid] / oob_counts[valid]        self.oob_error = 1 - accuracy_score(            y[valid], (oob_pred[valid] > 0.5).astype(int))        return self     def predict(self, X):        preds = np.mean([m.predict(X) for m in self.models], axis=0)        return (preds > 0.5).astype(int)  if __name__ == "__main__":    X, y = make_moons(n_samples=500, noise=0.3, random_state=0)    X_tr, X_te, y_tr, y_te = train_test_split(        X, y, test_size=0.3, random_state=0)    bag = SimpleBagging(        base_model=DecisionTreeClassifier(max_depth=3), n_estimators=50)    bag.fit(X_tr, y_tr)    acc = accuracy_score(y_te, bag.predict(X_te))    print("Bagging 测试集准确率:", acc)    print("OOB 袋外误差率:", bag.oob_error)
目的:用 60 行不到从零实现 Bagging 分类器,直观展示“自助采样 → 并行训练 → 投票聚合 → 袋外评估”全流程。
  1. idx = rng.choice(n, size=n, replace=True)有放回地抽取 n 个样本下标,相当于厨师从食材市场抓一把放回再抓。
  2. model.fit(X[idx], y[idx])每位厨师只用自己篮子里(子集里)的食材做菜。
  3. mask = np.ones(n, dtype=bool); mask[idx] = False标记没被这位厨师抽中的袋外样本。
  4. oob_scores[mask] += model.predict(X[mask])只让“没见过这个样本”的树投票,公平考核。
  5. oob_pred[valid] = oob_scores[valid] / oob_counts[valid]把每棵树的袋外预测取平均,得到袋外软投票。
  6. preds = np.mean([m.predict(X) for m in self.models], axis=0)全部厨师对测试样本预测取平均。
  7. (preds > 0.5).astype(int)平均分超过 0.5 判为正类,相当于评审团投票过半通过。

常见误区

误区反正集成了很多模型,欠拟合的问题肯定也能解决,Bagging 应该既降偏差又降方差。

正解Bagging 主要靠平均来压低“随机波动”(方差),对“系统性跑偏”(偏差)几乎无能为力。如果每个厨师都只会做咸菜,平均 100 道咸菜依然咸得发齁。治欠拟合要用更强的基学习器、更丰富的特征,而不是堆 Bagging。

为何常见:大家直觉认为“三个臭皮匠”什么都顶得上,忽略了方差与偏差是两码事。

误区Bagging 就是每次随机抽一部分数据训练,抽过的就不能再抽了。

正解自助采样是有放回的。每次从 N 个样本里抽 N 次,同一个样本可能被重复选中多次,同时约 36.8% 的样本一次也没被抽到(OOB)。正是“有放回”才让每个数据集各不相同,也是 OOB 验证的由来。如果改成无放回,袋外样本这个免费福利就不存在了。

为何常见:日常生活中“随机抽一部分”默认是无放回的,容易把直觉带偏。

误区把每棵决策树都调到完美,每棵树都达到 99% 准确率,集成效果肯定更强。

正解如果每棵树都近乎完美,它们之间的预测高度相关,平均后的方差削减极其有限。Bagging 的理想基学习器是低偏差高方差的弱模型(如浅树);它单独用时不太稳,但多样性足,平均后的提升巨大。厨师们若师出同门、菜式雷同,再多名厨也白搭。

为何常见:人们天然用“单模型能力”的思维去评判集成里的一员,忽略了多样性才是集成的燃料。

误区OOB 误差是模型在袋外数据上的表现,应该等于测试集上的误差,拿它直接对比线下分数就行。

正解OOB 是泛化误差的近似无偏估计,但具体数值仍与测试误差有差异——测试集是不同的数据分布切片,OOB 也不参与最后的测试集预测。两者趋势强相关,但不相等。竞赛中 OOB 更适合用来挑超参数,而不是当作最终成绩的预言。

为何常见:把“近似无偏”理解成“完全相等”,忽略估计量与真实值之间的随机波动。

面试题

Q1. Bagging 集成使用的抽样方式是哪一种?

单选题 · easy

  • A.从样本中有放回抽取相同数量← 正确答案
  • B.从样本中无放回抽取一部分
  • C.按类别比例做分层抽样
  • D.按顺序切割出固定比例

答案:A。Bagging 的核心是有放回的自助采样(Bootstrap),每次抽取与原始数据集同样数量的样本,允许重复。B 是无放回抽样,C 是分层抽样,D 是顺序切分,都不符合。

Q2. Bagging 主要降低模型哪方面的误差?

单选题 · easy

  • A.降低模型的高偏差问题
  • B.降低模型的高方差问题← 正确答案
  • C.减少训练数据的固有噪声
  • D.同时降低偏差与方差

答案:B。Bagging 通过对多个高方差基学习器的结果做平均,对冲随机波动,主攻方差。偏差是系统性错误,平均解决不了;噪声是数据本身的属性,任何模型都躲不开。

Q3. 自助采样中,单个样本大约有多大概率出现在某个 Bagging 训练子集中?

单选题 · mid

  • A.约 36.8% 的概率被选中
  • B.约 50% 的概率被选中
  • C.约 63.2% 的概率被选中← 正确答案
  • D.约 100% 的概率被选中

答案:C。每次抽取 N 次,某样本被抽中至少一次的概率为 \(1 - (1-1/N)^N\),N 较大时趋近 \(1 - e^{-1} \approx 63.2\%\)。36.8% 是它一次也没被抽中的概率。

Q4. 关于袋外样本 OOB,下列说法正确的是?

单选题 · mid

  • A.某棵树训练时未使用的样本← 正确答案
  • B.测试集中随机抽取的样本
  • C.验证集中人工挑选的样本
  • D.训练集中重复最多的样本

答案:A。OOB 是自助采样中没被某棵树抽到的样本。因为每棵树的采样结果不同,每个样本总会被大约 36.8% 的树“袋外”,因此不需要单独留验证集即可近似评估泛化误差。

Q5. 随机森林相比朴素 Bagging 的改进包括哪些?

多选题 · mid

  • A.加入特征随机抽样机制← 正确答案
  • B.用梯度下降替代树分裂
  • C.分裂时仅从特征子集选最优← 正确答案
  • D.强制所有树使用相同特征

答案:AC。随机森林在 Bagging 的样本随机基础上,引入特征随机抽样:每次分裂只从随机挑选的特征子集中选最优(即 A、C 两个方面)。B 是梯度提升的做法,D 恰恰削弱多样性。

Q6. 若 M 个基学习器完全独立且同方差 σ²,则平均后的方差是多少?

单选题 · hard

  • A.方差保持不变,仍约 σ²
  • B.方差缩小为原来的 M 分之一← 正确答案
  • C.方差扩大为原来的 M 倍
  • D.方差会随 M 增大而增大

答案:B。独立意味着协方差为 0,由方差公式可得 \(\mathrm{Var}(\bar{f}) = M\sigma^2 / M^2 = \sigma^2 / M\)。这正是 Bagging 方差降低的数学本质,也说明基学习器独立性至关重要。

Q7. 以下哪些情况更适合使用 Bagging 集成?

多选题 · mid

  • A.基学习器高方差低偏差时← 正确答案
  • B.基学习器高偏差低方差时
  • C.数据量大且特征维度高时← 正确答案
  • D.模型处于严重欠拟合状态时

答案:AC。Bagging 擅长对抗方差,因此基学习器应当是“低偏差高方差”的形态(如深树);数据量大、特征多维时多样性充足,集成收益明显。高偏差欠拟合场景应该换更强模型或加特征。

Q8. 关于 OOB 误差,正确的理解是?

单选题 · mid

  • A.需要额外留出独立验证集
  • B.是泛化误差的近似估计← 正确答案
  • C.一定小于测试集上的误差
  • D.必须通过交叉验证获得

答案:B。OOB 误差用每棵树的袋外样本预测汇总得到,是泛化误差的无偏近似,且不消耗额外数据。它不一定比测试误差小,也无需交叉验证;它和测试误差趋势相关但不相等。

Q9. 决定 Breiman 随机森林泛化误差上界的关键因素是?

单选题 · hard

  • A.树间相关性与平均间隔决定← 正确答案
  • B.树的数量与树的深度决定
  • C.样本量与特征数之比决定
  • D.损失函数的类型与大小决定

答案:A。Breiman 上界 \(GE \le \bar{\rho}(1-s^2)/s^2\) 中,\(\bar{\rho}\) 是树间平均相关性,\(s\) 是平均分类间隔。相关性越低、间隔越大,上界越紧,泛化越好。这指导我们通过随机特征来降相关性。

Q10. 在 Kaggle 竞赛中,常见的 Bagging 进阶用法有?

多选题 · hard

  • A.折外预测可作为第二层特征← 正确答案
  • B.多随机种子重复训练取均值← 正确答案
  • C.只保留一棵树以降低内存
  • D.硬投票结果总是优于软投票

答案:AB。折外预测(OOF)是 Stacking 的标准原料;多随机种子跑 Bagging 再平均预测概率是冲奖常用手段,都属于 Bagging 思想的外延。C 丢弃了集成本身,D 说法错误——软投票通常保留更多置信度信息,往往优于硬投票。