探究算法细节,深入了解算法原理


自适应提升算法AdaBoost

  • 1. Boosting算法原理
  • 1.1 Boosting原理
  • 1.2 Boosting方法的4个问题
  • 2. AdaBoost二分类问题算法流程*
  • 3. AdaBoost多分类问题
  • 4. AdaBoost回归问题算法流程
  • 5. AdaBoost分类问题的损失函数优化
  • 5.1 AdaBoost算法名称由来
  • 5.2 损失函数的定义
  • 5.3 损失函数的优化
  • 6. AdaBoost算法的正则化
  • 7. AdaBoost 总结
  • 7.1 二分类流程
  • 7.2 AdaBoost的优缺点
  • 8. sklearn.ensemble.AdaBoost
  • 8.1 AdaBoostClassifier和AdaBoostRegressor参数
  • 8.2 弱学习器参数


1. Boosting算法原理

自适应权重模块是什么 自适应提升算法_损失函数

1.1 Boosting原理

  • 首先从训练集用初始权重训练出一个弱学习器1
  • 根据弱学习器1的学习误差率来更新训练样本的权重,使得错误分类的样本权重增加(下一轮更受关注),正确分类的样本权重减小。
  • 基于调整权重后的训练集来训练弱学习器2
  • 重复进行,直到弱学习器个数达到指定数T,将T个弱学习器通过结合策略得到最终的强学习器。

1.2 Boosting方法的4个问题

1)如何计算学习误差率e?

2)如何得到弱学习器权重系数α?

3)如何更新样本权重D?

4)使用何种结合策略

2. AdaBoost二分类问题算法流程*

输入:

  • 训练集 自适应权重模块是什么 自适应提升算法_损失函数_02
  • 弱分类器算法
  • 迭代次数 自适应权重模块是什么 自适应提升算法_损失函数_03

输出:

  • 最终的强分类器 自适应权重模块是什么 自适应提升算法_损失函数_04

(1)初始化训练集样本权重

自适应权重模块是什么 自适应提升算法_算法原理_05

(2)对于 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_06,使用具有权重自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_07的训练集来训练模型,得到弱分类器自适应权重模块是什么 自适应提升算法_算法原理_08

(3)计算自适应权重模块是什么 自适应提升算法_算法原理_08的分类误差率

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_10

自适应权重模块是什么 自适应提升算法_算法原理_11

  • 自适应权重模块是什么 自适应提升算法_损失函数_12

(4)计算弱分类器自适应权重模块是什么 自适应提升算法_算法原理_08的权重系数

自适应权重模块是什么 自适应提升算法_权重_14

  • 自适应权重模块是什么 自适应提升算法_算法原理_15 表示弱分类器 自适应权重模块是什么 自适应提升算法_损失函数_12 在最终的强分类器 自适应权重模块是什么 自适应提升算法_损失函数_04
  • 自适应权重模块是什么 自适应提升算法_损失函数_18 时,自适应权重模块是什么 自适应提升算法_损失函数_19,且 自适应权重模块是什么 自适应提升算法_算法原理_15 随着 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_21的减小而增大。
  • 为什么采用这个权重系数,AdaBoost算法的损失函数优化部分讲。

(5)更新训练集的权重分布

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_22

其中自适应权重模块是什么 自适应提升算法_损失函数_23是规范因子:

自适应权重模块是什么 自适应提升算法_权重_24

即:

自适应权重模块是什么 自适应提升算法_损失函数_25

  • 如果第 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_26 个样本分类错误,则 自适应权重模块是什么 自适应提升算法_权重_27,导致样本权重在第 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_28
  • 为什么采用样本权重更新方式,AdaBoost算法的损失函数优化部分讲

(6)构建最终的强分类器

自适应权重模块是什么 自适应提升算法_算法原理_29

  • 自适应权重模块是什么 自适应提升算法_算法原理_15
  • 自适应权重模块是什么 自适应提升算法_损失函数_04 的符号决定实例 自适应权重模块是什么 自适应提升算法_权重_32

3. AdaBoost多分类问题

多分类与二分类相似,主要区别在于弱分类器的系数 自适应权重模块是什么 自适应提升算法_权重_33

AdaBoost SAMME算法,弱分类器的系数为:

自适应权重模块是什么 自适应提升算法_权重_34

其中 R 为类别数,如果是二分类,R=2,与前面一致。

4. AdaBoost回归问题算法流程

AdaBoost回归问题有很多变种,这里以 AdaBoost R2 算法为准。

(1)初始化训练集样本权重

自适应权重模块是什么 自适应提升算法_算法原理_05

(2)对于 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_06,使用具有权重自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_07的训练集来训练模型,得到弱学习器自适应权重模块是什么 自适应提升算法_算法原理_08

(3)计算训练集上的最大误差

自适应权重模块是什么 自适应提升算法_权重_39

(4)计算每个训练集样本的相对误差

  • 如果是线性误差,自适应权重模块是什么 自适应提升算法_权重_40
  • 如果是平方误差,自适应权重模块是什么 自适应提升算法_损失函数_41
  • 如果是指数误差,自适应权重模块是什么 自适应提升算法_权重_42

(5)计算回归误差率

自适应权重模块是什么 自适应提升算法_损失函数_43

