adaboost算法java_Boosting / AdaBoost —— 多级火箭助推
发布日期:2021-06-24 01:38:57 浏览次数:6 分类:技术文章

本文共 2891 字,大约阅读时间需要 9 分钟。

Boosting(提升)

Boosting 是一类算法的统称,它们的主要特点是使用一组弱分类器来构造一个强分类器。弱分类器意思是预测的准确性不高,可能只比随便乱猜稍好一点。强分类器指准确性较高的分类器。简单来说的话,Boosting 可以理解为俗话所说的“三个臭皮匠顶个诸葛亮”。

Boosting 并没有规定具体的实现方法,不过大多数实现算法会有以下特点:

通过迭代生成多个弱分类器

将这些弱分类器组合成一个强分类器,通常会根据各弱分类器的准确性设置相应的权重

每生成一个弱分类器,会重新设置训练样本的权重,被错误分类的样本会增加权重,正确分类的样本会减少权重,即后续生成的分类器将更多的关注之前分错的样本。(不过也有些算法会对总是分错的样本降低权重,视之为噪音)

Boosting家族有一系列算法,常见的比如 AdaBoost、GDBT、XGBoost,还有 BrownBoost、LogitBoost、RankBoost 等等。

Bagging/Boosting/Stacking

顺便说一下几种集成学习(Ensemble)方法的区别,集成方法是指构造多种模型,并通过一定的方法组合起来,综合下来的预测效果高于单个模型的预测效果。

集成学习有几种方式,Boosting原理 中有几张图很直观,借用在这里。

Bagging/投票

Bagging 是一种投票机制,先生成多个模型,然后让它们投票决定最终的结果。典型的比如随机森林算法。

3577cbc1283c4b8c8eb6b012cc96f6af.png

Boosting/迭代提升

Boosting 是迭代生成模型,每个模型要基于上一次模型的效果。每次迭代,模型会关注之前的模型预测效果不好的那些样本。本文下面要讲述的就属于这类算法。

44ae7a8bcd1eaa3ac4ae2a07e4d3581a.png

Stacking/多层叠加

Stacking 是多层叠加的意思。也是先生成多个模型,但是用这些模型的预测结果作为下一层模型的输入,有点像多层神经网络的意思。

76244e06ef9ac978c3e9a3d62389e178.png

AdaBoost(Adaptive Boosting/自适应增强)

AdaBoost 是上述 Boosting 思想的一种具体实现算法,一般采用决策树作为弱分类器。那么看一下 AdaBoost 是如何实现迭代生成一系列弱分类器、调整样本权重,以及设置弱分类器权重从而构造出一个强分类器的。

AdaBoost 算法步骤

以离散型AdaBoost(Discrete AdaBoost) 为例:

假设有N个样本 (x1,y1), (x2,y2)…(xN,yN),其中 y1...yN ∈{-1, 1},即二分类问题。

设每个样本初始权重相同,都是 1/N。即各样本的权重 w1...wN = 1/N

训练分类器时Loss函数采用指数误差 09ad0843e019e2f575018f8363815062.png

开始进行T次迭代(每次生成一个弱分类器ht,t=1...T)

3.1 对第t次迭代,使用样本(考虑各样本权重为(w1...wN))训练得到一个弱分类器ht。ht预测的输出也是 {-1, 1}。

3.2 ht对样本分类的错误率为 6305487c4c68a00482fcc5f63ec6958d.png,即所有误分类样本(ht(xi) != yi)的权重的和。

3.3 计算该分类器 ht 在最终的强分类器中的权重 6ceaeb8a8638e741f2d966b85bf19c9f.png。这个公式意味着ht的预测准确率越高,在强分类器中的权重越大(下文还有说明)。

3.4 迭代中的强分类器 ff58a3a727f37dfbd519fa2942cb8e98.png

3.5 更新样本权重,对所有样本计算 ff4438480c2782a330196b23d5843db8.png,其中 1ef944ccfc2feebccd72ac355eabee46.png 是 第t轮迭代(当前迭代)第 i 个样本的权重,d0c1b6dd20c6f58c124c021520ca9e91.png 是该样本下一轮(t+1)的权重。这个公式意味着正确的样本将减少权重,错误的样本将增加权重(下文还有说明)。

3.6 将所有样本的权重重新归一化,即使得所有样本的权重和为1。可知 (t+1)轮所有样本权重和为 ab7837c6170e2d0d9ee8cc12e332fe71.png ,令 d5809c2028f45dd409f1b6c25ab4c0f1.png ,即可使得 57e47af20f9c92083230d2a1c4c077ca.png

3.7 t = t + 1,进行下一轮迭代

迭代完成后,得到强分类器 bd78f695720f88e25ff750ab0c9b6553.png ,sign是符号函数,使得输出是 {-1, 1}。

上面的步骤中,我们讨论几个问题:

步骤 3.3 中,分类器权重 6ceaeb8a8638e741f2d966b85bf19c9f.png,该函数图像如下图所示。当错误率 εt 越小,系数 αt 越大,意味着误差小(准确性高)的分类器,在最后的强分类器中有更大的权重。反之,当误差 εt 越大,系数 αt 越小,即在强分类器中的权重较小。另外可以看出当分类器的 错误率 < 0.5 时,αt > 0;如果分类器的 错误率 > 0.5,意味着该分类器预测反了,此时 αt < 0 将该分类器的预测结果反过来使用。

