机器学习集成算法AdaBoost算法_20201231

一,提升方法Adaboost算法

要点
1.算法过程要能够描述
2.分类器权值公式
3.样本权值公式
4.损失函数是什么
从无到有的实现Adaboost

python代码实现adaboost算法:
概览

adaboost算法是集成算法boosting算法中的一种,全称adaptive boosting,自适应提升算法
自适应体现:每一轮中调整分类器和样本的权重

1.1AdaBoost 算法基本思路

AdaBoost的具体流程为:
先对每个样本赋予相同的初始权重,每一轮学习器训练过后都会根据其表现对每个样本的权重进行调整,增加分错样本的权重,这样先前做错的样本在后续就能得到更多关注,按这样的过程重复训练出M个学习器,最后进行加权组合

在这里插入图片描述

在这里插入图片描述
P是机器学习的准确率,这个准确率除了要求是弱学习器之外,还要求必须大于50%,因为低于50%的学习器不能成为一个学习器,只能叫做一个反学习器。当P取50%时,是一个随机学习器。
上面的式子也叫做对数几率,我们使用对数几率来做为基学习器的权重
在这里插入图片描述
正样本使用1,负样本使用-1,SVM中也是使用这样的标签体系,这与LR中使用的1,0标签体系时不一样的

弱学习器

什么是弱学习器
比如:

  • 深度很浅的决策树(决策树的决策函数就是多个sign函数的嵌套)
  • sign函数/树桩: 当x>1:y=1;当x<1:y=-1

要求:
比随机猜测好一点

非线性弱学习器
boosting算法中往往使用的是非线性的基学习器,因为模型本身是基学习器的线性组合,如果基学习器还是线性学习器(线性回归wx + b),那整个boosting算法其实可以被一整个线性算法等同

算法过程详解

  • 在第二步b中计算误差率的时候也是加上了样本权重的
  • 第二步c中就是根据对数几率公式计算弱分类器的权重,这个权重最终使用在最后的融合过程中,可以理解为上面例中中赵大夫这个弱分类器的权重为0.042.
  • d步骤中注意理解exp(-amyiGm):yi是真实值(取值为-1或者1),Gm是预测值(取值为1或者-1),这一部分的作用就是预测对了,就给样本一个较小的的权重,预测错了,就给样本一个较大的权重,分母是归一化的部分
  • d步骤中使用了指数计算,指数计算在计算机计算是非常慢的,计算复杂度比较高,这里的性能瓶颈也是制约adaboost应用的一个原因。

在这里插入图片描述
要点

  • y是取-1/1
  • 分类误差率是带着权重的
  • 基学习器的权重公式属性:正确率越高,权值越高
  • 权值更新公式属性:同号权值小,异号权值大,在上一轮的基础上,针对本轮的误分类情况,调整权值

举例解释adaboost工作过程

在这里插入图片描述
迭代过程1:m=1
1> 确定阈值的取值及误差率
阈值的取值是使用启发式(通过尝试的方法或者说是枚举的方法)和投票的方法,通过不同的阈值来得到误差率较小的值做为阈值,和之前的决策树工作方式一样。

扫描二维码关注公众号,回复: 12394753 查看本文章

当阈值取2.5时,误差率为0.3。即 x<2.5 时取 1,x>2.5 时取 -1,则数据6、7、8分错,误差率为0.3(简单理解:10个里面3个错的,真正误差率计算看下面的表格 )
当阈值取5.5时,误差率最低为0.4。即 x<5.5 时取1,x>5.5 时取 -1,则数据3、4、5、6、7、8分错,错误率为0.6>0.5,故反过来,令 x>5.5 取 1,x<5.5 时取 -1,则数据0、1、2、9分错,误差率为0.4
当阈值取8.5时,误差率为0.3。即 x<8.5 时取1,x>8.5 时取 -1,则数据3、4、5分错,错误率为0.3
由上面可知,阈值取2.5 或8.5时,误差率一样,所以可以任选一个作为基本分类器。这里选2.5为例。

