【机器学习】Adboost 算法 整理

本文详细介绍了Adaboost和GBDT两种机器学习算法的工作原理及区别。Adaboost通过迭代训练不同权重的弱分类器,组合成强分类器;GBDT则通过构建回归树学习残差来提高预测准确性。
部署运行你感兴趣的模型镜像

Adaboost是adaptive boosting(自适应boosting)的缩写,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。它有一个明显的特点就是排除一些不必要的特征值,把模型训练放在关键特征值数据上。它的算法过程如下:


Adaboost从以上概念可以看出它有两种分类器,一种是y1称之为弱分类器,另外一种是Ym称之为强分类器以及一个参数叫alpha,这个值是基于每个弱分类器的错误率进行计算的,其中错误率计算公式如下:

Alpha的计算公式如下:

计算出alpha之后就需要对权重向量D进行更新,D的计算方法如下:

正确被分类的权重计算:

样本被错分之后的权重计算:

本系统的adaboost是基于单层决策树(decision dump)来构建弱分类器的,单层决策树的算法流程如下:

1、  假设数据特征值分为n列m行,错误率初始化为均值,例如100行数据,初始错误向量值为1/100;

2、  对每一列数据(即维度数据)选择出最大值和最小值;

3、  基于最大和最小值设置每一步的区间,假设100步长,那么步区间为:(max-min)/100

4、  遍历每一步区间,做二分类(1和-1),并记录下本次数据和步长的对比关系(大于或者小于)

5、  依据第4步算出的特征值(1或者-1)计算错误率;

6、  提取最小的错误率、维度、关系运算符以及特征值

 


 

AdBoost原理

原始的AdaBoost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“重点关注”,也就被赋上一个很高的权重。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如说可以对它们进行加权、或者让它们进行投票等),得到一个最终的模型。

关键字:样本的权重分布

GBDT概述

GBDT(Gradient Boosting Decison Tree)中的树都是回归树,GBDT用来做回归预测,调整后也可以用于分类(设定阈值,大于阈值为正例,反之为负例),可以发现多种有区分性的特征以及特征组合。GBDT是把所有树的结论累加起来做最终结论的,GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差(负梯度),这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。 Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错instance的权重,而已经分对的instance则都趋向于0。这样后面的树就能越来越专注那些前面被分错的instance。

Gradient Boost与AdaBoost的区别

  • Gradient Boost每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的建立是为了使得之前模型的残差往梯度方向减少。Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。本质上,Shrinkage为每棵树设置了一个weight,累加时要乘以这个weight,但和Gradient并没有关系。

  • Adaboost是另一种boost方法,它按分类对错,分配不同的weight,计算cost function时使用这些weight,从而让“错分的样本权重越来越大,使它们更被重视”

    Gradient Boost优缺点

  • 优点: 它的非线性变换比较多,表达能力强,而且不需要做复杂的特征工程和特征变换。

  • 缺点:Boost是一个串行过程,不好并行化,而且计算复杂度高,同时不太适合高维稀疏特征。

---------------------------------------------------------------------------------------------------------------------------------------------

AdaBoosting 的基本思想

通俗地讲就是综合某些“专家”的判断,往往要比一个“专家”单独的判断要好(三个臭皮匠顶过诸葛亮-周志华《机器学习第八章》)。在”强可学习”和”弱可学习”的概念上来说就是我们通过对多个弱可学习的算法进行”组合提升或者说是强化”得到一个性能赶超强可学习算法的算法。

Boosting的思路

1.找到一个弱分类器,分类器简单,快捷,易操作(如果它本身就很复杂,而且效果还不错,那么进行提升无疑是锦上添花,增加复杂度,甚至上性能并没有得到提升,具体情况具体而论)。

2.迭代寻找N个最优的分类器(最优的分类器,就是说这N个分类器分别是每一轮迭代中分类误差最小的分类器,并且这N个分类器组合之后是分类效果最优的。)。

在迭代求解最优的过程中我们需要不断地修改数据的权重(AdaBoost中是每一轮迭代得到一个分类结果与正确分类作比较,修改那些错误分类数据的权重,减小正确分类数据的权重 ),后一个分类器根据前一个分类器的结果修改权重在进行分类,因此可以看出,迭代的过程中分类器的效果越来越好,所以需要给每个分类器赋予不同的权重。最终我们得到了N个分类器和每个分类器的权重,那么最终的分类器也得到了。

归纳算法流程

输入:训练数据集M*N(M为样本数量,N为特征数量)弱,其中xi表示数据i[数据i为N维],yi表示数据的分类为yi,Y={-1,1}表示xi在某种规则约束下的分类。

输出:最终的分类器G(x)

1. 初始化训练集的权值均匀分布(每个样本数据权重均等),

        D1 = (W11,W12,W13,...,W1M), W1i=1/M, ,M表示数据的个数,i=1,2,3…M。 

2. j=1,2,3,…,J(表示迭代的次数/或者最终分类器的个数,取决于是否能够使分类误差为0)。

(a)使用具有权值分布Dj的训练数据集学习,得到基本的分类器:Gj(x);

(b) 计算Gj(x)在训练集上的分类误差率

640?wx_fmt=png&wxfrom=5&wx_lazy=1

求的是分错类别的数据的权重值和,表示第i个数据的权重Dj[i];

(c)计算Gj(x)第j个分类器的系数,,ej表示的是分类错误率。

640?wx_fmt=png

(d)更新训练数据集的权重Dj+1,数据集的权重根据上一次权重进行更新, i=1,2,…M

640?wx_fmt=png

Z是规范化因子,他表示所有数据权重之和,它使Dj+1成为一个概率分布。

3. 构建基本分类器的线性组合

640?wx_fmt=png

得到最终的分类器:

640?wx_fmt=png

Boosting与Bagging对比:

AdaBoost泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整,但是对离群点敏感。

Bagging基于数据随机重抽样的分类器构建方法,原始数据集中重新选择S次得到S个新数据集,将磨沟算法分别作用于这个数据集,最后进行投票,选择投票最多的类别作为分类类别。

Boosting关注那些已有分类器错分的数据来获得新的分类器,Bagging则是根据已训练的分类器的性能来训练的。Boosting分类器权重不相等,权重对应与上一轮迭代成功度Bagging分类器权重相等。

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值