Adaboost算法原理

2020-01-17  本文已影响0人  不分享的知识毫无意义

还是秉持笔者一贯的文风,以通俗易懂为目标,其中大量的数学工作,喜欢证明的朋友自己去看。

1.什么是Adaboost

Adaboost是集成算法,是boosting的一种,通过给样本和分类器都设置权重的方式,达到目标的逐步优化。跟GBDT一样,也有分类和回归之分,同样只是体现在目标函数的不同。

2.Adaboost的基础知识

3.Adaboost回归问题

回归问题一直是这类集成算法里边最好解释的问题。
(1)计算损失,回归问题的损失有绝对值和平方两种,在求损失的时候先求了一个最大值然后进行了标准化,然后依据不同的损失函数形式有不同的表达方式。根据样本权重计算加权损失和。
(2)计算分类器的权重,还记得公式吧,这个还用于更新样本权重呢。


分类器权重计算方法

(3)更新样本权重,根据分类器的权重,真实值以及预测值等更新各个样本的权重。


回归问题样本权重更新公式
这个公式显然是推导出来的,而我们直接用就行了。
(4)基模型结合策略
不同于分类问题,回归问题的模型结合,采用的是基模型权重中位数相结合的计算方法。
基模型的结合方案

其中g(x)是基模型权重和结果的中位数

4.Adaboost分类问题

同样包括二分类和多分类问题,二分类是多分类的一个特例。sklearn采取了SAMME和SAMME.R两种算法,需要的时候自己选一个用一下。

4.1 二分类问题

分类问题其实大致过程和回归问题差不多,只不过在公式上有些许的差异。
第一,目标函数用的指数损失函数
第二,虽然权重初始化的方法是一样的,计算基分类器权重方法是一样的,但是权重更新公式不同,分类问题是这样的:


分类问题样本权重更新公式

第三,基分类器的组合方案不同。回归问题是中位数组合,分类问题是加权组合。


分类问题基分类器的组合
最终的分类结果是:
分类结果计算
值得注意的是,对于二分类问题每一次都要用sign进行一下预测值转换。

4.2 多分类问题

传统的GBDT只能解决二分类,对于多分类需要修改代码。多分类问题解决方案有三种,一对多、一对其余和多对多,实际上一对多最常用。GBDT实际使用0-1编码的方式,实际就是一对多策略,将3分类转化成3个二分类问题。
当然adaboost也可以用这种思路解决。但是sklearn提供了解决多分类问题的方法。
直接说SAMME.R算法,算法的大体思路还是类似的,分类器权重计算,样本权重更新等等。不同之处在于
(1)计算分类器的权重的时候,考虑了一个分类为k类的概率,


分类为k的概率

(2)更新加法模型:


加法模型的更新
(3)计算样本权重:
样本权重计算方法
(4)计算分类
分类计算方法
其实就是计算使加法模型值最大的那个类别。

仔细想也是一对多的策略。

上一篇 下一篇

猜你喜欢

热点阅读