【集成学习】
在统计学和机器学习中，集成学习（Ensemble learning）方法使用多种学习算法来获得比单独使用任何单独的学习算法更好的预测性能。不像统计力学中的系综通常是无限的，机器学习集合仅由一组具体的有限的可替代模型组成，但通常允许在这些可替代方案中存在更灵活的结构。
== 概述 ==
监督学习算法通常被描述为执行搜索假设空间的任务以找到合适的假设，该假设将对特定问题做出良好预测。即使假设空间包含非常适合特定问题的假设，也可能很难找到一个很好的假设。集成学习结合多个假设，形成一个（希望）更好的假设。术语集成通常保留用于使用相同基础学习器生成多个假设的方法。多分类器系统的更广泛术语还包括由非相同基础学习器得到的假设的结合。这种方法和现象也被另一个术语“群智”所描述，该术语来自多个DREAM生物医学数据科学挑战。
评估集成学习的预测通常需要比评估单个模型的预测更多的计算，因此集成可以被认为是通过执行大量额外计算来补偿差的学习算法的方式。诸如决策树之类的快速算法通常用于集合方法（如随机森林），尽管较慢的算法也可以从集成方法中受益。
通过类比，集成技术也已用于无监督学习场景中，如共识聚类或异常检测。
== 集成理论 ==
集成学习本身是一种监督学习算法，因为它可以被训练然后用于进行预测。因此，训练后的集成模型代表了一个假设，但这个假设不一定被包含在构建它的模型的假设空间内。因此，可以证明集成学习在它们可以表示的功能方面具有更大的灵活性。理论上，这种灵活性使他们能够比单一模型更多地过拟合训练数据，但在实践中，一些集成算法（如Bagging算法）倾向于减少对训练数据过拟合相关的问题。
根据经验，当模型之间存在显著差异时，集成往往会产生更好的结果。因此，许多集成方法试图促进它们组合的模型之间的多样性。尽管可能不是直观的，更随机的算法（如随机决策树）可用于产生比非常有意识的算法（如熵减少决策树）更强大的集成模型。然而，使用各种强大的学习算法已被证明是比使用试图愚弄模型以促进多样性的技术更有效。
== 集成模型大小 ==
虽然集成中的组成分类器的数量对预测的准确性具有很大影响，但是解决该问题的研究数量有限。先验地确定集成模型的大小以及大数据流的体积和速度使得这对于在线集成分类器来说更加重要，其中大多数统计测试被用于确定适当数量的组件。最近，理论框架表明对于集成模型存在理想数量的分类器，具有多于或少于该数量的分类器将使精度变差，这被称为“集成构建效果递减规律”。理论框架表明，使用与类标签数相同的独立分类器可以达到最高的准确度。
== 常见的集成类型 ==
=== 贝叶斯最优分类器 ===
贝叶斯最优分类器是一种分类技术，它是假设空间中所有假设的集合。平均而言，没有其他集成模型可以超越它。朴素贝叶斯最优分类器假定数据在类上有条件地独立并使计算更可行，如果该假设为真，则对每个假设进行投票，该投票与从系统采样训练数据集的可能性成比例。为了促进有限大小的训练数据，每个假设的投票也乘以该假设的先验概率。贝叶斯最优分类器可以用以下等式表示：
其中 是预测标签， 是所有可能类的集合， 是假设空间， 是概率， 是训练数据。 作为集成，贝叶斯最优分类器表示不一定在中的假设。然而，由贝叶斯最优分类器表示的假设是集合空间中的最优假设（所有可能的集合的空间仅由中的假设组成）。
这个公式可以用贝叶斯定理重新表述，贝叶斯定理表明后验与先验的可能性成正比：
因此，
=== Bootstrap聚合（Bagging） ===
Bootstrap聚合（Bootstrap Aggregating，Bagging）使集成模型中的每个模型在投票时具有相同的权重。为了降低不稳定过程如树的方差，Bagging对B个(比如说，B使用与类标签数相同的数量)bootstrap datasets上的模型求平均，从而降低其方差并导致预测性能的改善。例如，随机森林算法将随机决策树与Bagging相结合，以实现更高的分类准确度。
=== Boosting ===
Boosting通过在训练新模型实例时更注重先前模型错误分类的实例来增量构建集成模型。在某些情况下，Boosting已被证明比Bagging可以得到更好的准确率，不过它也更倾向于对训练数据过拟合。目前比较常见的增强实现有AdaBoost等算法。
=== 贝叶斯参数平均 ===
贝叶斯参数平均（Bayesian Parameter Averaging，BPA）是一种集成方法，它试图通过对假设空间中的假设进行抽样来近似贝叶斯最优分类器，并使用贝叶斯定律将它们组合起来。与贝叶斯最优分类器不同，贝叶斯模型平均（Bayesian Model Averaging，BMA）可以实际实现。通常使用诸如MCMC的蒙特卡罗方法对假设进行采样。例如，可以使用吉布斯采样来绘制代表分布的假设。已经证明，在某些情况下，当以这种方式绘制假设并根据贝叶斯定律求平均时，该算法具有预期误差，该误差被限制为贝叶斯最优分类器的预期误差的两倍。尽管这种技术理论正确，但早期工作中的实验结果表明，与简单的集成方法如Bagging相比，该方法促进了过拟合并且表现更差； however, these conclusions appear to be based on a misunderstanding of the purpose of Bayesian model averaging vs. model combination.然而，这些结论似乎是基于对目的的误解贝叶斯模型平均与模型组合。此外，BMA的理论和实践取得了相当大的进展，最近的严格证明证明了BMA在高维设置中变量选择和估计的准确性，并提供了实验证据，强调了BMA中的稀疏执行先验在缓解过拟合方面的作用。
=== 贝叶斯模型组合 ===
贝叶斯模型组合（BMC）是对贝叶斯模型平均（BMA）的算法校正。 它不是单独对整体中的每个模型进行采样，而是从可能的集合空间中进行采样（模型权重从具有均匀参数的Dirichlet分布中随机抽取） 这种修改克服了BMA趋向于将所有权重赋予单个模型的趋势 尽管BMC在计算上比BMA更昂贵，但它往往会产生显着更好的结果 BMC的结果显示平均值优于（具有统计显着性）BMA和Bagging。
使用贝叶斯定律来计算模型权重需要计算给定每个模型的数据的概率，通常集成中的模型都不是生成训练数据的分布，因此对于该项，它们都正确地接收到接近于零的值。如果集成足够大以对整个模型空间进行采样，这将很有效，但这种情况很少发生。因此，训练数据中的每个模式将使集成权重朝向最接近训练数据分布的集合中的模型移动，这实质上减少了用于进行模型选择的不必要的复杂方法。
集成的可能权重可以看作是躺在单面上，在单形的每个顶点处，所有权重都被赋予集成中的单个模型。BMA会聚到最接近训练数据分布的顶点。相比之下，BMC汇聚到这种分布投射到单纯形态的点上。换句话说，它不是选择最接近生成分布的一个模型，而是寻找最接近生成分布的模型的组合。
BMA的结果通常可以通过使用交叉验证从一系列模型中选择最佳模型来近似。同样地，可以通过使用交叉验证来近似来自BMC的结果，以从可能的权重的随机采样中选择最佳的集成组合。
=== 桶模型 ===
“桶模型”（英语：bucket of models）是一种使用模型选择算法为每个问题选择最佳模型的集成方法。当仅使用一个问题进行测试时，一组模型不会产生比集成中的最佳模型更好的结果，但是当针对许多问题进行评估时，它通常会产生比集成中的任何模型更好的结果。
最常见的方法用于模型的选择是交叉验证。它用以下伪代码描述：
For each model m in the bucket:
Do c times: (where 'c' is some constant)
Randomly divide the training dataset into two datasets: A, and B.
Train m with A
Test m with B
Select the model that obtains the highest average score
交叉验证选择可以概括为：“使用训练集尝试所有选择，并选择最有效的方法”。
门控是交叉验证选择的一般化。它涉及训练另一种学习模型，以确定桶中哪些模型最适合解决问题。通常，感知器被应用于门控模型。它可用于选择“最佳”模型，或者可用于为桶中每个模型的预测提供线性权重。
当使用具有大量问题的桶模型时，可能希望避免需要花费很长时间训练的一些模型。地标学习是一种寻求解决这一问题的元学习方法，它涉及仅训练桶中的快速（但不精确）算法，然后使用这些算法的性能来帮助确定哪种慢（但准确）算法最有可能做得最好。
=== Stacking ===
堆叠（英语：Stacking）（有时称为堆叠泛化）涉及训练学习算法以组合其他几种学习算法的预测。首先，使用可用数据训练所有其他算法，然后训练组合器算法以使用其他算法的所有预测作为附加输入进行最终预测。如果使用任意组合器算法，那么堆叠理论上可以表示本文中描述的任何集合技术，但实际上，通常用逻辑回归模型作为组合器。
Stacking通常比任何一个经过训练的模型都能产生更好的性能，它已成功用于监督学习任务（如回归、 分类和距离学习 ）和无监督学习（如密度估计）。 Stacking也被用于评估Bagging的错误率。 据报道，它的表现超过了贝叶斯模型的平均值。在Netflix竞赛中两个表现最好的人使用混合方法（英语：Blending），这可以被认为是一种Stacking形式。
== 实现库 ==
* R：至少有三个软件包提供贝叶斯模型平均工具，包括BMS（贝叶斯模型选择）包、BAS（贝叶斯自适应采样的首字母缩写）包、和BMA包。H2O包提供了许多机器学习模型，包括一个集成模型，也可以使用Spark进行训练。
* Python：Scikit-learn，一个用于Python机器学习的软件包，提供用于集成学习的软件包，包括用于Bagging和平均方法的软件包。
* MATLAB：分类集成在统计和机器学习工具箱中实现。
== 集成学习应用 ==
近年来，由于计算能力不断提高，允许在合理的时间范围内训练大型集成模型，其应用数量也越来越多。集成分类器的一些应用包括：
=== 遥感 ===
==== 土地覆盖测绘 ====
土地覆盖测绘是地球观测卫星传感器的主要应用之一，利用遥感和地理空间数据识别位于目标区域表面的材料和物体。一般来说，目标材料的类别包括道路、建筑物、河流、湖泊和植被。基于人工神经网络、核主成分分析（KPCA）、Boosting决策树、随机森林和自动设计多分类器系统等不同的集成学习方法可以有效识别土地覆盖物。
==== 变化的检测 ====
变化检测是一种图像分析问题，识别土地覆盖随时间变化的地方。变化检测广泛应用于城市发展、森林和植被动态、土地利用和灾害监测等领域。集成分类器在变化检测中的最早应用是通过多数投票、贝叶斯平均和最大后验概率设计的。
=== 计算机安全 ===
==== 分布式拒绝服务 ====
分布式拒绝服务攻击是互联网服务提供商可能遭受的最具威胁性的网络攻击之一。通过组合单个分类器的输出，集成分类器减少了检测和区分此类攻击与Slashdot效应的总误差。
==== 恶意软件检测 ====
使用机器学习技术对计算机病毒、计算机蠕虫、特洛伊木马、勒索软件和间谍软件等恶意软件代码进行分类，其灵感来自文本分类问题。 集成学习系统在这方面已经显示出适当的功效。
==== 入侵检测 ====
入侵检测系统监控计算机网络或计算机系统，以识别入侵者代码，如异常检测过程。集成学习成功地帮助这种监控系统减少了它们的总误差。
=== 人脸识别 ===
人脸识别最近已经成为最受欢迎的模式识别研究领域之一，它通过他/她的数字图像来处理人的识别或验证。
基于Gabor Fisher分类器和独立分量分析预处理技术的分层集成是该领域中最早使用的一些集成方法。
=== 情感识别 ===
语音识别主要基于深度学习，因为谷歌、微软和IBM这一领域的大多数业内人士都表示，他们的语音识别的核心技术是基于这种方法。基于语音与集成学习的情感识别也可以有令人满意的表现。
它也被成功用于面部情绪识别。
=== 欺诈检测 ===
欺诈检测涉及银行欺诈的识别，例如洗钱、信用卡欺诈和电信欺诈，它们具有广泛的机器学习研究和应用领域。由于集成学习提高了正常行为建模的稳健性，因此有人提出将其作为检测银行和信用卡系统中此类欺诈案件和活动的有效技术。
=== 金融决策 ===
预测业务失败的准确性是财务决策中非常关键的问题。因此，不同的集成分类器被提出用于预测金融危机和财务困境。此外，在基于交易的操纵问题中，交易者试图通过买卖活动来操纵股票价格，集成分类器需要分析股票市场数据的变化并检测股票价格操纵的可疑症状。
=== 医学 ===
集成分类器已成功应用于神经科学、蛋白质组学和医学诊断，例如基于MRI数据集的神经认知障碍（即阿尔茨海默氏症或肌强直性营养不良）检测。
== 参考文献 ==