本文主要是介绍集成学习(Bagging、Boosting、Stacking),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
组合多个学习器:集成方法(ensemble method) 或 元算法(meta-algorithm)。
- 不同算法的集成(集成个体应“好而不同”)
- 同一算法在不同设置的集成
- 数据集不同部分分配给不同分类器之后的集成
集成学习中需要有效地生成多样性大的个体学习器,需要多样性增强:
- 对 数据样本 进行扰动(敏感:决策树、神经网络; 不敏感:线性学习器、支持向量机、朴素贝叶斯、k近邻)
- 对 输入属性 进行扰动
- 对 输出表示 进行扰动
- 对 算法参数 进行扰动
目前的集成学习方法大致可分为两大类:
- 个体学习器之间存在强依赖关系,必须串行生成的序列化方法
- 个体学习器不存在强依赖关系,可以同时生成的并行化方法
Bagging
也称自举汇聚法(bootstrap aggregating),是在原始数据集选择T次后得到T个新数据集。通过放回取样得到(比如要得到一个大小为n的新数据集,该数据集中的每个样本都是在原始数据集中随机取样,即抽样之后又放回)得到。基于每个采样集训练出一个基学习器,再将这些基学习器结合,在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务采用简单平均法。Bagging主要关注降低方差。
为啥有放回取样?:训练数据不同,我们获得的基学习器可望具有比较大的差异。然而,如果采样出的子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,显然无法产生比较好的基学习器。所以,采取相互有交叠的采样子集。
对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1-1/m。如果m次采样都没有被采集中的概率是(1-1/m)^m, 当m→∞时,(1-1/m)^m→1/e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。
随机森林(Random Forest, RF)
2001年由Breiman提出。是Bagging的一个扩展变体。
优点:可用于回归任务和分类任务,并且很容易查看它分配给输入特征的相对重要性。易于使用,超参数数量少。不易过拟合
缺点:大量的树会使算法变慢。
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性;而在RF中,对基决策树的每个结点,是从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性进行划分。参数k控制了随机性的引入程度,推荐值k=log2d。
超参数:
- n_estimators:控制随机森林中树的数量
- max_features:随机森林在单个树中尝试的最大特征数量。
- min_sample_leaf: 叶子的数量
Boosting
分类器通过串行训练获得,通过集中关注已有分类器错分的那些数据来获得新的分类器。Boosting主要关注降低偏差。
AdaBoost(Adaptive Boosting)
1995年由Freund和Schapire提出。
训练算法:
- 训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量D。一开始,这些权重都初始化成相等值
- 首先在训练数据上训练出一个弱分类器并计算该分类器的错误率
- 然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重会降低,而第一次分错的样本的权重将会提高
- 为了从所有弱分类器中得到最终的分类结果,Adaboost为每个分类器都分配了一个权重值alpha,这些alpha值是基于每个弱分类器的错误率进行计算的。
alpha表示弱分类器在最终分类器中的重要性,由上式可知,当误差小于0.5时,alpha大于等于0,并且alpha随着误差的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
如果某个样本被正确分类,那么该样本的权重更改为:
这篇关于集成学习(Bagging、Boosting、Stacking)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!