机器学习算法(三):Adaboost算法
来源:互联网 发布:中国什么发生战争 知乎 编辑:程序博客网 时间:2024/05/22 09:04
Boosting算法
集成学习
集成学习的一般结构:先产生一组个体学习器,再使用某种策略将它们结合起来。个体学习器通常由一个现有的算法从训练数据中产生。集成学习既可以包含相同类型的个体学习器,也可以包含不同类型的个体学习器。
集成学习通过将多个学习器进行结合,常可以获得比一般学习器显著优越的泛化性能。这对弱分类器(指泛化性能略优于随机猜测的学习器)尤为明显,因此集成学习的很多理论研究都是针对弱分类器进行的。虽然从理论上来说使用弱分类器集成足以获得好的性能,但在实践中出于种种考虑,人们往往会使用比较强的学习器。
假设基分类器的错误率相互独立,随着集成中基分类器数目的增大,集成的错误率将指数级下降,最终趋向于0。事实上,它们显然不可能相互独立。要获得好的集成效果,个体学习器应『好而不同』,即个体学习器要有一定的准确性,并且要有多样性,即学习器之间要有差异。这两者之间也是存在冲突的。在准确性很高之后,要增加多样性就需要牺牲准确性。事实上,如何产生并结合『好而不同』的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,目前集成学习方法大致可以分为两大类。个体学习器之间存在强依赖关系,必须串行生成序列化方法。以及个体学习器之间不存在强依赖关系,可同时生成并行化方法。前者的代表是Boosting,后者的代表是Bagging和随机森林算法。关于这两类算法,将使用两篇博客来介绍。
强可学习与弱可学习
强可学习:在概率近似正确学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的。
弱可学习:一个概念,如果存在一个多项式的学习算法能够正确学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。
后来证明强可学习与弱可学习是等价的。也就是说,在概率近似正确学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
通常发现弱可学习算法通常要比发现强可学习算法容易的多。集成学习就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。
Boosting算法简介
提升方法基于这样一种思想:对于复杂的任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
它改变训练数据分布的方法是:提高那些前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。对于将一系列弱分类器组合称强分类器的方法是:加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
Adaboost作为提升方法的典型代表,把多个不同的决策树用一种非随机的方式组合起来,表现出惊人的性能。其优点如下:
具有很高的精度;
Adaboost提供的是一种框架,可以使用各种方法来构建子分类器;
当使用简单分类器时,计算出的结果是可以理解的,而且弱分类器的构造特别简单;
简单,不用做特征筛选
不用担心overfitting
算法的具体过程
假设给定一个二分类的训练数据集
T={
其中,每个样本点由实例与标记组成。算法的具体过程如下:
输入:训练数据集T;弱学习算法
输出:最终分类器
(1) 初始化训练数据的权值分布
(2) 对
(a) 使用具有权值分布
(b) 计算
(c) 计算
(d) 更新训练数据的权值分布
其中,
它使
(3) 构建基本分类器的线性组合
得到最终分类器
算法解释
在此对算法过程中的一些关键点做一些解释:
在计算分类器
Gm(x) 的系数αm 时,当em≤12 时,αm≥0 ,表示该分类器的效果要比随机预测的好时,才会在最终的分类器中发挥正的效果。并且αm 随着em 的减小而增大。为什么在每次迭代时,都是将错误分类点的权值增大?提高错误点的权值,当下一次分类器再次错分了这些点时,会提高整体的错误率,这样会导致分类器的
αm 变小,最终导致这个分类器在整个混合分类器的权值变低。通过权值的改变,也使得每一次学习到的弱分类器具有较为显著的差异。在更新训练数据的概率分布时,我们可以将式子写成如下形式:
wm+1,i=⎧⎩⎨⎪⎪wmiZme−αm,Gm(xi)=yiwmiZmeαm,Gm(xi)≠yi
由上式可知,误分类样本的权值被放大e2αm=em1−em 倍。不改变所给训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是Adaboost算法的一个特点。注意到,这里所有
αm 的和并不为1。- 对于无法接受带权样本的基学习算法,则可以通过重采样法来处理。即在每一轮学习中,根据样本分布对训练数据重新进行采样,再用重新采样的数据集对基学习器进行训练。
- Boosting主要关注偏差降低,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
实例
下面结合一个具体的例子,来看看Adaboost算法的具体过程。首先是训练数据的初始分布:
图中,”+”和”-“分别表示两种类别,使用水平或是垂直的直线作为弱分类器。
第一步:
其中,画圈的样本表示被错误分类的。在右边图中,变大了的”+”表示该训练数据的权值被增大了。
第二步:
第三步:
将所有弱分类器组合成最终的分类器:
从图中可以看出,最终的分类器能够将所有的训练数据都正确分类。
算法的改进
算法的改进有如下的方向:
调整权值更新的方法,以达到提升分类器性能,减缓退化效果。
改进训练方法,使能更高效地进行扩展。
结合其他算法和一些额外的信息而产生新算法,达到提高精度的目的。
写在最后
本篇博客中的部分内容源自《统计学习方法》、《机器学习》(周志华)。
- 机器学习算法(三):Adaboost算法
- 机器学习算法(三)-AdaBoost
- 机器学习算法-Adaboost
- 机器学习-AdaBoost算法
- 机器学习--AdaBoost算法
- 机器学习算法-Adaboost
- 【机器学习】AdaBoost算法详解
- 机器学习--AdaBoost元算法
- 【机器学习算法】之Adaboost
- 机器学习-adaboost元算法
- 机器学习之Adaboost算法
- 机器学习算法6-AdaBoost元算法
- 机器学习(machine learning)之AdaBoost算法
- 白话机器学习算法(二十二)Adaboost
- 白话机器学习算法(二十二)Adaboost
- 机器学习(machine learning)之AdaBoost算法
- 机器学习(machine learning)之AdaBoost算法
- 机器学习(machine learning)之AdaBoost算法
- 牛腩新闻发布系统小总结
- 集合Collection
- 超级计算机在海洋信息系统中应用
- C++类中public,private和protected的作用详解
- 15HD_OJ题——Rightmost Digit
- 机器学习算法(三):Adaboost算法
- 【QT5】【错误码】查找工具
- C++调用exe文件
- hdu 3234 异或(加权并查集)
- PHP CPP
- Spring error at ::0 can't find referenced pointcut myMethod异常
- jspdf + highcharts 实现导出存在highcharts图表的html页面
- 面向对象程序设计思想&继承与关键字(5.22)
- 集团信息化之路 在线销售系统及在线收款系统成功签约