集成学习
1. 概述
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。其一般结构为:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生。
若集成中只包含同种类型的个体学习器,称为同质集成(homogeneous ensemble),个体学习器亦称“基学习器”(base learner);若集成中包含不同类型的个体学习器,则称为异质集成(heterogenous ensemble),个体学习器常称为“组件学习器”(component learner)。
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,这对“弱学习器”(weak learner)尤为明显,因此集成学习很多理论都是针对若学习器进行的,但实践中常常选择较强的学习器。
要获得好的集成效果,个体学习器应“好而不同”,即同时具备“准确性”和“多样性”,事实上这两者本身存在冲突。于是,集成学习研究的核心,如何产生并结合“好而不同”的个体学习器。
目前集成学习的方法可分为:Boosting、Bagging、Stacking和Blending。
2. Boosting
工作机制:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至达到终止条件,最后将得到的个基学习器进行加权结合。
从中可知,对提升方法来说,有两个问题需要回答:
- 在每一轮如何改变训练数据的权值或概率分布
- 如何将弱分类器组合成一个强分类器
2.1 AdaBoost
针对上述问题,AdaBoost的做法是:
- 提高那些被前一轮弱分类器错误分类样本的权值,使其在后续分类中受到更大关注
- 关于弱分类器的组合,采用加权多数表决的方法。即加大分类误差率小的弱分类器的权值。
2.1.1. AdaBoost算法流程:
输入:训练数据集,其中,; 弱学习算法;
输出:最终分类器
初始化训练数据的权值分布
对
a. 使用具有权值分布的训练数据集学习,得到基本学习器
b. 计算在训练数据集上的分类误差率
c. 计算的系数
其中的对数是自然对数
d. 更新训练数据集的权值分布
其中,是规范化因子
它使成为一个概率分布构建基本分类器的线性组合
得到最终分类器
2.1.2. 加法模型
加法模型(additive model):
其中,为基函数,为基函数的参数,为基函数的系数
2.1.3. 前向分步算法
输入:训练数据;损失函数;基函数集;
输出:加法模型
- 初始化
- 对
- 极小化损失函数
得到参数 - 得到加法模型
这样,前向分步算法将同时求解从到所有参数的优化问题简化为逐次求解各个的优化问题。
2.2 GBDT(Gradient Boosting Decision Tree)
提升树(boosting tree)是以分类树或回归树为基本分类器的提升方法,被认为是统计学习中性能最好的方法之一。
提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树。提升树模型可以表示为决策树的加法模型:
其中,表示决策树;为决策树的参数;为树的个数
2.2.1. 提升树算法
提升树算法采用前向分步算法。首先确定初始提升树,第步的模型是
其中,为当前模型,通过经验风险极小化确定下一棵决策树的参数
输入:训练数据集,,;
输出:提升树
- 初始化
- 对
a. 计算残差
b. 拟合残差学习一个回归树,得到
c. 更新 - 得到回归问题提升树
2.2.2. 梯度提升算法流程
提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数为平方损失或指数损失时,每一步很简单。但对于一般损失函数,每一步优化并不容易。梯度提升算法利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
输入:训练数据集,,;损失函数;
输出:回归树
- 初始化
- 对
a. 对,计算
b. 对拟合一个回归树,得到第棵树的叶结点区域
c. 对,计算
更新 - 得到回归树
2.3 XGBoost
XGBoost(eXtreme Gradient Boosting )是基于GBDT改进的集成学习算法,主要特征是支持损失函数的二阶导数,并加入正则项控制模型复杂度。
已知数据集,其中,则棵树的预测为
其中是决策树的集合;是每棵树的结构;为叶子权重;为叶子节点的个数。
在损失函数中添加正则项,得到目标函数为:
其中是可微的损失函数,表示预测值和真实值的差值;为正则化项,可避免过拟合,其表达式为
其中为复杂度参数,为正则化系数,两者通常根据经验给出。
对进行泰勒展开
其中分别是损失函数对于的一阶导数和二阶导数。
针对二元分类问题,采用对数损失函数,去除常数项后化简可得最终的目标函数
3. Bagging
Bagging算法流程:
输入:训练集;
基学习算法;
训练轮数
- for do
- end for
输出:
3.1 随机森林
随机森林(Random Forest)的核心思路:对训练集进行重采样,组成多个训练子集,每个子集生成一个决策树,所有决策树通过投票的方式进行决策,组成随机森林。
输入:训练集;特征集;类别集合;测试样本集。
输出:
- 从容量为的训练集中,采用自助抽样法(bootstrap),即有放回地抽取个样本,作为一个训练子集;
- 对于训练子集,从特征集中无放回地随机抽取个特征,其中(向上取整),作为决策树上的每个结点分裂的依据。从根结点开始,自下而上生成一个完整的决策树,不需要剪枝;
- 重复次步骤1和2,得到个训练子集,并生成决策树,将n个决策树利用简单投票法组合起来形成随机森林;
- 将测试集的样本输入随机森林中,让每个决策树对进行决策,然后采用多数投票发(Majority Voting Algorithm)对决策结果投票,最终决定的类别;
- 重复次步骤4,直到测试集分类完成
4. Stacking
stacking算法流程:
输入:训练集;
初级学习算法
次级学习算法
- for do
- end for
- for do
- for do
- ;
- end for
- ;
- end for
输出:
5. Blending
Blending主要流程:
- 将原始训练数据集划分为训练集和验证集;
- 使用训练集训练个不同的基模型,同质异质皆可以;
- 使用生成的个基模型,对验证集进行预测,结果作为新的训练数据;
- 使用新的训练数据,训练一个元模型;
- 使用个基模型,对训练数据进行预测,结果作为新的测试数据;
- 使用原模型对新的测试数据进行预测,得到最终结果。
Blending优点:
- 比Stacking简单(不用进行次交叉验证来获得新特征)
- 由于两层训练使用的数据不同,避免了信息泄露问题
- 在团队建模过程中,不需要给队友分享自己的随机种子
Blending缺点:
- 由于Blending对数据集的划分形式,第二轮的数据量比较少,可能导致过拟合
- Stacking使用多次的CV会比较稳健