计算误差率:
在这里插入图片描述
训练数据集上的误差率(被分错类的样本的权值之和):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
迭代过程2:m=2
1> 确定阈值的取值及误差率

当阈值取2.5时,误差率为0.49998。即 x<2.5 时取 1,x>2.5 时取 -1,则数据6、7、8分错,误差率为0.166663(取过,不列入考虑范围)
当阈值取5.5时,误差率最低为0.28572。即 x<5.5 时取1,x>5.5 时取 -1,则数据3、4、5、6、7、8分错,错误率为0.071433+0.166663=0.71427>0.5,故反过来,令 x>5.5 取 1,x<5.5 时取 -1,则数据0、1、2、9分错,误差率为0.071434=0.28572
当阈值取8.5时,误差率为0.21429。即 x<8.5 时取1,x>8.5 时取 -1,则数据3、4、5分错,错误率为0.07143*3=0.21429
由上面可知,阈值取8.5时,误差率最小,计算误差率:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后根据我们的超参数N,循环进行N轮,最后进行加权叠加计算出来分类标签,最终的值不一定是在-1到1之间的,可能会很大,也可能会很小,是分布在整个实数域上的。

实践中应用的情况:
与后面讲到的梯度提升树相比,adaboost准确率没有那么高,所以在实践中应用比较少,但是在这种基础算法在面试中常被问到。

划重点
1.弱学习器的权重计算公式
在这里插入图片描述
2.adaboost算法是一个树桩/sign函数,标签只有-1和1两种选择
sign函数/树桩: 当x>1:y=1;当x<1:y=-1
3.样本的权重调节
调节因子要记住
在这里插入图片描述
4.开放性问题,,比如随机森林和adaboost的优缺点
随机森林是可以并行的,adaboost是串行的
随机森林是强学习器做为基学习器,adaboost是弱学习器做为基学习器
5.只能做分类问题?
并不是,可以用作回归算法,回归算法中有一套重新定义的误差率概念,不作深入了解

6.损失函数是什么
在这里插入图片描述
在我们预测对的时候,损失小一点,预测错的话,损失会大一点,这一点是区别于MSE和交叉熵函数的,指数损失函数即使在预测对的时候也是会给一个较小的损失。所以指数损失函数完全不常用。

如何构建基学习器(弱学习器)

  • 使用不同的弱学习算法得到不同基本学习器
  • 使用相同的弱学习算法,但用不同的参数
  • 相同输入对象的不同表示凸显事物不同的特征
  • 使用不同的训练集:装袋(bagging)也称为自举汇聚法(boostrap aggregating)与提升(boosting)

如何组合弱学习器

  • 多专家组合:一种并行结构,所有的弱分类器都给出各自的预测结果,通过“ 组合器”
    把这些预测结果转换为最终结果。eg.投票(voting)及其变种、混合专家模型
  • 多级组合:一种串行结构,其中下一个分类器只在前一个分类器预测不够准(不够自信)的实例上进行训练或检测。eg.级联算法(cascading)

补充概念
强可学习:如果存在一个多项式的学习算法能够学习它,并且正确率很高,称这个概念是强可学习的
弱可学习:如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,则称这个概念是弱可学习的
在概率近似正确(PAC)学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习
在这里插入图片描述

1.2AdaBoost算法(分类)

算法详解
AdaBoost算法:
输入:训练数据集 [公式]
,其中 [公式]
;弱学习算法
输出:弱分类器在这里插入图片描述

  1. 初始化训练数据的权值分布
    [公式]

  2. [公式]

2.1 使用具有权值分布 [公式] 的训练数据集学习,得到基本分类器
[公式]

2.2 计算 [公式] 在训练数据集上的分类误差率
[公式]

2.3 计算 [公式] 的系数
[公式]

2.4 更新训练数据集的权值分布
[公式]

其中, [公式]
是规范化因子(为了使样本的概率分布和为1)
[公式]

  1. 构建基本分类器的线性组合
    [公式]

