写在前面
前面博客写过 bagging 算法的实现方式,并且提到集成算法的其他三类模型组合方式,此文主要简述Boosting 中Adaboost / GBDT 的实现方式.
算法主要特点
Boosting:
- 顺序集合:尝试添加在之前模型缺失的地方做得很好的新模型
- 旨在减少偏差,而不是方差
- 适合低方差高偏差模型
- 基于树的方法的示例是梯度提升
图例描述
接下来进入主题
1. Adaboost 算法:
WIKI百科:
AdaBoost,即Adaptive Boosting,译为自适应增强,其1995年由Freund和Schapire提出的。AdaBoost算法是提升方法(Boosting)的一种,那什么是提升方法呢?提升方法是一种将弱学习算法提升为强学习算法的一种统计学习方法,在分类问题中,它通过反复修改训练样本的权值分布,构建一系列基本分类器(弱分类器),并将这些基本分类器线性组合起来,构建一个强分类器,以提高分类性能。而AdaBoost算法便是提升方法中的代表性算法,另外一个是提升树方法(Boosting Tree)。
通俗理解:
即Adaptive boosting,是一种迭代算法。每轮迭代中会在训练集上产生一个新的分类器,然后使用该分类器对所有样本进行分类,以评估每个样本的重要性(informative)。 具体来说,算法会为每个训练样本赋予一个权值。每次用训练完的新分类器标注各个样本,若某个样本点已被分类正确,则将其权值降低;若样本点未被正确分类,则提高其权值。权值越高的样本在下一次训练中所占的比重越大,也就是说越难区分的样本在训练过程中会变得越来越重要。 整个迭代过程直到错误率足够小或达到一定次数为止。
1.1 实现原理:
数学基础
图例描述
实现描述
- 初始化样本的权值为1/n。
- 基于样本与权值训练弱分类器;
- 根据分类器对样本进行判别,如果判别正确,此样本的权值降低,判别错误,降低样本的权值,同时 根据识别率计算出此分类器的权值;
- 利用改变权值的样本训练下一个分类器;
- 循环得到N个分类器与其对应的权值;
- 基于加权的分类器组合成为最终的模型
adaboost算法模型简单,不容易过拟合,无需调参,优点挺多。但是其实也是需要根据样本类型来使用。
1.2 实例分析:
实例环境
sklearn + anconda + jupyter
实例步骤
- 数据:可以采用 datasets 的数据,在此作者使用的是自己整理的股票行情
- 训练、测试数据归一化
- 参数寻优可以使用GridSearch,在此不作赘述
参数列表: