基于 Boosting 框架的主流集成算法介绍(下)

2023-07-15

2019-03-02

集成学习: 构建并结合多个学习器来完成学习任务。

同质: 集成中只包含同种类型的个体学习器(基学习器);

异质: 集成中的个体学习器(组件学习器)由不同学习算法生成。

个体学习器的“准确性”和“多样性”很重要,且相互冲突。

分类: 个体学习器间存在强依赖关系,必须串行生成的序列化方法,eg,Boosting;个体学习器间不存在强依赖关系,可同时生成的并行化方法,eg,Bagging和随机森林。

工作机制: 先从初始训练集训练出一个基学习器1,根据基学习器误差率表现更新训练样本权重,使弱学习器1学习误差率高的训练样本权重变高,让这些点在弱学习器2中得到更多的重视,然后基于调整权重后的训练集训练学习器2,...重复进行,直至弱学习器数目达到指定的值T,最终将这T个基学习器进行加权结合。

Boosting族算法最著名的代表是AdaBoost,是“Adaptive Boosting(自适应增强)”的缩写。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

算法过程

优点:作为分类器时精度很高;在AdaBoost框架下,可使用各种回归分类模型来构建学习器;不易发生过拟合(会加入正则化项)。

缺点:对异常样本点敏感,异常样本在迭代中可能会获得较高的誉简迹权重,影响最终的强学习器的预测准确性。

两者均是0/1误差的平滑近似:

梯度提升算法首先给定一个目咐没标损失函数,它的定义域是所有可行的基函数集合,提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部最小值。

GB每一次建立模型 是在之前建立模型 损失函数的梯度下降方向。一般认为损失函数越小,性能越好,因此最好是使损失函数沿着梯度方向下降,模型得以不断改进提升性能。

GBDT是GB和DT的结合,是以决策树为基学习器的gb算法,此处的决策树是回归树。GBDT中的决策树深度一般不超过5,叶子结点数不超过10。GBDT核心在于: 每一棵树学得是之前所有树结论和的残差 ,这个残差就是一个加预测值后能得庆并真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。

xgboost是在GBDT基本思路上改善而来,主要改变有

1) 在损失函数中加入防止过拟合的惩罚函数

T是叶子的个数,w是预测函数的参数,也就是决策树算法下叶子节点的权重值。可以控制γ和λ这两个超参数来调整正则化的惩罚力度。其实这里的惩罚函数也就定义了模型复杂度,比如γ越大,λ越大,复杂度越小越不易过拟合。

2) 用二阶泰勒展式将损失函数展开,同时用到了一阶和二阶导数

第t次的loss:

对上式做二阶泰勒展开:g为一阶导数,h为二阶导数

3)CART回归树中寻找最佳分割点的衡量标准是最小化均方差,xgboost 寻找分割点的标准是最大化 ,lamda,gama与正则化项相关

xgboost算法的步骤和GB基本相同,都是首先初始化为一个常数,gb是根据一阶导数ri,xgboost是根据一阶导数gi和二阶导数hi,迭代生成基学习器,相加更新学习器。

https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

为得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立,考虑使用相互有交叠的采样子集。

并行式集成学习的最著名代表,基于自助采样法,算法流程如下:

优点:训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶;与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改的用于多分类、回归任务;初始训练集63.2%用于训练,36.8%用作验证集对泛化性能做“包外估计”。

但从偏差-方差分解角度看,Bagging主要关注降低方差。

随机森林是Bagging的一个扩展变体,在以决策树为基学习器构建Bagging集成的基础上,在决策树训练过程中引入了 随机属性选择 。即对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k(k<d,d为所有属性个数)个属性的子集,然后从中选一个最优属性用于划分。若k=d,则为传统决策树;k=1,则随机选择一个属性划分。一般推荐 。

https://blog.csdn.net/qq547276542/article/details/78304454

RF起始性能相对较差,但随着学习器数目的增加,会收敛到更低的泛化误差。另外RF的训练效率常优于Bagging,因为Bagging使用“确定型”决策树,选择划分属性时要对结点所有属性进行考察,而RF使用“随机型”决策树,只需考虑一个属性子集。

学习器结合可能会从三个方面带来好处:

1)统计方面:当多个假设达到同等性能时,可减小因误选单学习器导致泛化性能不佳的风险;

2)计算方面:降低陷入糟糕局部极小点的风险;

3)表示方面:扩大相应假设空间,学习更好的近似。

对数值型输出 ,最常见的结合策略是平均法。

简单平均:                    

(特殊的加权平均法,宜在个体学习器性能相近时使用)

加权平均法:                

其中 是个体学习器 的权重,一般从训练数据中学习而得,通常要求 ,宜在个体学习器相差较大时使用。

对分类任务,学习器从类别标记集合中预测出一个标记,最常见的结合策略是投票法。

绝大多数投票法:

相对多数投票法:

                             

预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。

加权投票法:

                         

与加权平均法类似, 是 的权重,通常 。

个体学习器的输出类型:

类标记: 硬投票。 ,若 将样本x预测为类别 则取值为1,否则为0。

类概率: 软投票。 ,相当于对后验概率 的一个估计。

不同类型的 值不能混用;对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用;分类置信度应规范化后使用;基于类概率进行结合优于直接基于类标记进行结合;若基学习器类型不同,不能直接比较类概率值,应先将其转化为类标记输出(eg类概率输出最大的设为1,其他为0)再投票。

当训练数据很多时,常使用通过另一个学习器来进行结合的“学习法”,代表算法Stacking

第一阶段获得各个模型对样本x1的预测标签值;第二阶段将各个模型的预测标签值作为一个新的特征(x1的真实标签值还是标签值),再用某个算法进行训练,获得一个融合模型,用这个融合模型进行测试集的预测。

周志华《机器学习》

https://www.cnblogs.com/pinard/p/6131423.html

https://www.jianshu.com/p/470556a108e2

https://www.cnblogs.com/wxquare/p/5541414.html

https://zhuanlan.zhihu.com/p/34325706

boosting算法到底是什么算法?请详解

详细解释下,boosting中最基本的是adaboost,你要是弄清楚这个算法其他主要原理都差不多,只是实现手段或者说采用的数学公式不同。它是这样的:先对所有样本辅以一个抽样权重(一般开始的时候权重都一样即认为均匀分布),在此样本上训练一个分类器对样本分类,这样可以得到这个分类器的误差率,我们根据它的误差率赋以一个权重,大体是误差越大权重就越小,针对这次分错的样本我们增大它的抽样权重,这样训练的下一个分类器就会侧重这些分错的样本,然后有根据它的误差率又计算权重,就这样依次迭代,最后我们得到的强分类器就是多个弱分类器的加权和。我们可以看出性能好的分类器权重大一些,这就体现了boosting的精髓。

文章推荐

相关推荐