概述
集成学习(Ensemble Learning)是将多个弱机器学习器结合,构建一个有较强性能的机器学习器的方法。 构成集成学习的弱学习器称为基学习器、基估计器。 根据集成学习的各基估计器类型是否相同,可以分为同质和异质两种方法。 集成学习常用的方法有Bagging,、随机森林、AdaBoost、梯度树提升(Gradient Tree Boosting)、XGBoost等方法。
分类
根据每个基学习器是否同属一个种类。可以将集成学习分为同质和异质两种类型。
同质集成学习
同质表示各个基学习器都属于同一个种类,比如都是决策树学习器,或者同为神经网络学习器。 目前来说,同质个体学习器的应用最为广泛。一般的集成学习均指同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。 同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类。 第一种是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法有Bagging和随机森林(Random Forest)系列算法。 第二类是个体学习器之间存在强依赖关系,一般来说当前的个体学习器的输入要依赖于上一个个体学习器的输出,一系列个体学习器基本都需要串行生成,代表算法是Boosting系列算法。
异质集成学习
异质指是所有的个体学习器不全是一个种类的。例如对分类问题,对训练集采用支持向量机个体学习器、逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
增强数据多样性的方法
数据样本
可以采用输入样本扰动、输入特征扰动、输出表示扰动等方法来增加输入数据样本多样性。
输入样本扰动
根据原始数据产生多个不同种类的数据子集,然后利用不同的数据子集训练个体学习器。
- 重采样法,有放回采样得到固定样本容量的数据子集;
- 序列采样法,根据前一轮的学习结果进行采样;
- 混合采样方法。
输入特征扰动
从初始特征集中抽取出若干特征性子集,再基于每个特征子集训练基学习器。 不仅能产生差异性大的个体,还会因属性数的减少而大幅节省计算时间。
- 随机子空间算法
- 随机森林算法
- 特征及拆分:将原始特征集拆分为多个不相交的特征子集分别训练个体学习器。在高维特征的学习任务重,特征集拆分具有良好的表现效果。
输出参数扰动
对输出表示进行操纵以增强多样性,可对训练样本的类标进行变动.
- 翻转法,随机改变一些训练样本的标记;
- 输出调制法,将分类输出转化为回归输出后构建个体学习器;
- 将原始任务拆解为多个可同时求解的子任务,或将多分类拆解为一系列的二分类问题。
算法参数
使用不同的参数集产生不同的个体学习器。 即使每个个体学习器都使用相同的训练集,由于使用的参数不同,输出会随参数改变而变化。 example:在神经网络中,通过改变网络中的节点数,或者将不同的初始权重分配给网络,或者使用不同的网络拓扑结构来提高网络多样性。
模型结构多样性
由个体学习器的内部结构或外部结构的不同所产生。 例如在神经网络集成系统中添加一些决策树通常会提高整体的性能。
结合策略
弱学习器常用
平均法
将各个个体学习群的输出进行平均或加权平均,作为集成学习的结果。适用大规模数据集的集成,学习的权重较多,加权平均法易导致过拟合
投票法
将各个个体学习器的输出进行投票,将投票结果作为集成学习的输出。
- 绝对多数投票法(超过半数)
- 相对多数投票法
- 加权投票法
学习法
将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
常用方法
Bootstrap Aggregating(Bagging)–并行
算法步骤:给定一个大小为n的训练集D,Bagging算法从中均匀、有放回地(即使用自助抽样法)选出m个大小为n’的子集Di,作为新的训练集。在这m个训练集上使用分类、回归等算法,则可得到m个模型,再通过取平均值、取多数票等方法,即可得到Bagging的结果。
如果抽取的数据集的随机子集是特征的随机子集,叫做随机子空间 (Random Subspaces). 如果基估计器构建在对于样本和特征抽取的子集之上时,叫做随机补丁(Random Patches).
Bagging方法在原始训练集的随机子集上构建一类黑盒估计器的多个实例,然后把这些估计器的预测结果结合起来形成最终的预测结果。 该方法通过在构建模型的过程中引入随机性,来减少基估计器的方差。 在多数情况下,Bagging方法提供了一种非常简单的方式来对单一模型进行改进,而无需修改背后的算法。 Bagging方法可以减小过拟合,通常在强分类器和复杂模型上使用时表现的很好。 下边介绍一种对分类器权重进行学习的方法:
Stacking
Boosting–串行
Boosting算法是一类将弱学习器(分类正确率略大于或小于50%,否则可能导致分类器权重变成负数如AdaBoost)提升为强学习器的集成学习方法,通过改变训练样本的权值,学习多个分类器,并将这些分类器进行线性组合,提高泛化性能。 大多数Boost方法会改变数据的概率分布(数据权值),具体而言就是提高前一个学习器错分类的数据的权值,降低正确分类数据的权值,使得被错误分类的数据在下轮的训练中更受关注 (串行); 然后根据不同分布调用弱学习算法得到一系列弱学习器实现,再将这些学习器线性组合。
强化之好处
AdaBoost–数据挖掘十大算法之一
说明:
- 学习过程中强调被分类错误的数据:
- 提高分类器分类错误的样本数据的权值
- 提高误差率小的弱分类器的权值(加权多数表决)
- 误差率的解释:由于数据的样本有权重,所以在在计算模型的分类误差率时要把分类错误的样本数据占的权值来进行计数。即训练器上的分类误差率等于各个分类错误样本的权值之和。
- 分类错误的样本权值被扩大e^{2alpha_t}=frac{1-epsilon_t}{epsilon_t}(分类器分类正确的几率odds).
- H(x)的自变量的正负确定输出的类的类型,绝对值决定分类的置信度
- 每次学习一个基本分类器,同时根据基分类器的错误率给定该分类器的权重,再根据该分类器的分类结果更新数据集的权值分布。
训练误差分析
AdaBoost最基本的性质是它能在学习过程中不断减少训练误差。
损失函数的整合更加简洁,保证Z_{t 1}<1,就能保证学习过程中能降低损失函数。
取等条件即是我们更新权重的方法
另一个角度看AdaBoost(一个有内涵的机器学习方式)
AdaBoost算法可以看成是加法模型(基分类器的线性组合)、损失函数为指数函数(exp(−yf(x))、学习算法为前向分步算法时的二类分类模型。
ReginBoost
AdaBoost方法固定权重意味着输入样本并不会改变基学习器的权重,这样的话有的时候分类可能是有问题的,下边介绍一种随着输入值改变的动态权重算法
两种分类器,一种划分种类,一种用来鉴别分类的可信度(以输入点与临近五个样本点之间的距离来衡量,KNN) 训练误差可能不会很高,但测试误差会相对更低。
树提升算法(boosting tree)
提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。提升方法实际采用加法模型和前向分步算法。以决策树为基函数的提升方法叫做提升树。
Model
f_M(x)=sum_{m=1}^{M}T(x;Theta_m)
T(x;Θm)表示决策树
考虑到分类决策树的强化算法与AdaBoost算法类似,下面侧重讨论回归问题的提升树
向前步进算法
Gradient Tree Boosting
对于一般的损失函数,使用向前步进算法优化决策树并不容易。于是通过优化损失函数的极值求法来进行优化:
XGBoost
XGBoost是一个优化的分布式梯度增强库,设计为高效、灵活和可移植。在梯度增强框架下实现了机器学习算法。XGBoost提供了一个并行的树增强,可以快速、准确地解决许多数据科学问题。 XGBoost也使用决策树作为基估计器。适用于大数据集的学习。 但在XGBoost中,每棵树是一个一个往里面加的,每加一个都是希望效果能够提升。 一开始树是0,然后往里面加树,相当于多了一个函数,再加第二棵树,相当于又多了一个函数,以此类推。 要保证加入新的函数能够提升整体表达效果。提升表达效果的意思就是说加上新的树之后,目标函数(就是损失)的值会下降。 通过在目标函数加上一个惩罚项来减少叶子节点的个数以防止过拟合。 优化目标函数: