探究算法细节,深入了解算法原理
自适应提升算法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二分类问题算法流程*
输入:
- 训练集
- 弱分类器算法
- 迭代次数
输出:
- 最终的强分类器
(1)初始化训练集样本权重
(2)对于 ,使用具有权重
的训练集来训练模型,得到弱分类器
(3)计算的分类误差率
(4)计算弱分类器的权重系数
表示弱分类器
在最终的强分类器
- 当
时,
,且
随着
的减小而增大。
- 为什么采用这个权重系数,AdaBoost算法的损失函数优化部分讲。
(5)更新训练集的权重分布
其中是规范因子:
即:
- 如果第
个样本分类错误,则
,导致样本权重在第
- 为什么采用样本权重更新方式,AdaBoost算法的损失函数优化部分讲
(6)构建最终的强分类器
的符号决定实例
3. AdaBoost多分类问题
多分类与二分类相似,主要区别在于弱分类器的系数
AdaBoost SAMME算法,弱分类器的系数为:
其中 R 为类别数,如果是二分类,R=2,与前面一致。
4. AdaBoost回归问题算法流程
AdaBoost回归问题有很多变种,这里以 AdaBoost R2 算法为准。
(1)初始化训练集样本权重
(2)对于 ,使用具有权重
的训练集来训练模型,得到弱学习器
(3)计算训练集上的最大误差
(4)计算每个训练集样本的相对误差
- 如果是线性误差,
- 如果是平方误差,
- 如果是指数误差,
(5)计算回归误差率
(6)计算弱学习器系数
(7)更新训练集样本权重
这里
即
(8)构建最终的强学习器
其中, 是
中位数对应序号
对应的弱学习器。
结合策略与分类问题不同,取权重中位数对应的弱学习器,作为最终的强学习器
5. AdaBoost分类问题的损失函数优化
5.1 AdaBoost算法名称由来
【李航,统计机器学习 8.2节】
推论:如果存在 ,对所有
(
),则
AdaBoost 算法不需要知道下界 ,AdaBoost具有适应性,它能适应弱分类器各自的训练误差率,这是它的名称由来(适应的提升)
5.2 损失函数的定义
AdaBoost算法是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。
第轮强学习器
第轮强学习器
即
损失函数为指数函数
- 使用指数函数作为损失函数的原因:可微性,代替0-1损失函数作为优化目标
5.3 损失函数的优化
令 ,它的值不依赖于
,因此与最小化无关,仅仅依赖于
,随着每一轮的迭代而改变。
损失函数转化为:
(1)首先求 ,可以得到:
(2)将 带入损失函数,并对
(3)其中,
(4)样本权重更新
由 和
6. AdaBoost算法的正则化
为了防止过拟合,加入正则化,称为步长(learning rate),定义为
- 其中
,同样的训练集,较小的
意味着需要更多的弱学习器迭代次数。
- 通常用步长和最大迭代次数一起来决定算法的拟合效果。
7. AdaBoost 总结
7.1 二分类流程
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源码