(6)计算弱学习器系数

自适应权重模块是什么 自适应提升算法_算法原理_44

(7)更新训练集样本权重

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_45

这里 自适应权重模块是什么 自适应提升算法_损失函数_23

自适应权重模块是什么 自适应提升算法_损失函数_47

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_48

(8)构建最终的强学习器

自适应权重模块是什么 自适应提升算法_权重_49

其中,自适应权重模块是什么 自适应提升算法_权重_50自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_51 中位数对应序号自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_52对应的弱学习器。

结合策略与分类问题不同,取权重中位数对应的弱学习器,作为最终的强学习器

5. AdaBoost分类问题的损失函数优化

5.1 AdaBoost算法名称由来

【李航,统计机器学习 8.2节】
推论:如果存在 自适应权重模块是什么 自适应提升算法_算法原理_53,对所有 自适应权重模块是什么 自适应提升算法_损失函数_54自适应权重模块是什么 自适应提升算法_权重_55),则
自适应权重模块是什么 自适应提升算法_算法原理_56

AdaBoost 算法不需要知道下界 自适应权重模块是什么 自适应提升算法_算法原理_57,AdaBoost具有适应性,它能适应弱分类器各自的训练误差率,这是它的名称由来(适应的提升)

5.2 损失函数的定义

AdaBoost算法是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。

自适应权重模块是什么 自适应提升算法_损失函数_58轮强学习器

自适应权重模块是什么 自适应提升算法_算法原理_59

自适应权重模块是什么 自适应提升算法_权重_60轮强学习器

自适应权重模块是什么 自适应提升算法_权重_61

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_62

损失函数为指数函数

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_63

  • 使用指数函数作为损失函数的原因:可微性,代替0-1损失函数作为优化目标

5.3 损失函数的优化

自适应权重模块是什么 自适应提升算法_算法原理_64

自适应权重模块是什么 自适应提升算法_损失函数_65,它的值不依赖于 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_66,因此与最小化无关,仅仅依赖于 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_67,随着每一轮的迭代而改变。

损失函数转化为:

自适应权重模块是什么 自适应提升算法_算法原理_68

(1)首先求 自适应权重模块是什么 自适应提升算法_算法原理_08,可以得到:

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_70

(2)将 自适应权重模块是什么 自适应提升算法_算法原理_08 带入损失函数,并对 自适应权重模块是什么 自适应提升算法_算法原理_72

自适应权重模块是什么 自适应提升算法_损失函数_73

(3)其中,自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_74

自适应权重模块是什么 自适应提升算法_权重_75

(4)样本权重更新

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_76自适应权重模块是什么 自适应提升算法_损失函数_77

自适应权重模块是什么 自适应提升算法_算法原理_78

6. AdaBoost算法的正则化

为了防止过拟合,加入正则化,称为步长(learning rate),定义为 自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_79

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_80

  • 其中 自适应权重模块是什么 自适应提升算法_权重_81,同样的训练集,较小的自适应权重模块是什么 自适应提升算法_权重_82意味着需要更多的弱学习器迭代次数。
  • 通常用步长和最大迭代次数一起来决定算法的拟合效果。

7. AdaBoost 总结

7.1 二分类流程

自适应权重模块是什么 自适应提升算法_损失函数_83

自适应权重模块是什么 自适应提升算法_权重_84

自适应权重模块是什么 自适应提升算法_权重_14

自适应权重模块是什么 自适应提升算法_权重_86

自适应权重模块是什么 自适应提升算法_自适应权重模块是什么_80

自适应权重模块是什么 自适应提升算法_算法原理_29

7.2 AdaBoost的优缺点

使用最广泛的Adaboost弱学习器是决策树和神经网络。
对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

Adaboost的主要优点有:

  • 分类精度很高
  • 可以使用各种模型来构建弱学习器,非常灵活
  • 二元分类时,构造简单,结果可理解
  • 不容易发生过拟合

Adaboost的主要缺点有:

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

8. sklearn.ensemble.AdaBoost

class sklearn.ensemble.AdaBoostClassifier(base_estimator=None,
n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)

class sklearn.ensemble.AdaBoostRegressor(base_estimator=None,
n_estimators=50, learning_rate=1.0, loss=’linear’, random_state=None)

8.1 AdaBoostClassifier和AdaBoostRegressor参数

  • base_estimator:弱学习器,默认CART树
  • n_estimators:弱学习器个数,太小容易欠拟合,太大容易过拟合,默认50
  • learning_rate:步长,正则化参数,与n_estimators一起调参
  • algorithm:可选SAMME和SAMME.R,前者用样本集分类效果作为弱学习器权重,后者用样本集分类的预测概率作为弱学习器权重。SAMME.R速度快。
  • loss:可选 linear、square、exponential

8.2 弱学习器参数

bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, 
min_samples_split=20, min_samples_leaf=5),
                         algorithm="SAMME",
                         n_estimators=200, learning_rate=0.8)
bdt.fit(X, y)

弱学习器为决策树时,可调 max_features,max_depth,min_sample_splits等

参考博客:
1. 李航. 统计学习方法 第8章 提升方法2. 集成学习之Adaboost算法原理小结3. sklearn adaboost文档4. sklearn adaboost源码