提升方法(Boosting)算法笔记(一)-Python

出差结束,继续好好学习机器学习基础算法,今天了解提升方法(Boosting),主要侧重于AdaBoost算法,同样理论知识来自Peter Harrington的《机器学习实战》和李航的《统计学习方法》,非常感谢这些优秀人物和优秀书籍,正文开始啦


提升算法(Boosting)

考虑前几篇提到的分类算法,各有利弊,如果可以有效地将这些分类器结合起来,各取所长,应该也是不错的选择。提升算法正是基于这样的思想,但是它不是简单、均等的将不同分类器的结果相加,而是基于全部分类器的加权求和结果,而这个权重代表的是该分类器在上一轮迭代中的成功度。历史上,Kearns和Valiant首先提出了'强可学习(strongly learnable)'和'弱可学习(weakly learnable)'的概念。指出:在概率近似正确(probably approximately correct, PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。这样一来,问题便成为,在学习中,如果已经发现了'弱学习算法',那么能否将它提升(boost)为'强学习算法'。大家知道,发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(AdaBoost algorithm,adaptive boosting algorithm)。

AdaBoost算法工作原理:开始时,赋予训练数据中的每个样本一个相等的初始权重值,这些权重构成了向量D。首先在训练数据上训练出一个弱分类器并计算该分类的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练中,将第一次分对的样本的权重降低,将第一次分错的样本的权重提高。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。反复学习,不断调整样本权重,最终得到一个强分类器。

提升方法(Boosting)算法笔记(一)-Python_第1张图片
图1 AdaBoost算法实现流程

最终,AdaBoost算法的分类器是:

图2 AdaBoost算法分类器的函数表示

举栗子-AdaBoost算法模型:

1)准备数据

提升方法(Boosting)算法笔记(一)-Python_第2张图片
图3 准备数据

2)准备一些后续用到的工具函数

提升方法(Boosting)算法笔记(一)-Python_第3张图片
图4 工具函数

在此,要先介绍下“单层决策树”。单层决策树(decision stump,也称决策树桩)是一种简单的决策树,它仅基于单个特征来做决策,由于这棵树只有一次分裂过程,因此实际就是一个树桩。而图4中的stumpClassify函数就是基于这一思想,在分类时,根据某种比较规则,如less than (lt) 或者 great than (gt)等,判断属性值与阈值的关系。buildStump函数是构建单层决策树,包括三层嵌套循环。

3)基于单层决策树的AdaBoost算法

提升方法(Boosting)算法笔记(一)-Python_第4张图片
图5 基于单层决策树的AdaBoost算法

此算法主要流程为:在限定最大运算次数的限制下,分别计算alpha、weights、和errorRate,当errorRate=0时跳出循环,此过程中的计算主要是依据图1中的计算式。实际分类器不是仅限于单层决策树,任何一种分类算法都可以作为基分类器。

4)AdaBoost分类函数

提升方法(Boosting)算法笔记(一)-Python_第5张图片
图6 基于单层决策树的AdaBoost算法的分类函数

好哒,关于提升方法的基础学习先到这里,等在下一阶段的深入学习中再往深挖掘,希望对大家有帮助,欢迎大神随时指点。谢谢

你可能感兴趣的:(提升方法(Boosting)算法笔记(一)-Python)