08acce7201174c23ca38b8a0af6c4711.png

步骤 3.5 中,样本权值更新 ff4438480c2782a330196b23d5843db8.png。这里面 yi 是样本的标签,ht(xi) 是分类器对 xi 的预测,如果预测正确,则两者都等于1 或都等于 -1,所以乘积为1,如果预测错误,则乘积为 -1。公式可以改写为 26694444a3823b6aac0240ce0f6735e5.png,这个分段函数的指数部分的图像如下。如果分类器的 αt > 0,我们看函数图像中 > 0 的部分,如果分类正确,指数函数的值将 < 1(黄线),乘以权重后将减少权重的值,即分类正确的样本将减少权重;如果分类错误,指数函数的值将 > 1(蓝线),即分类错误的样本将增加权重。如果 αt < 0,看函数图像中 < 0 的部分,指数函数的值反过来了,但此时分类器也预测反了,所以结果依然是正确的样本将减少权重,错误的样本将增加权重。

66d75e58e866c7a9d7786ce11ddf5f91.png

AdaBoost的优点

AdaBoost 几乎可以“开箱即用”,因为它是自适应的,对参数不会太敏感。

它在一定程度上可以避免“维度灾难”,我理解主要是 AdaBoost 只需要构造弱分类器,比如决策树的话,可以只使用那些比较重要的特征,树的深度很浅,运行速度较快。

同时多个弱分类器的集成还能提升模型的预测能力。

AdaBoost的缺点

比较明显的一点是对噪音和异常数据比较敏感,因为算法中会对分类错误的样本持续提升关注。

AdaBoost公式推导

前面算法中直接给了几个公式,比如分类器的权重 α 和 样本权重更新公式,为什么采用这样的计算公式,我们来推导一下。

假设有N个样本 (x1,y1), (x2,y2)…(xN,yN),其中 y1...yN ∈{-1, 1},即二分类问题。有一系列分类器k 可以线性组合成一个强分类器C,在第 m-1 次迭代,分类器:

4f9247da50f6a11a5b43014ee73c6488.png

这里C是强分类器,k是弱分类器,α 是 k在 C中的权重,下标 1...m-1 是迭代的轮次。注意这里所用的记号与前面算法步骤中的公式的记号有不同,注意各自的含义。

接下来第m轮分类器

85d43bbfb9e2761dd4a47210adc84364.png

因为是采用迭代的方法逐个构造分类器k,所以在第m轮,可以认为 C_(m-1) 已经是确定的了,现在需要的是找到一个好的 km 及其系数 αm。

对分类器 Cm 采用指数型误差

3baad38544e186f6adb4fa9936307a7c.png

令 m=1时 64914a0f48d4b7dadac9501bfbffa4e9.png,m>1时 e0ad0c724b48256c6eee645cb274816f.png ,上式可写为

3e20bc42777bbcb7792252ebd36e5fa8.png

如果km预测正确,则 2d3041539975214468816a9372328d26.png,如果km预测错误,则 97a008568a5d18aa6a880f49b1ecf8d0.png,因此上式再分裂为预测正确和预测错误的项:

34c52c15415df2a1779297112940d6e4.png (公式1)

059bc790c21667a3d9d0b1767f1c80bf.png (公式2)

我们希望找到合适的 km 和 αm 使得 E最小。

先考虑 km。在公式2中,只有 57484991fe171bfd5c9ebe74a08bbe3d.png 的值受 km 的影响,也就是说,要最小化E,对于km来说,就是要构造一个最小化 57484991fe171bfd5c9ebe74a08bbe3d.png 的分类器 km。

考虑 αm。用公式1对 αm 求导,当导数 = 0 时 E有最小值。

971085948f5ede5390c8d94e663fbc9e.png

494a02b3ba13f70dab3de63239c4e488.png

21a46279ab6acd80af1f1b4772379582.png

a7b8f9a5ead1a5fd5133dab41dd09355.png

如果令错误率 47ae23b57bef57e228d22de4c818e49a.png

2d114bdcca51d58283469d5dbf1f3b02.png

3.另外看下更新样本权重。

由于 e0ad0c724b48256c6eee645cb274816f.png

于是 c3ddf9588ae7c01896b768a9e4b746d1.png

a82c70a20e84e9f30183e88b547a5730.png

0d8c670fbff3505000f294d2c739b420.png

cf1e4b3355f24229857a2ef08db13db3.png

c9252e02ffa1ae88d2ae24687a687d97.png

所以 5af7a7e686b325435a073af6a8eab9a1.png

参考

转载地址:https://blog.csdn.net/weixin_29306261/article/details/114973944 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:chrome恐龙游戏java_自动玩Chrome浏览器的小恐龙游戏
下一篇:java的根基类_java 基础笔记

发表评论

最新留言

很好
[***.229.124.182]2024年04月16日 03时53分44秒