参考:
一、概述
元算法,或者说集成方法是对其他算法进行组合的一种方式。
接下来我们将集中关注一个称作AdaBoost的最流行的元算法。
使用集成方法时会有多种形式:可以是不同算法的集成,也可以是同一算法在不同设置下的集成,还可以是数据集不同部分分配给不同分类器之后的集成。
-
优缺点
优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。
缺点:对离群点敏感。 -
适用数据类型:
数值型和标称型数据。 -
AdaBoost的一般流程
- 收集数据:可以使用任意方法。
- 准备数据:依赖于所使用的弱分类器类型,我们使用的是单层决策树,这种分类器可以处理任何数据类型。作为弱分类器,简单分类器的效果更好。
- 分析数据:可以使用任意方法。
- 训练算法:AdaBoost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。
- 测试算法:计算分类的错误率。
- 使用算法:同SVM一样,AdaBoost预测两个类别中的一个。如果想把它应用到多个类别的场合,那么就要像多类SVM中的做法一样对AdaBoost进行修改。
二、相关原理
1.bagging与boosting
自举汇聚法(bootstrap aggregating),也称为bagging方法,是在从原始数据集选择S次后得到S个新数据集的一种技术。
每个数据集都是通过在原始数据集中随机选择一个样本来进行替换而得到的。这里的替换就意味着可以多次地选择同一样本,即新数据集中可以有重复的值,而原始数据集的某些值在新集合中则不再出现。最后新数据集和原数据集的大小相等。
在S个数据集建好之后,将某个学习算法分别作用于每个数据集就得到了S个分类器。当我们要对新数据进行分类时,就可以应用这S个分类器进行分类。与此同时,选择分类器投票结果中最多的类别作为最后的分类结果。
当然,还有一些更先进的bagging方法,比如随机森林(random forest)。
boosting是一种与bagging类似的技术。
不论是在boosting还是bagging当中,所使用的多个分类器的类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练出的分类器的性能来进行训练。
boosting是通过集中关注被已有分类器错分的那些数据来获得新的分类器。
由于boosting分类的结果是基于所有分类器的加权求和结果的,因此boosting与bagging不太一样。
bagging中的分类器权重是相等的,而boosting中的分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。
Bagging、Boosting二者之间的区别:
1.样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2.样例权重:
Bagging:使用均匀取样,每个样例的权重相等。
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3.预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4.并行计算:
Bagging:各个预测函数可以并行生成。
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
————————————————
版权声明:本文为优快云博主「Jack-Cui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/c406495762/article/details/78212124
boosting方法拥有多个版本,我们将只关注其中一个最流行的版本AdaBoost。
2.AdaBoost算法
(1)训练算法:基于错误提升分类器的性能
AdaBoost是adaptive boosting(自适应boosting)的缩写
AdaBoost运行过程如下:
训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量D。
一开始,这些权重都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重将会降低,而第一次分错的样本的权重将会提高。为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重值 α \alpha α ,这些 α \alpha α 值是基于每个弱分类器的错误率进行计算的。其中,错误率ε的定义为:
而 α \alpha α 的计算公式如下:
α = 1 2 l n 1 − ε ε \alpha =\frac{1}{2}ln\frac{1-\varepsilon }{\varepsilon } α=21lnε1−ε
计算出alpha值之后,可以对权重向量D进行更新,以使得那些正确分类的样本的权重降低而错分样本的权重升高。
D的计算方法如下:
在计算出D之后,AdaBoost又开始进入下一轮迭代。
AdaBoost算法会不断地重复训练和调整权重的过程,直到训练错误率为0或者弱分类器的数目达到用户的指定值为止。
三、代码实现
1.基于单层决策树构建弱分类器
单层决策树(decision stump),也称决策树桩,它是一种简单的决策树,通过给定的阈值,进行分类。
首先按惯例建立一个示范数据集
import numpy