Files
Notes/【笔记origin】ESL/16 origin.md
2026-05-16 17:16:51 +08:00

388 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第十六章
抱歉刚才在对比时跳跃太快,我们现在把“集成学习”作为一个独立的宏观架构,彻底拆解清楚。
## 1. 什么是集成学习 (Ensemble Learning)
如果说普通的机器学习算法决策树、SVM、逻辑回归是“单兵作战”**,那么集成学习就是**“军团作战”。
它的核心逻辑是:**构建多个“弱学习器”Weak Learners并通过某种结合策略把它们组装成一个“强学习器”。**
### 集成学习的三大主流派系
根据基学习器之间“如何协同”,集成学习分为三大类:
|**派系**|**核心逻辑**|**形象比喻**|**代表算法**|
|---|---|---|---|
|**Bagging (并行)**|独立投票,减少波动|**民主选举**:每个人独立思考,最后少数服从多数。|随机森林 (Random Forest)|
|**Boosting (串行)**|步步为营,修正错误|**学霸养成**:针对错题反复练习,后一个模型专门补前一个的漏洞。|XGBoost, LightGBM, AdaBoost|
|**Stacking (层级)**|跨界融合,二次建模|**专家会诊**:由不同领域的专家先出方案,再由一个主治医生总结。|堆叠泛化 (Stacking)|
---
## 2. 集成学习的三个关键动作
要理解集成学习,只需要看它怎么处理这三个环节:
1. **怎么选样本?**
- Bagging 用 **Bootstrap**(有放回抽样),让每棵树看的数据都不完全一样。
- Boosting 根据上一步的**错误率**来调整样本权重,让模型死磕“难点”。
2. **怎么选算法?**
- 通常使用同一种算法作为基底(比如全是决策树),但 Stacking 可以混搭(树模型+线性模型+神经网络)。
3. **怎么做决策?**
- 分类问题投票Voting
- 回归问题加权平均Averaging
---
## 3. 具体应用领域案例
集成学习(尤其是森林类和提升类算法)是目前工业界解决**结构化数据**(类似 Excel 表格数据)最强大的武器。
### A. 金融领域:信用卡欺诈检测与风控
- **痛点**:欺诈交易极少(样本极度不平衡),且手段多变。
- **应用**:银行使用 **XGBoost 或 随机森林**。随机森林通过“特征随机”捕捉微弱的异常信号Boosting 通过迭代,专门学习那些被漏掉的隐蔽欺诈案例。
- **效果**:比单一逻辑回归模型大幅降低误报率。
### B. 医疗领域:疾病诊断与存活预测
- **应用**:基于患者的生化指标、年龄、病史预测患癌风险。
- **细节**:由于医疗数据往往存在缺失值(有些检查没做),集成学习(尤其是具有处理缺失值能力的随机森林)能非常稳健地给出预测,并给出**特征重要性评分**(例如:发现“肿瘤直径”是判断生存率的第一关键词)。
### C. 零售/电商:销量预测与库存规划
- **应用**:预测下周某种商品的销量。
- **细节**:销量受天气、节假日、促销活动、价格等百余个维度影响。**LightGBM** 这种集成学习算法能够高效处理这些高维特征,通过多个弱回归树的叠加,拟合出复杂的市场波动曲线。
### D. 互联网安全:反垃圾邮件
- **应用**:判断邮件是否为垃圾邮件。
- **逻辑****AdaBoost** 曾经在这个领域非常流行。它先识别出明显的垃圾邮件关键词,然后通过迭代,不断强化对那些伪装成正常邮件的“聪明垃圾邮件”的识别能力。
---
## 4. 为什么它和正则化联系紧密?(回归到你的上一个问题)
在这些应用中,我们最怕模型“钻牛角尖”(过拟合)。
- **在 Lasso/岭回归里**,我们通过**限制系数大小**来防止钻牛角尖。
- **在集成学习里**,我们通过“人多口杂”**Bagging 的多样性)或者**“每次只学一小点”Boosting 的学习率/收缩率)来防止钻牛角尖。
**一句话总结:**
集成学习是一种“工程化”的正则化。它不直接在数学公式上加惩罚,而是通过**改变数据的输入结构**和**组合模型的结果**,在宏观上达到了和 Lasso/岭回归一样的效果——让模型变得更稳健,更不容易在未知数据上翻车。
这是一个非常深刻的问题。你敏锐地察觉到了机器学习中两个看似不相关的领域——**集成学习Ensemble**与**收缩估计Regularization/Shrinkage**——在底层逻辑上的交汇。
简单来说:**集成学习通过“堆人头”来控制模型,正则化通过“加枷锁”来控制模型。** 但在数学边界上,它们殊途同归。
---
## 1. 集成学习的两种“收缩”路径
集成学习的核心目标是平衡 **偏差 (Bias)****方差 (Variance)**
- **Bagging (随机森林)**:通过对多个高方差模型取平均,直接**抵消方差**。这在数学上等同于一种隐式的正则化(通过采样和平均来平滑预测)。
- **Boosting (GBDT/XGBoost)**:通过每一步的一小步前进(学习率 $\eta$),慢慢逼近目标。这种“慢走”其实就是一种**隐式正则化**。
---
## 2. 正则化Lasso, Ridge显式的惩罚
正则化是在损失函数后面加一个“惩罚项”,强制让系数 $\beta$ 变小。
- **岭回归 (Ridge)**:加上 $L_2$ 范数 $\lambda \sum \beta^2$。它让系数均匀地变小,但不为 0。
- **Lasso**:加上 $L_1$ 范数 $\lambda \sum |\beta|$。它能实现特征选择,让不重要的系数直接变成 0。
---
## 3. 核心联系Boosting 与 最小角回归 (LARS)
这是理解两者联系的“圣杯”。有一个著名的结论:**Boosting特别是步长极小的梯度提升与 Lasso、LARS 在路径上具有高度的等价性。**
### A. 最小角回归 (LARS) 的逻辑
LARS 是 Lasso 的一种高效算法。它的做法是:
1. 寻找与残差相关性最大的特征。
2. 沿着这个特征的方向移动,**直到另一个特征与残差的相关性变得一样大**。
3. 然后沿着这两个特征的角平分线方向继续移动。
### B. 为什么它们是一致的?
当我们使用 **$L_2$ Boosting**(即每一步都去拟合残差的提升法)且学习率 $\eta \to 0$(无穷小)时:
- **Boosting** 的每一步都在找当前最能解释残差的特征(决策树的某个分裂点),并更新一点点。
- **Lasso (LARS)** 也是在找最能解释残差的特征,并更新其系数。
**数学上的相似性:**
在极小步长下Boosting 产生的系数变化路径Coefficient Path与 Lasso 随着惩罚参数 $\lambda$ 减小而产生的系数路径轨迹几乎完全重合。
---
## 4. 从公式上解释:为什么相似甚至一致?
我们来看 **Gradient Boosting** 的更新公式和 **Lasso** 的目标函数。
### 1. Boosting 的参数更新(向量化表达):
假设我们用线性模型作为基学习器,第 $m$ 步的预测为:
$$F_m = F_{m-1} + \eta \cdot x_j$$
其中 $x_j$ 是与当前残差 $r$ 相关性最大的特征。对应的系数 $\beta$ 的更新:
$$\beta^{new}_j = \beta^{old}_j + \eta \cdot \text{sign}(\langle r, x_j \rangle)$$
这被称为 **Forward Stagewise Additive Modeling (前向分布加性模型)**
### 2. Lasso 的坐标下降法更新:
Lasso 的目标是最小化:
$$\min_{\beta} \|y - X\beta\|^2 + \lambda \|\beta\|_1$$
在优化过程中,如果我们对某个系数 $\beta_j$ 进行更新,它在非零处的更新方向也是由残差 $y-X\beta$ 与特征 $x_j$ 的相关性决定的。
### 3. 一致性的关键点:
- **约束的作用**Lasso 通过 $\|\beta\|_1 \le s$ 限制了系数的总长度。
- **步长的作用**Boosting 通过“迭代次数 $M \times$ 学习率 $\eta$”限制了系数的总长度。
**结论:**
**迭代次数 $M$** 在 Boosting 中起到了和 **$1/\lambda$** 在 Lasso 中完全一样的作用。
- 如果 $M$ 很大(或者 $\lambda$ 很小),模型就会变得复杂,容易过拟合。
- 如果 $M$ 很小(或者 $\lambda$ 很大),模型就会受到高度约束,系数趋于 0。
---
## 5. 总结联系
|**概念**|**手段**|**目的**|**对应关系**|
|---|---|---|---|
|**正则化 (Lasso/Ridge)**|在 Loss 中加入系数惩罚|限制系数增长,防止过拟合|显式限制空间体积|
|**集成学习 (RF/Bagging)**|随机采样 + 平均|降低方差,平滑决策边界|隐式平滑 (Smoothing)|
|**集成学习 (Boosting)**|极小步长迭代 (Shrinkage)|慢慢逼近最优解|等价于 Lasso 的路径优化|
**深度洞察:**
你提到的**最小角回归 (LARS)** 实际上是连接两者的桥梁。它证明了:**贪婪的步进式集成Boosting本质上就是在有约束的特征空间里进行最优路径搜索。**
所以,随机森林通过“随机丢弃”来限制模型,而 Lasso 通过“罚款”来限制模型。它们都是在防止模型因为“太聪明”而记住了训练集里的杂质。
---
这是一个非常深入的本质问题。如果把机器学习比作一场“装修”基函数Base Functions**就是原材料(如木板、水泥),而**集成学习Ensemble Learning就是施工方案如拼地板、砌墙
在现代统计学习理论中,集成学习本质上是一种**基于基函数的加性模型迭代过程**。
---
## 1. 数学本质:加性模型 (Additive Models)
集成学习的核心公式其实就是一个**基函数的线性组合**
$$F(x) = \sum_{m=1}^{M} \beta_m b(x; \gamma_m)$$
这个公式揭示了二者的血缘关系:
- **$b(x; \gamma_m)$**:这就是**基函数**(或称基学习器)。在随机森林或 GBDT 中,它通常是一棵决策树;在神经网络中,它是一个神经元(激活函数)。
- **$\gamma_m$**:基函数的参数(比如决策树在哪一层分裂、分裂点是多少)。
- **$\beta_m$**:权重(每个基函数在最终决定中占的分量)。
- **$F(x)$**:集成后的最终模型。
---
## 2. 基函数在不同集成策略中的角色
### A. 在 Boosting 中:基函数是“基石”
Boosting如 GBDT是一个**前向分布算法**。它每一次只增加一个基函数,目标是最小化当前的损失函数。
> **逻辑:**
>
> 第一步:$f_1(x) = b(x; \gamma_1)$
>
> 第二步:$f_2(x) = f_1(x) + \beta_2 b(x; \gamma_2)$
>
> ...
>
> 这里,每一个新的基函数 $b$ 都在尝试去拟合当前模型与真实值之间的“空隙”。
### B. 在 Bagging 中:基函数是“样本投影”
在随机森林里,每一个基函数(决策树)都是对特征空间的一种**局部切分**。
> **逻辑:**
>
> 所有的基函数是并行生成的。每一个基函数独立地对空间进行“分段常数拟合”。当你把几百个这样的分段函数平均起来时,最终得到的 $F(x)$ 就不再是生硬的阶梯,而是一个极其复杂的拟合曲面。
---
## 3. 集成学习 vs. 传统基函数(如傅里叶、多项式)
这是理解“现代集成学习”强大之处的关键:
1. **传统基函数(固定基函数)**
在多项式回归或傅里叶变换中,基函数(如 $x^2, \sin(x)$)是**预先定义好**的。模型只负责学习权重 $\beta$。
2. **集成学习(自适应基函数)**
基函数 $b(x; \gamma_m)$ 是从数据中**学习出来**的。
- 在随机森林里,决策树会根据数据分布自动决定在哪里分段。
- 这意味着基函数不再是死板的曲线,而是“看菜吃饭”的动态门控函数。
---
## 4. 联系总结:从基函数到正则化的闭环
为什么要强调基函数?因为这直接联系到了你之前问的 **Lasso 和正则化**
- **过完备基函数**:如果集成学习中基函数(树)的数量 $M$ 太多,或者树长得太深,基函数的表达能力就会过剩(过完备),导致模型过拟合。
- **正则化的介入**
- **L1/L2 正则**:在 XGBoost 等算法中,会直接在目标函数里限制基函数(树)的复杂度(如叶子节点数量)。
- **Shrinkage收缩**:通过给每个基函数乘一个很小的步长 $\eta$,防止单个基函数对模型贡献过大。这在本质上和 **Lasso/岭回归** 限制系数 $\beta$ 的道理是一模一样的。
---
## 5. 形象总结
- **基函数**:是模型的“零件”。它可以是一条直线、一个阶梯(决策树)或一个 S 型曲线Sigmoid
- **集成学习**:是“组装工艺”。它研究的是如何通过组合成千上万个简单的零件,去精确拟合一个极其复杂的现实世界。
**随机森林和提升树之所以厉害,是因为它们不像线性回归那样死守着几个固定的“零件”,而是通过数据驱动,自己造出了成千上万个最适合当前任务的“特制基函数”。**
---
“规则集成”Rule Ensemble是集成学习中一个非常硬核且优雅的分支。如果你理解了**决策树是“自动门控分段函数”**,那么规则集成就是把这些门控逻辑**拆散、重组、并进行精简化**的过程。
简单来说:**规则集成是将决策树转化为一组“如果...那么...” (IF-THEN) 的规则集合,并通过正则化手段(如 Lasso筛选出最有效的规则来构建模型。**
---
## 1. 规则集成的核心逻辑
传统的随机森林或 GBDT 输出的是一堆“树”,虽然准,但很难看懂。规则集成(代表算法如 **RuleFit**)走了一条不同的路:
1. **生成规则(挖掘)**
先跑一个森林(比如随机森林)。每一棵树从根节点到叶子节点的每一条路径,都可以看作一条**规则**。
> _例子如果年龄 > 30年收入 > 10万有房那么信用极好。_
2. **提取特征(转化)**
把这些路径全部拆出来,每一条规则都变成一个新的“二进制特征”(满足规则为 1不满足为 0
3. **线性组合与筛选(集成)**
将这些成千上万条规则作为输入,丢进一个带有 **LassoL1 正则化)** 的线性模型里。
---
## 2. 为什么它和 Lasso 联系如此紧密?
这正好回应了你之前问的 Lasso 与集成的关系。规则集成的数学表达式通常如下:
$$F(x) = \hat{a}_0 + \sum_{j=1}^p \hat{a}_j x_j + \sum_{k=1}^K \hat{w}_k r_k(x)$$
- $x_j$ 是原始特征(线性部分)。
- $r_k(x)$ 是提取出来的**规则基函数**(非线性部分)。
- **Lasso 的作用**因为从森林里拆出来的规则可能有几万条绝大多数是冗余或无效的。Lasso 会把那些没用的规则权重 $\hat{w}_k$ 直接削减为 0。
**最终结果:** 你得到的是一个极其精简的、只有几十条核心规则的集合。它既有森林的准确度,又有类似线性回归的可解释性。
---
## 3. 规则集成 vs. 随机森林
|**维度**|**随机森林 (Random Forest)**|**规则集成 (RuleFit)**|
|---|---|---|
|**存在形式**|成百上千棵完整的树|一组 IF-THEN 规则的线性加权|
|**解释性**|较低(黑盒)|极高(可以直接读出规则)|
|**数学本质**|基于样本平均的 Bagging|**基于基函数筛选的加性模型**|
|**与正则化关系**|隐式正则化(随机性)|**显式正则化(靠 Lasso 选规则)**|
---
## 4. 为什么要用规则集成?(应用领域)
规则集成在需要“绝对透明”**且**“非线性建模”的领域非常受欢迎:
- **医疗临床指南**:医生不需要一个给概率的黑盒,他们需要确定的规则。例如:“若患者血压 > 140 且 胆固醇 > 5则风险等级 A”。规则集成能从海量数据中自动提取出这种简洁的逻辑。
- **信贷审批策略**:银行需要向监管机构解释为什么要拒绝某个客户。规则集成生成的每一条规则都是法律合规的解释理由。
- **工业故障诊断**:技术人员需要知道具体是哪几个传感器的组合触发了报警,而不是一个抽象的预测分。
---
## 5. 总结:基函数视角下的规则集成
在基函数的视角下,规则集成是一种极其聪明的手段:
它利用**集成学习(树)**作为“特征生成器”来寻找复杂的非线性**基函数**规则然后利用正则化Lasso作为“过滤器”来保证模型的稀疏性和简洁性。
这完美地统一了你提到的所有概念:**它用森林生产基函数,用 Lasso 进行集成,最后还原回分段函数的本质。**
既然我们聊到了规则的精简,你觉得在实际业务场景中,一个模型的“可解释性”和“绝对精度”哪一个更让你感到安心?
---