得到最终分类器
[公式]
注:对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数:
在这里插入图片描述
其中 R R R为类别数。从上式可以看出,如果是二元分类, [公式] ,则上式和我们的二元分类算法中的弱分类器的系数一致。
算法关键点说明
1.计算 [公式]
在训练数据集上的分类误差率
在这里插入图片描述

这里 [公式]
,这表明 [公式]
在加权的训练数据集上的分类错误率是被 [公式]
误分类样本的权值之和,由此可以看出数据全值分布 [公式]
与基本分类器 [公式]
的分类误差率的关系。

2.当 [公式]
时, [公式]
,并且 [公式]
随着 [公式]
的减少而增大,所以误分类误差率越小的基本分类器在最终分类器的作用越大。

3.更新训练数据的权值分布为下一轮做准备,式可以写成:

[公式]

由此可知,被基本分类器 [公式]
误分类样本的权值得以扩大,而被正确分类的样本的权值得以缩小。

4.这里系数 [公式]
表示了基本分类器 [公式]
的重要性,所以 [公式]
之和并不为1。 [公式]
的符号决定实例 在这里插入图片描述

类, 在这里插入图片描述
的绝对值表示分类的确信度。

算法流程图
在这里插入图片描述

几个关键参数的关系
误差率em越大,am越小,使得这个基学习器在最终强学习器中的权重越小
样本权重wm:根据权重计算公式,当弱学习器样本预测错误时,样本的权重Wm+1变大,预测正确的样本Wm+1的权重会变小,这就会使得上一个学习器预测错误的样本的权重增加,得到更多重视。

1.3 AdaBoost算法(回归)

下面介绍AdaBoost做回归问题时误差率和权重系数的计算。
算法详解
输入:训练数据集 [公式]
,其中 [公式]

输出:分类器 [公式]

  1. 初始化训练数据的权值分布
    在这里插入图片描述

  2. [公式]

2.1 使用具有权值分布 [公式]
的训练数据集学习,得到基本分类器 [公式]

2.2 计算训练集上的最大误差
[公式]

2.3 计算每个样本的相对误差:
[公式]

2.4 计算回归误差率:
[公式]

2.5 计算弱学习器的系数
[公式]

2.6 更新样本集的权重分布为
[公式]

其中,[公式]是规范化因子

  1. 构建基本分类器的线性组合
    在这里插入图片描述

其中, 在这里插入图片描述

是所有 [公式]的中位数。

二,2: Adaboost算法的训练误差分析(了解)

(Adaboost的训练误差界) Adaboost算法最终分类器的训练误差界为:

[公式]

这里一定理说明可以在每一轮选取适当的 Gm 使得Zm最小,从而使得误差下降的最快。

(二分类问题Adaboost的训练误差界)

[公式]

这里, [公式]

推论:如果存在 [公式]
,对所有m 有 [公式]
,则

[公式]

这表明在此条件下,AdaBoost的训练误差是以指数速度下降的。

三,Adaboost算法解释

上面提到的弱学习器权重系数公式和样本权重系数更新公式其实是通过AdaBoost损失函数忒大出来的。
AdaBoost还有一种解释,即可认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法

3.1 前向分布算法

在这里插入图片描述

在这里插入图片描述

3.2 前向分布算法与AdaBoost

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上推导了这么多,重要的是了解到AdaBoost算法的算是函数是:
在这里插入图片描述
指数损失函数是一种用于分类的损失函数,有如下性质:
1>样本标签y -1/1
2>同号则小,异号则大

四,Adaboost算法的正则化

在这里插入图片描述

五,Adaboost总结

理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

Adaboost的主要优点有:

  1. Adaboost作为分类器时,分类精度很高
  2. 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
  3. 作为简单的二元分类器时,构造简单,结果可理解。
  4. 不容易发生过拟合

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

猜你喜欢

转载自blog.csdn.net/a18829292719/article/details/109618447