> For the complete documentation index, see [llms.txt](https://lang-yu.gitbook.io/mi-ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lang-yu.gitbook.io/mi-ai/ke-cheng-xi-lie/00.index/06.ensemble.md).

# 6.集成学习

## 基本概念

    将多个模型的决策结合起来，提高整体效果；集成学习模型通过将多个学习器组合，获取比单一学习显著优越的泛化能力。分类大纲：

* 模型融合：将训练出的**强学习器组合**进一步提高性能。
  * 多数法（Max Voting）
  * 平均法（Averaging）
  * 加权平均法（Weighted Averaging）
  * 堆叠法（Stacking）
  * 混合法（Blending）
* 机器学习元算法：**弱学习器的组合**。
  * 袋装法（Bagging）
    * 袋装通用（Bagging Meta-Estimator）
    * 随机森林（Random Forest）
  * 提升法（Boosting）
    * Adaboost
    * XGBoost
    * Gradient Boost

## 1. 模型融合

    **步骤**：

1. 先训练出多个功能强大的学习器
2. 然后，进一步提高学习器能力，尝试将其组合起来

    **优缺点**：

* 好处是增强模型的预测和泛化能力
* 坏处是多模型的学习加上再学习的过程会增加计算代价

    **目标**：好而不同：

* **好**表示个体学习器的性能都要好
* **不同**是个体模型的类别不同

### 1.1. 多数法（Max Voting）

    通常用于分类，使用多个模型对每个数据预测，每个模型预测视为“投票”，大多数模型得到的结果为最终预测结果。

### 1.2. 平均法（Averaging）

    采用所有模型的平均预测值进行最终预测，可用于回归和分类中的概率预测。

### 1.3. 加权平均（Weighted Averaging）

    平均法的扩展，根据模型的重要性分配不同权重（**权重总和为1.0**）。

### 1.4. 堆叠（Stacking）

    堆叠法来自多个模型（KNN、SVM、决策树）的预测来构建新模型，使用多个模型，在交叉验证基础上，使用部分训练数据训练，然后部分数据测试，最终得到每个模型的预测结果，最终将多个模型融合到一起。（**过程很复杂**）

### 1.5. 混合法（Blending）

    混合法和堆叠法类似，区别是它仅使用验证集来重新建模并进行预测，模型是一样的，但训练部分使用的数据集有所区别（**训练集、验证集、测试集**）。

## 2. 机器学习元算法

![](/files/YXfNItLjOijEYKkl7nbg)

    不使用多个算法，一般只使用**一个算法**，同一个算法创建不同的模型，后期使用投票的方式处理（如使用决策树），每个分类器都是弱分类器，但最终组合后效果比强分类器好。

    分成两大类：

* Bagging个体学习器相互之间不依赖，同时对样本随机采样并行化生成个体学习器。——对样本随机取样产生多个独立模型，平均所有模型预测值，目的是减小方差（Variance），模型稳定。
* Boosting的个体学习器之间存在依赖，在前边模型的训练结果生成的模型，必须串行化生成。——拟合前一个模型的误差，主要是减小偏差（Bias），模型准确但稳定性不是很好。

    下图Variance和Bias区别：**准和稳**。

![](/files/7A1TgrvjizD6gwDoSiC4)

### 2.1. 抽样技术

    抽样：

1. 在训练数据集可取回时的抽样（Bagging/Boosting）
2. 在输入特征上抽样（Random Forest = Bagging + 特征抽样）

### 2.2. Bagging

![](/files/4HR74MeJxoh0F4fs6J67)

    上图中构造One-Level二分类树：$$\chi \le 0.35, \chi \le 0.75$$两个切割点，一层二元树最终准确率极限：70%。如果使用袋装，在该例子上重复抽样10次，依旧使用$$\chi \le 0.35$$的切割点。

![](/files/dXIZIP3cUctQKhITQh4W)

    **十个分类器投票来计算结果**，最终根据`Sum`的结果综合投票计算——都是一层二元树，而投票结果却有二层二元树的能力。这个例子的假设：

1. 每一层的实例的权重是一样的，各自独立，一视同仁。
2. 不太容易出现**过拟合**（Model Overfitting）。

### 2.3. Random Forest

    随机森林是特别针对决策树的Bagging方法，除了对训练数据上做随机，它还会在算法上做随机，从K个最好的字段中随机挑选特征，并从这些特征中选择最好的：

1. 训练数据上随机抽样
2. 特征上随机抽样（比通用Bagging多的一个特点）

> Bagging的方法不一定要和随机森林配搭，它允许搭配任何算法，所以**Random Forest = Bagging + 特征抽样**。

### 2.4. Boosting

    梯度提升决策树（**GBDT**：Gradient Boosting Decision Tree），集成许多弱（决策树）分类器，以发展最优模型的方法。Boosting是利用迭代找到优化后的模型，一旦碰到数据集非常复杂时，成千上万计算会成为瓶颈，所以有了极限梯度提升（**XGBoost**：eXtreme Gradient Boosting），之后微软训练了效率更高、准确率更高的**LightGBM**（Light Gradient Boosting Machine）。

    同样是在训练数据上做手脚，在挑选训练数据时会动态调整每一笔数据被动态抽到的概率，针对难以分类正确的数据提高其抽样概率，它对训练数据提供了一个概率的权重，让某些数据更容易被抽样。——**根据上一次的结果调整权重，决定下一次哪些数据必须被抽中**。

* 最开始每笔数据权重都是$$1/N$$
* 然后发现某些数据分类错误，于是调整其权重。

> 权重低不代表不会被抽中。

    参考下图：

![](/files/McrfTKVD0Xq6L5VKzyNY)

    4的概率在后续抽样提高了，而其他正确的分类下的概率降低了。

> 权重分配后，权重的总和依旧是`1.0`。

![](/files/VkcSVBtK3fKnQkE36mS2)

    越后面的分类器越重要，从图上可以看到三个分类器最终调整的权重会不一样，Boosting的结果最终是加权的结果，**容易产生过拟合**，XGBoost全称是Extreme Gradient Boosting，它最大的特点是在于能够自动利用CPU的多线程进行并行，大幅度提高模型运算效率。

    下图是**提升法原理**：

![](/files/5XhpyzqvZoMLcCzMlHEJ)

    最终产生的是非线性的结果。

### 2.5. GBDT

    原理：

1. 使用训练集和样本真集（标准答案）训练一棵树，使用这个树预测训练集，得到每个样本预测值，使用预测和真实的差异，二者相减得到“残差”。
2. 然后训练第二棵树，此时使用残差代替真值做标答，两棵树训练完成后，再次得到每个样本的残差。
3. 然后训练第三棵树，依次类推，监控某个指标来停止训练。

    XGBoost在分布式应用上也有优势，可以直接在YARN和Spark机器学习上使用。
