大话系列 | 集成算法之Adaboost

关注+星标,听说他有点东西b00c781a23341bb4ebd623f69cdeeb54.png

全文共2340字,阅读全文需16分钟
写在前面的话

大家好,我是小一1cb9ac6c73a5dbedc9c9ac8aac91c727.png

这是大话系列的第5节算法,也是本系列的第13篇原创文章。


上节提到两种集成方法,是集成算法的相关背景知识点,如果你搞定了上节的概念,那么这节的集成算法应该对你来说不是问题,最起码在概念上是没有什么晦涩难懂的内容需要理解的。

上节回顾:两种集成方法的简单介绍

ok,这节就来说说集成算法的Adaboost算法,真真正正的通过三个臭皮匠造一个诸葛亮出来。

AdaBoost算法

AdaBoost:adaptive boosting,是一种自适应的boosting算法

相信你应该还记得Boosting方法,毕竟上节刚提到,注意注意,Adaboost是对Boosting 算法的一种实现

AdaBoost的工作原理

先来看一下我们的目标:使用多个弱分类器构造一个自适应的boosting 的分类器。

目前构造强分类器面临两个问题:选择最优的弱分类器和每个弱分类器的权重

选择最优的弱分类器

在boosting算法的过程中,需要根据上一轮的参数对本轮的权重进行更新,这样的目的是使得在上一轮被分类错误的样本在本轮能尽可能的被正确分类

于是在每轮样本的分类结果中,我们只需要计算分类的正确率,并且选择正确率最高的弱分类器为该轮的最优弱分类器

计算每个弱分类器的权重

我们知道最终的强分类器是由若干个弱分类器组成,同时每个弱分类器都有自己的权重,那这些弱分类器的权重如何计算呢?

前面我们已经计算了每个弱分类器分类的正确率,那我们就可以基于这个错误率去决定该弱分类器的权重。

错误率越低的弱分类器权重越高,也即表示正确率越高的分类器越重要。


Adaboost 分类步骤

前面搞清楚了如何确定权重并选择最优分类器,接下来康康Adaboost 的分类流程:

1. 确定样本权重

设定每个样本的初始权重都是相等的

2. 计算错误率

利用第一个弱分类器进行学习,计算分类错误率。

其中分类错误率ε:

未正确分类的样本数所有样本数

3. 计算弱分类器权重

利用错误率计算每个弱分类器的权重,对于正确分类的样本,降低它的权重,对于错误分类的样本,增大它的权重

其中当前弱分类器的权重α:

4. 更新样本权重

通过当前样本权重,重新调整下一轮样本的权重,使得当前被错分的样本权重提高

其中下一轮的样本权重

此时的是一个归一化因子:

上面的式子可以化简为下面这样:

通过这个公式,我们就可以计算在下一轮的样本权重,其中表示第t+1轮的第i个样本的权重

5. 重复学习

经过t轮的学习后,会得到t个弱分类的算法,,也就是最终的强弱分类器

此时的强分类器是由t个弱分类器组成,每一个弱学习器都是当前轮最优的弱分类器

用公式表示:

其中,sign是符号函数,表示第i轮中选择选择最优的弱分类器

到此,Adaboost 的流程就结束了,是不是感觉似懂非懂?

ok,看个例子吧

例:Adaboost分类

假设有10个训练样本,需要通过Adaboost构建一个强分类器。样本数据如下:

027af26ac21e5d01c3d3e6b0712cf0f2.png点击看大图

针对当前样本数据,我们的基础分类器有三个,分别如下:

bfb3f1d2ba7a2d84354aa7d54bcda6c7.png

三个基础分类器


①首先赋权重

根据Adaboost 分类的性质,我们需要为每个样本赋予相等的权重,也就是每个样本的权重w = 1/10 = 0.1,即初始权重D1=(0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1)

②进行第一轮的训练

针对每个样本,我们使用三个基分类器进行分类并计算分类错误率,此时:

  • 分类器f1的错误率是0.1*3,即x取6、7、8时分类错误

  • 分类器f2的错误率是0.1*4,即x取0、1、2、9分类错误

  • 分类器f3的错误率是0.1*3,即x取3、4、5时分类错误

根据误差率最小,我们选择f1为第一轮的最优分类器(或f3分类器也可),此时根据权重计算公式第一个分类器的权重为:

根据第一个分类器更新样本的权重(这一步的目的是对于上面分类错误的样本点6、7、8增大权重),权重的更新公式如下:

对应的我们计算出新的样本权重为:D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。

③进行第二轮的训练

同理此时三个基分类器的错误率:

  • 分类器 f1 的错误率为 0.1666 * 3,也就是 x 取值为 6、7、8 时分类错误。

  • 分类器 f2 的错误率为 0.0715 * 4,即 x 取值为 0、1、2、9 时分类错误。

  • 分类器 f3 的错误率为 0.0715 * 3,即 x 取值 3、4、5时分类错误。

根据误差率最小,我们选择f3作为第二轮的最优分类器,根据此时的错误率计算第二个分类器的权重:

同理可以得到D3=(0.0455,0.0455,0.0455,0.1667, 0.1667,0.01667,0.1060, 0.1060, 0.1060, 0.0455)。

④进行第三轮的训练

同样的方法第三轮选择f2分类器为最优分类器,相应的第三个分类器的权重为:

⑤最终的强分类器

基于当前的三轮训练,我们可以得到一个强分类器:

。



skelarn 应用实战

在sklearn 中调用Adaboost也非常简单

from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import AdaBoostRegressor

巧的是,Adaboost可分类可回归,前面介绍的算法中也有好几个是可分类可回归的

AdaBoost 分类器

Adaboost分类器可以使用如下代码进行创建:

# 创建Adaboost 分类器 
AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0,algorithm=’SAMME.R’, random_state=None)

其中,有几个主要的参数,小一一一给你介绍一下:

参数含义
base_estimator代表的是弱分类器,AdaBoost 中默认使用的是决策树
n_estimators算法的最大迭代次数,也是分类器的个数。默认是 50
learning_rate代表学习率,取值在 0-1 之间,默认是 1.0
algorithmboosting 算法:SAMME 和 SAMME.R。默认是 SAMME.R
random_state代表随机数种子的设置,默认是 None
AdaBoost 回归器
# 创建Adaboost 回归
AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=‘linear’, random_state=None)

不同的时,在Adaboost回归器中多了一个loss 参数

loss 代表损失函数的设置,提供 linear(线性)、square(平方)和exponential(指数)三种损失函数。默认是线性。这个在回归模型中我们再细说。

Adaboost思维导图

4b935e2dbc28d0770817138900023086.png高清思维导图加小一微信领取

写在后面的话

Adaboost 就这一节,没掌握的可以多读几遍,相信你理解起来问题不大。

实战的话这节没有安排,因为是集成算法,前面四篇算法的实战项目都可以拿来做练习,而且在文中也有写到sklearn的相关使用方法,直接拿去用就可以了。

还是老规矩,加小一微信领取高清思维导图,或者每次推文后都会在交流群内分享,需要的自己保存。


更多系列算法请点击文章开头的专辑


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值