多学习器组合:提升模型准确性的有效策略
1. 背景与动机
在机器学习领域,虽然我们有多种学习算法可供选择,但没有一种算法能在所有场景下都保证最高的准确性。这是因为每个学习算法都基于一定的假设,当这些假设与数据不匹配时,就会产生误差。而且,学习本身是一个不适定问题,有限的数据会使不同算法收敛到不同的解,在不同情况下表现各异。
为了提高准确性,我们可以将多个学习器组合起来,让它们相互补充。不过,模型组合并非总能提高准确性,还会增加训练和测试的时间与空间复杂度。因此,我们需要解决两个关键问题:
- 如何生成相互补充的基础学习器?
- 如何组合基础学习器的输出以实现最高准确性?
2. 生成多样化学习器
要使组合有效,基础学习器需要多样化,同时在各自的专业领域具有一定的准确性。以下是几种生成多样化学习器的方法:
-
不同算法
:使用不同的学习算法训练基础学习器,不同算法对数据的假设不同,会产生不同的分类器。例如,一个基础学习器可以是参数化的,另一个可以是非参数化的。
-
不同超参数
:使用相同的学习算法,但设置不同的超参数。如多层感知机中的隐藏单元数量、k - 近邻中的 k 值、决策树中的误差阈值、支持向量机中的核函数等。训练具有不同超参数值的基础学习器可以平均这些因素,减少方差和误差。
-
不同输入表示
:不同的基础学习器可以使用同一输入对象或事件的不同表示,从而整合不同类型的传感器、测量值或模态信息。例如,在语音识别中,除了声学输入,还可以使用说话者嘴唇的视频图像。此外,通过随机选择输入的子集,我们可以得到使用不同输入特征的分类器,这称为随机子空间方法。
-
不同训练集
:可以使用训练集的不同子集来训练不同的基础学习器。随机抽取训练集的方法称为装袋(Bagging);串行训练学习器,使后续学习器更关注前序学习器分类不准确的实例,如提升(Boosting)和级联(Cascading)。
3. 模型组合方案
有多种方法可以将多个基础学习器的输出组合成最终输出:
-
多专家组合方法
:基础学习器并行工作,可分为全局方法和局部方法。
-
全局方法(学习者融合)
:给定输入,所有基础学习器生成输出并使用所有这些输出,例如投票和堆叠。
-
局部方法(学习者选择)
:有一个门控模型,根据输入选择一个或少数几个学习器来生成输出,如专家混合模型。
-
多阶段组合方法
:采用串行方法,后续基础学习器仅在先前基础学习器不准确的实例上进行训练或测试。例如级联,按复杂度对基础学习器排序,只有在前序简单学习器不自信时才使用复杂学习器。
组合基础学习器输出的通用公式为:
[y = f(d_1, d_2, \ldots, d_L|\Phi)]
其中,(d_j(x)) 是基础学习器 (M_j) 对输入 (x) 的预测,(f(\cdot)) 是组合函数,(\Phi) 是其参数。当有 (K) 个输出时,每个学习器有 (d_{ji}(x)),组合后生成 (K) 个值 (y_i),在分类问题中,选择 (y_i) 最大的类别。
4. 投票
投票是组合多个分类器的最简单方法,对应于对学习器进行线性组合:
[y_i = \sum_{j} w_jd_{ji}]
其中,(w_j \geq 0) 且 (\sum_{j} w_j = 1)。这也称为集成和线性意见池。在最简单的情况下,所有学习器权重相等,即简单投票,相当于取平均值。除了加权和,还有其他组合规则,如下表所示:
| 规则 | 融合函数 (f(\cdot)) |
|---|---|
| 求和 | (y_i = \frac{1}{L} \sum_{j=1}^{L} d_{ji}) |
| 加权求和 | (y_i = \sum_{j} w_jd_{ji}, w_j \geq 0, \sum_{j} w_j = 1) |
| 中位数 | (y_i = median_j d_{ji}) |
| 最小值 | (y_i = min_j d_{ji}) |
| 最大值 | (y_i = max_j d_{ji}) |
| 乘积 | (y_i = \prod_{j} d_{ji}) |
这些规则的效果可以通过以下示例说明:
| C1 | C2 | C3 | |
|---|---|---|---|
| (d_1) | 0.2 | 0.5 | 0.3 |
| (d_2) | 0.0 | 0.6 | 0.4 |
| (d_3) | 0.4 | 0.4 | 0.2 |
| 求和 | 0.2 | 0.5 | 0.3 |
| 中位数 | 0.2 | 0.5 | 0.4 |
| 最小值 | 0.0 | 0.4 | 0.2 |
| 最大值 | 0.4 | 0.6 | 0.4 |
| 乘积 | 0.0 | 0.12 | 0.032 |
求和规则最直观,在实践中应用最广泛;中位数规则对异常值更鲁棒;最小值和最大值规则分别是悲观和乐观的;乘积规则下,每个学习器都有否决权。
投票方案可以看作是贝叶斯框架下的近似,权重近似于先验模型概率,模型决策近似于模型条件似然。如果基础学习器是独立的且成功概率大于 1/2,随着投票分类器数量的增加,准确性会提高。同时,投票可以减少方差,但如果学习器正相关,方差和误差会增加,因此使用不同算法和输入特征有助于减少正相关。
5. 纠错输出码
纠错输出码(ECOC)将主要分类任务定义为多个子任务,由基础学习器实现。基础学习器是输出为 -1/+1 的二进制分类器,有一个 (K \times L) 的码矩阵 (W),其 (K) 行是类别的二进制代码,列定义了基础学习器的任务。
例如,对于一个 4 类问题,典型的每类一个判别器设置对应的对角码矩阵为:
[W =
\begin{bmatrix}
+1 & -1 & -1 & -1 \
-1 & +1 & -1 & -1 \
-1 & -1 & +1 & -1 \
-1 & -1 & -1 & +1
\end{bmatrix}
]
但这种情况下,如果一个基础学习器出错,可能会导致错误分类。因此,ECOC 通常使用 (L > K) 的码矩阵,增加代码字之间的汉明距离。例如,类的成对分离方法,此时 (L = K(K - 1)/2)。
ECOC 可以写成投票方案,码矩阵 (W) 的元素 (w_{ij}) 作为投票权重:
[y_i = \sum_{j=1}^{L} w_{ij}d_j]
然后选择 (y_i) 最高的类别。与通用投票模型不同的是,这里的投票权重对于不同类别可以不同,且 (w_{ij}) 为 -1、0 或 +1。
ECOC 的一个问题是,由于码矩阵 (W) 是预先设定的,不能保证列定义的子任务一定简单。有时,二分器树可能比多分类器树更大,使用多层感知机时,反向传播的收敛速度可能较慢。
6. 装袋(Bagging)
装袋是一种投票方法,通过在略微不同的训练集上训练基础学习器来实现多样性。使用自助法(Bootstrap)从给定样本中生成 (L) 个略微不同的样本,即从大小为 (N) 的训练集 (X) 中有放回地随机抽取 (N) 个实例。这样生成的样本相似但又因随机性而略有不同。
装袋使用不稳定的学习算法,即训练集的小变化会导致生成的学习器有很大差异的算法。装袋可以用于分类和回归,在回归中,为了更稳健,可以取中位数而不是平均值。
7. 提升(Boosting)
提升方法主动尝试生成互补的基础学习器,而不是依赖随机性。原始的提升算法(Schapire 1990)将三个弱学习器组合成一个强学习器。弱学习器在二分类问题中的错误概率小于 1/2,强学习器的错误概率可以任意小。
但原始提升方法需要非常大的训练样本。Freund 和 Schapire(1996)提出的 AdaBoost 是一种自适应提升方法,它反复使用相同的训练集,且可以组合任意数量的基础学习器。
AdaBoost.M1 算法的步骤如下:
1. 初始化所有实例对 ((x_t, r_t)) 被抽取用于训练第 1 个基础学习器的概率 (p_{t1} = 1/N)。
2. 对于每个基础学习器 (j = 1, \ldots, L):
- 按照概率 (p_{tj}) 从原始样本中有放回地随机抽取样本 (X_j)。
- 使用 (X_j) 训练 (d_j)。
- 对于每个 ((x_t, r_t)),计算 (y_{tj} \leftarrow d_j(x_t))。
- 计算误差率 (\epsilon_j \leftarrow \sum_{t} p_{tj} \cdot 1(y_{tj} \neq r_t))。
- 如果 (\epsilon_j > 1/2),则 (L \leftarrow j - 1) 并停止。
- 定义 (\beta_j = \epsilon_j / (1 - \epsilon_j))。
- 对于每个 ((x_t, r_t)),如果 (d_j) 正确分类 (x_t),则 (p_{t,j + 1} \leftarrow \beta_j p_{tj});否则 (p_{t,j + 1} \leftarrow p_{tj})。
- 归一化概率:(Z_j \leftarrow \sum_{t} p_{t,j + 1}),(p_{t,j + 1} \leftarrow p_{t,j + 1} / Z_j)。
3. 测试时,给定输入 (x),计算 (d_j(x)),(j = 1, \ldots, L),然后计算类输出:
[y_i = \sum_{j=1}^{L} \left(\log \frac{1}{\beta_j}\right) d_{ji}(x)]
AdaBoost 使后续基础学习器更关注前序学习器分类不准确的实例,因此基础学习器通常选择简单的,以避免过拟合。例如,使用决策树时,通常使用只生长一到两层的决策树桩。AdaBoost 的成功在于它增加了间隔,使训练实例更好地分离,减少了错误的可能性。
8. 专家混合模型
在投票中,权重 (w_j) 在输入空间中是恒定的。而在专家混合模型中,有一个门控网络,其输出是专家的权重。该架构可以看作是一种投票方法,投票取决于输入,不同输入的投票可能不同。
专家混合模型使用竞争学习算法将基础学习器局部化,使每个学习器在输入空间的不同部分成为专家,在其专业区域内权重 (w_j(x)) 接近 1。最终输出是加权平均值:
[y = \sum_{j=1}^{L} w_j(x)d_j]
在专家混合模型中,专家有偏差但负相关。随着训练的进行,偏差减小,专家方差增加,但同时专家在输入空间的不同部分局部化,协方差变得越来越负,从而减少了总方差和误差。
9. 堆叠泛化
堆叠泛化是一种扩展投票的技术,基础学习器输出的组合方式不必是线性的,而是通过一个组合器系统 (f(\cdot|\Phi)) 学习得到,组合器系统本身也是一个学习器,其参数 (\Phi) 也需要训练。
组合器学习基础学习器输出的特定组合对应的正确输出。由于基础学习器可能会记住训练集,因此组合器不能在训练数据上训练,而应在未用于训练基础学习器的数据上训练。
如果组合器是具有约束条件 (w_i \geq 0),(\sum_{j} w_j = 1) 的线性模型,可以通过约束回归找到最优权重,但堆叠中对组合器函数没有限制,它可以是非线性的,例如多层感知机。
与固定规则(如投票)相比,训练的组合规则更灵活,可能偏差更小,但会增加额外参数,引入方差风险,并且需要更多时间和数据进行训练。此外,堆叠前不需要对分类器输出进行归一化。
10. 微调集成
模型组合并非总能保证降低误差,基础学习器应多样化且准确。如果一个基础学习器不能提高准确性,可以将其丢弃;如果两个基础学习器高度相关,只需要一个。因此,从候选基础学习器集合中选择子集不仅可以降低复杂度,还可以提高准确性。
选择基础学习器子集的方法与输入特征选择类似,可以采用向前/增量/增长方法、向后/减量/剪枝方法或浮动方法。组合方案可以是固定规则(如投票)或训练的堆叠器。
此外,还可以通过特征提取的方法,从基础学习器输出的空间映射到一个新的低维、无相关的空间,去除不必要的输入和相关性。例如,Merz(1999)提出的 SCANN 算法使用对应分析对基础分类器的清晰输出进行处理,并使用最近均值分类器进行组合。
11. 级联
级联分类器将基础分类器 (d_j) 按空间或时间复杂度或所使用表示的成本排序,使得 (d_{j + 1}) 比 (d_j) 更昂贵。级联是一种多阶段方法,只有当前序学习器 (d_k)((k < j))不自信时才使用 (d_j)。
每个学习器都有一个置信度 (w_j),当 (w_j > \theta_j)((1/K < \theta_j \leq \theta_{j + 1} < 1) 是置信度阈值)时,认为 (d_j) 对其输出有信心。在分类中,置信度函数通常设置为最高后验概率 (w_j \equiv max_i d_{ji})。
我们使用学习器 (d_j) 的条件是:
[y_i = d_{ji} \text{ if } w_j > \theta_j \text{ and } \forall k < j, w_k < \theta_k]
训练时,从 (j = 1) 开始,训练 (d_j),然后找到验证集中 (d_j) 不自信的所有实例,这些实例构成 (d_{j + 1}) 的训练集。与 AdaBoost 不同的是,这里不仅选择分类错误的实例,还包括后验概率不够高的实例。
级联的归纳偏差是,类可以由少量复杂度递增的“规则”解释,还有一小部分“例外”不能由规则覆盖。规则由简单的基础分类器实现,例外由非参数模型处理。因此,级联介于参数化和非参数化分类的两个极端之间。
12. 总结与应用
组合学习器的思想是将复杂任务分解为多个简单任务,由单独训练的基础学习器处理。这样可以避免一个大型学习器过拟合的问题。然而,组合系统的一个缺点是难以解释,例如,装袋或提升的决策树不如单个决策树可解释,但纠错码在一定程度上允许解释。
在实际应用中,投票是最早且最直观的方法,已经在多个领域得到应用,如人脸识别和手写数字识别。结合不同模态信息在生物识别中也很有用,可以提高准确性并增加伪造的难度。
此外,还有三种组合策略:早期集成、晚期集成和中间集成。早期集成将所有输入连接成一个向量并输入到单个分类器,但理论上不太合适;晚期集成是本文倡导的方法,不同输入分别输入到不同分类器,然后组合输出;中间集成是使用多个核的核算法,组合发生在定义核的基函数空间中。
随着机器学习的发展,组合多个学习器一直是一个热门话题,研究仍在继续。未来,随着贝叶斯统计的发展,超贝叶斯技术可能会变得更加重要。同时,研究也开始关注一个好的集成应该满足的标准以及如何形成一个好的集成。
多学习器组合:提升模型准确性的有效策略
13. 不同组合方法对比
为了更清晰地了解各种多学习器组合方法的特点,我们对前面介绍的几种主要方法进行对比,如下表所示:
| 方法 | 基础学习器生成方式 | 组合方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| 投票 | 可通过不同算法、超参数、输入表示、训练集等生成 | 线性组合(加权或简单平均等) | 简单直观,计算成本低 | 对学习器相关性敏感,可能增加误差 | 学习器相对独立且准确性较高的场景 |
| 纠错输出码(ECOC) | 基于码矩阵定义子任务,用二进制分类器作为基础学习器 | 加权投票 | 可将多分类问题转化为多个二分类问题,增加纠错能力 | 码矩阵预先设定,子任务可能不简单 | 多分类问题,希望提高分类准确性和纠错能力 |
| 装袋(Bagging) | 用自助法生成不同训练集训练基础学习器 | 平均或中位数(回归) | 减少方差,适用于不稳定算法 | 可能增加计算复杂度 | 不稳定学习算法,如决策树、多层感知机 |
| 提升(Boosting) | 后续学习器关注前序学习器错误实例 | 加权投票 | 主动生成互补学习器,可提高准确性 | 需要足够训练数据,基础学习器需合适 | 数据量充足,希望提高模型准确性 |
| 专家混合模型 | 竞争学习算法将学习器局部化 | 加权平均,权重取决于输入 | 学习器负相关,可减少方差 | 专家有偏差,可能过拟合 | 输入空间可划分成不同区域,学习器可局部化 |
| 堆叠泛化 | 不同学习算法生成基础学习器 | 组合器系统学习组合方式 | 组合方式灵活,可减少偏差 | 增加额外参数和训练成本 | 希望灵活组合基础学习器输出 |
| 级联 | 按复杂度排序基础学习器,后续学习器处理前序不自信实例 | 依次判断使用学习器 | 减少整体复杂度,适用于复杂问题 | 需合理设置置信度阈值 | 问题空间复杂,希望平衡复杂度和准确性 |
通过这个对比表,我们可以根据具体的问题和数据特点选择合适的多学习器组合方法。
14. 多学习器组合的流程示例
下面我们用 mermaid 格式的流程图来展示一个多学习器组合的通用流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(数据准备):::process
B --> C(生成基础学习器):::process
C --> D{选择组合方法}:::decision
D -->|投票| E(投票组合):::process
D -->|ECOC| F(ECOC组合):::process
D -->|Bagging| G(Bagging组合):::process
D -->|Boosting| H(Boosting组合):::process
D -->|专家混合模型| I(专家混合模型组合):::process
D -->|堆叠泛化| J(堆叠泛化组合):::process
D -->|级联| K(级联组合):::process
E --> L(模型评估):::process
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
L --> M{是否满足要求}:::decision
M -->|是| N([结束]):::startend
M -->|否| C(生成基础学习器):::process
这个流程图展示了多学习器组合的一般步骤:
1. 数据准备:收集和预处理数据。
2. 生成基础学习器:可以使用不同的方法生成多样化的基础学习器。
3. 选择组合方法:根据问题和数据特点选择合适的组合方法。
4. 进行组合:按照选择的组合方法将基础学习器组合起来。
5. 模型评估:评估组合模型的性能。
6. 判断是否满足要求:如果满足要求,则结束流程;否则,返回生成基础学习器步骤,进行调整和优化。
15. 实际应用案例分析
为了更好地理解多学习器组合的实际应用效果,我们来看几个具体的案例。
15.1 手写数字识别
在手写数字识别任务中,我们可以使用多种基础学习器,如多层感知机、决策树等。通过装袋方法,我们可以从原始训练集中生成多个不同的训练子集,分别训练这些基础学习器,然后在测试时进行投票。
例如,Alimoglu 和 Alpaydin 在 1997 年的研究中,使用了两种不同的信息源:手写数字的时间笔移动数据和静态二维位图图像。单独使用这两种信息源的分类器误差约为 5%,但将它们组合后,误差率降低到了 3%。这表明多学习器组合可以有效提高手写数字识别的准确性。
15.2 生物识别
在生物识别领域,如人脸识别、指纹识别等,通常会使用不同的模态信息,如面部图像、指纹图像、虹膜图像等。通过将这些不同模态信息的分类器输出进行组合,可以提高识别的准确性和安全性。
例如,在一个人脸识别系统中,我们可以分别使用基于面部特征的分类器和基于面部纹理的分类器,然后使用投票或堆叠泛化的方法将它们的输出组合起来。这样不仅可以提高识别的准确性,还可以增加伪造的难度,因为攻击者需要同时伪造多种模态信息。
16. 注意事项与技巧
在进行多学习器组合时,还需要注意以下几点:
- 基础学习器的多样性和准确性 :基础学习器应既多样化又有一定的准确性。可以通过不同的算法、超参数、输入表示和训练集来生成多样化的学习器,但也要确保它们在各自的专业领域有较好的表现。
- 学习器相关性 :学习器之间的正相关性会增加方差和误差,因此应尽量减少学习器之间的正相关性。可以使用不同的算法和输入特征来实现这一点。
- 组合方法的选择 :根据问题的特点和数据的情况选择合适的组合方法。例如,对于简单问题,投票可能就足够了;对于复杂问题,可能需要使用更复杂的组合方法,如堆叠泛化或级联。
- 训练数据的使用 :确保有足够的训练数据,特别是在使用提升方法时。同时,组合器系统(如堆叠泛化中的组合器)应在未用于训练基础学习器的数据上训练,以避免过拟合。
- 模型复杂度 :组合模型会增加训练和测试的时间与空间复杂度,因此需要在准确性和复杂度之间进行平衡。可以通过选择合适的基础学习器和组合方法,以及进行微调集成来降低复杂度。
17. 未来发展趋势
随着机器学习技术的不断发展,多学习器组合领域也呈现出一些未来的发展趋势:
- 超贝叶斯技术 :如前面提到的,随着贝叶斯统计的发展,超贝叶斯技术可能会在多学习器组合中发挥更重要的作用。通过对模型参数的先验分布进行更精细的建模,可以更好地整合多个学习器的信息。
- 自适应组合方法 :未来可能会出现更多自适应的组合方法,能够根据数据和问题的动态变化自动调整基础学习器的生成和组合方式。
- 与深度学习的结合 :深度学习在许多领域取得了巨大的成功,将多学习器组合与深度学习相结合,可以进一步提高模型的性能。例如,可以使用多个不同结构的深度学习模型作为基础学习器,然后进行组合。
- 可解释性研究 :由于多学习器组合系统的可解释性较差,未来的研究可能会更加关注如何提高组合,使得模型既具有较高的准确性,又能让人们理解其决策过程。
多学习器组合是一种强大的技术,可以有效提高模型的准确性和鲁棒性。通过合理选择基础学习器和组合方法,以及注意一些关键的技巧和未来的发展趋势,我们可以在实际应用中取得更好的效果。希望本文的介绍能够帮助读者更好地理解和应用多学习器组合技术。
多学习器组合提升模型准确性
超级会员免费看
6万+

被折叠的 条评论
为什么被折叠?



