机器学习 | 集成算法
集成算法(Emseble Learning)是构建多个学习器,然后通过一定策略结合把它们来完成学习任务的,常常可以获得比单一学习显著优越的学习器。它本身不是一个单独的机器学习算法,而是通过数据上构建并结合多个机器学习器来完成学习任务。
对于训练集数据,通过训练若干个个体学习器,通过一定的结合策略,可以最终形成一个强学习器。
周志华的书上说,个体学习器的"准确性"和"多样性"本身就存在冲突,一般准确性很高之后,要增加多样性就需牺牲准确性。事实上,如何产生并结合‘好而不同’的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生产方式,目前的集成学习方法大致可分为两大类,即个体学习器间存在强依赖关系、必须串行生产的序列化方法,代表是Boosting。以及个体间不存在强依赖关系、可同时生产的并行化方法,代表是Bagging,和随机森林。
集成算法种类
多个模型集成在⼀起的模型叫做集成评估器(ensemble estimator),组成集成评估器的每个模型都叫做基评估器(base estimator)。通常来说,有三类集成算法:装袋法(Bagging)、提升法(Boosting)和堆叠法(stacking)。
装袋法 (Bagging)
⼜称⾃主聚集(bootstrap aggregating),是⼀种根据均匀概率分布从数据集中重复抽样(有放回的)的技术。每个新数据集和原始数据集的⼤⼩相等。由于新数据集中的每个样本都是从原始数据集中有放回的随机抽样出来的,所以新数据集中可能有重复的值,⽽原始数据集中的某些样本可能根本就没出现在新数据集中。
Bagging基本流程
对训练样本进行有放回自助采样,采出 个含 铬训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
输入:训练集;基学习算法,训练轮数
过程:
1:
2: 是自助采样产生的分布
3:
输出:
核⼼思想是构建多个相互独⽴的评估器 ,然后对其预测进⾏平均或多数表决原则来决定集成评估器的结果。装袋法的代表模型就是随机森林。
有放回的随机抽样
⾃主采样法(Bootstap sampling),对于m个样本的原始数据集,每次随机选取⼀个样本放⼊采样集,然后把这个样本重新放回原数据集中,再进⾏下⼀个样本的随机抽样,直到⼀个采样集中的数量达到m,这样⼀个采样集就构建好了,然后重复这个过程,⽣成n个这样的采样集。也就是说,最后形成的采样集,每个采样集中的样本可能是重复的,也可能原数据集中的某些样本根本就没抽到,并且每个采样集中的样本分布可能都不⼀样。
提升法(Boosting)
其基评估器是相关的 ,是按顺序⼀⼀构建的。其核⼼思想是结合弱评估器的⼒量⼀次次对难以评估的样本进⾏预测,从⽽构成⼀个强评估器。提升法的代表模型Adaboost和梯度提升树GBDT。
工作机制: 先从最初训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复,直至学习器数目到达事先制定的值T,最终将这个T 个基学习器进行加权结合。
「基学习器 —> 根据表现调整样本权重 —> 训练学习器 —>...—>对T个学习器加权结合」
Boosting最著名的代表是Adaboosting
Adaboosting算法
输入:训练集;基学习算法,训练轮数
过程:
1: 初始化样本权值分布
2:
3: 基于分布 从数据集 中训练出分类器。
4: 估计的分类误差率。
5:
6: 确定分类器 的权重。
7:更新样本分布,其中是规范化因子,以确保是一个分布
8: 输出:
Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过"重赋权法"(re-weighting)实施,即在训练过程中的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。在每一轮都要检查当前生成的基学习器是否满足基本条件。(上面算法过程第5步,检查当前基分类器是否是比随机猜测好),一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。在这种情形下,初始设置的学习轮数T也许远未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。
对于无法接受样本带权重的基学习算法,则可通过"重采样法"(re-sampling)来处理,即每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得到样本集对基学习器进行训练。重采样方法可以获得"重启"机会避免训练过早停止,即在抛弃不满足条件的当前学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的T轮完成。
组合策略
平均法
对于数值类的回归预测问题,通常使⽤的结合策略是平均法,也就是说,对于若⼲个弱学习器的输出进⾏平均得到最终的预测输出。
假设我们最终得到的个弱分类器为,最简单的平均是算术平均:
如果每个弱分类器有⼀个权重,则
投票法
对于分类问题的预测通常使⽤的是投票法。假设我预测类别是,对于任意⼀个预测样本,个弱学习器的预测结果分别是。
相对多数投票法
即少数服从多数,最简单的投票方法。个弱学习器的对样本的预测结果中,数量最多的类别为最终的分类类别。如果不⽌⼀个类别获得最⾼票,则随机选择⼀个做最终类别。
绝对多数投票法
即要票过半数,稍微复杂的投票法。在相对多数投票法的基础上,不光要求获得最⾼票,还要求票过半数。否则会拒绝预测。
加权投票法
更加复杂的投票法,和加权平均法⼀样,每个弱学习器的分类票数要乘以⼀个权重,最终将各个类别的加权票数求和,最⼤的值对应的类别为最终类别。
学习法
前两种⽅法都是对弱学习器的结果做平均或者投票,相对⽐较简单,但是可能学习误差较⼤,于是就有了学习法这种⽅法。
对于学习法,代表⽅法是stacking,当使⽤stacking的结合策略时, 不是对弱学习器的结果做简单的逻辑处理,⽽是再加上⼀层学习器,也就是说,我们将训练集弱学习器的学习结果作为输⼊,将训练集的输出作为输出,重新训练⼀个学习器来得到最终结果。
在这种情况下,将弱学习器称为初级学习器,将⽤于结合的学习器称为次级学习器。对于测试集,⾸先⽤初级学习器预测⼀次,得到次级学习器的输⼊样本,再⽤次级学习器预测⼀次,得到最终的预测结果。
Bagging VS Boosting
样本选择上
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独⽴的。 Boosting:每⼀轮的训练集不变,只是训练集中每个样例在分类器中的权重发⽣变化,⽽权值是根据上⼀轮的分类结果进⾏调整。
样例权重
Bagging:使⽤均匀取样,每个样例的权重相等。 Boosting:根据错误率不断调整样例的权重,错误率越⼤则权重越⼤,因此Boosting的分类精度要优于Bagging。
预测函数
Bagging:所有预测函数的权重相等。 Boosting:每个弱分类器都有相应的权重,对于分类误差⼩的分类器会有更⼤的权重。
并行计算
Bagging:各个预测函数可以并⾏⽣成,对于极为耗时的学习⽅法,Bagging可通过并⾏训练节省⼤量时间开销。 Boosting:各个预测函数只能顺序⽣成,因为后⼀个模型参数需要前⼀轮模型的结果。
过拟合和欠拟合
单个评估器存在过拟合问题的时候,Bagging能在⼀定程度上解决过拟合问题,⽽Boosting可能会加剧过拟合的问题。 单个评估其学习能⼒较弱的时候,Bagging⽆法提升模型表现,Boosting有⼀定可能提升模型的表现。
算法目标
Bagging:降低⽅差,提⾼模型整体的稳定性。(方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。)
Boosting:降低偏差,提⾼模型整体的精确度。(偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力。)
Bagging和Boosting都可以有效地提⾼分类的准确性。在⼤多数数据集中,Boosting的准确性要⾼于Bagging。
sklearn中的集成算法模块ensemble
类 | 功能 |
---|---|
ensemble.AdaBoostClassifier | AdaBoost分类 |
ensemble.AdaBoostRegressor | Adaboost回归 |
ensemble.BaggingClassifier | 装袋分类器 |
ensemble.BaggingRegressor | 装袋回归器 |
ensemble.ExtraTreesClassifier | Extra-trees分类(超树,极端随机树) |
ensemble.ExtraTreesRegressor | Extra-trees回归 |
ensemble.GradientBoostingClassifier | 梯度提升分类 |
ensemble.GradientBoostingRegressor | 梯度提升回归 |
ensemble.IsolationForest | 隔离森林 |
ensemble.RandomForestClassifier | 随机森林分类 |
ensemble.RandomForestRegressor | 随机森林回归 |
ensemble.RandomTreesEmbedding | 完全随机树的集成 |
ensemble.votingClassifiler | 用于不合适估算器的软投票/多数规则分类器 |