4. 集成学习(Ensemble Learning)Adaboost
1. 集成学习(Ensemble Learning)原理
2. 集成学习(Ensemble Learning)Bagging
3. 集成学习(Ensemble Learning)随机森林(Random Forest)
4. 集成学习(Ensemble Learning)Adaboost
5. 集成学习(Ensemble Learning)GBDT
6. 集成学习(Ensemble Learning)算法比较
7. 集成学习(Ensemble Learning)Stacking
1. 前言
前面我们已经详细的介绍了什么是集成学习,集成学习的种类有哪些,并且也介绍了集成学习里面相对比较简单的Bagging。今天我们开始涉及到集成学习里面比较难理解的Boosting中的Adaboost。
2. Boosting原理
Boosting算法的工作机制:
- 首先从训练集用初始权重训练出一个弱学习器1.
- 根据学习器1的学习误差率来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。
- 然后基于调整权重后的训练集来训练弱学习器2。
- 如此重复进行,直到弱学习器数达到事先指定的数目\(T\)。
- 最终将这\(T\)个弱学习器通过集合策略进行整合,得到最终的强学习器。
这里有几个相关概念:
- 学习误差率\(e\)
- 学习器权重\(\alpha\)
- 更新下一次训练样本的权重\(D\)
- 最后如何结合所有的弱学习器
我们通过详细介绍Adaboost的分类算法,一步一步的讲解上面提到的几个过程
3. Adaboost
我们的训练样本是
\[
T=\{(x_1,y_1),(x_2,y_2), ...(x_m,y_m)\}
\]
训练集的第\(k\)个弱学习器的输出权重为:
\[
D(k) = (w_{k1}, w_{k2}, ...w_{km}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m
\]
- 首先我们看下第\(k\)个弱学习器的错误率\(e_k\),因为我们是二分类问题,所以我们的的错误率是所有误分类的样本的权重和如下,其中求和的是误分类的样本的集合。
\[
e_k = \sum\limits_{i=1}^mw_{ki}
\]
- 得到了\(e_k\),我们就能去计算弱学习器在最后结合的时候的权重系数\(\alpha_k\),根据下面的公式,我们发现,当\(e_k\)越大,则\(\alpha_k\)越小。这也符合大家的直观感受。
\[
\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}
\]
- 更新下一个弱学习器的权重\(D(k+1) = (w_{(k+1)1}, w_{(k+1)2}, ...w_{(k+1)m})\)。
\[
w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i))
\]
\[
Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i))
\]
上面公式中\(G_k()\)是第\(k\)个弱学习器,从\(w_{(k+1)i}\)计算公式可以看出,如果第\(i\)个样本分类错误,则\(y_iG_k(x_i)<0\),导致样本的权重在第\(k+1\)个弱分类器中增大,如果分类正确,则权重在第\(k+1\)个弱分类器中减少.具体为什么采用样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。
- 还剩下一个如何组合所有弱学习器的问题
\[
f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x))
\]
4. Adaboost分类损失函数
首先我们定义一个Adaboost的损失函数为:
\[
arg\;min\sum\limits_{i=1}^{m}exp(-y_if_{k}(x))
\]
其中
\[
f_{k-1}(x) = \sum\limits_{i=1}^{k-1}\alpha_iG_{i}(x)
\]
\[
f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)
\]
把\(f_k(x)\)带入损失函数得到
\[
arg\;min\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha_k G_k(x))]
\]
我们令\(w_{ki} = exp(-y_if_{k-1}(x))\), 它的值不依赖于\(\alpha, G\),因此与最小化无关,仅仅依赖于\(f_{k-1}(x)\),随着每一轮迭代而改变。
将这个式子带入损失函数,损失函数转化为
\[
arg\;min\sum\limits_{i=1}^{m}w_{ki}exp[-y_i\alpha G(x)]
\]
又因为我们可以计算
\[
G_k(x) = arg\;min\sum_{i=1}^mw_{ki}
\]
将\(G_k(x)\)带入损失函数,并对\(\alpha\)求导,使其等于0,则就得到了
\[
\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}
\]
最后看样本权重的更新。利用\(f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)\)和\(w_{ki} = exp(-y_if_{k-1}(x))\),即可得:
\[
w_{k+1,i} = w_{ki}exp[-y_i\alpha_kG_k(x)]
\]
5. Adaboost算法的正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为\(\nu\),对于前面的弱学习器的迭代
\[
f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)
\]
如果我们加上了正则化项,则有
\[
f_{k}(x) = f_{k-1}(x) + \nu\alpha_kG_k(x)
\]
\(\nu\)的取值范围为\(0 < \nu \leq 1\)。对于同样的训练集学习效果,较小的\(\nu\)意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
6. 总结
到这里Adaboost就写完了,前面有一个没有提到,就是弱学习器的类型。理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
这里对Adaboost算法的优缺点做一个总结。
Adaboost的主要优点有:
- Adaboost作为分类器时,分类精度很高
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 作为简单的二元分类器时,构造简单,结果可理解。
- 不容易发生过拟合
Adaboost的主要缺点有:
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
4. 集成学习(Ensemble Learning)Adaboost的更多相关文章
- 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)
零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...
- 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting
本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...
- 集成学习(Ensembling Learning)
集成学习(Ensembling Learning) 标签(空格分隔): 机器学习 Adabost 对于一些弱分类器来说,如何通过组合方法构成一个强分类器.一般的思路是:改变训练数据的概率分布(权值分布 ...
- 集成学习之Boosting —— AdaBoost实现
集成学习之Boosting -- AdaBoost原理 集成学习之Boosting -- AdaBoost实现 AdaBoost的一般算法流程 输入: 训练数据集 \(T = \left \{(x_1 ...
- 7. ensemble learning & AdaBoost
1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...
- 6. Ensemble learning & AdaBoost
1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...
- 集成学习之Boosting —— AdaBoost原理
集成学习大致可分为两大类:Bagging和Boosting.Bagging一般使用强学习器,其个体学习器之间不存在强依赖关系,容易并行.Boosting则使用弱分类器,其个体学习器之间存在强依赖关系, ...
- 集成学习原理:Adaboost
集成学习通过从大量的特征中挑出最优的特征,并将其转化为对应的弱分类器进行分类使用,从而达到对目标进行分类的目的. 核心思想 它是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器), ...
- 集成学习ensemble
集成学习里面在不知道g的情况下边学习边融合有两大派:Bagging和Boosting,每一派都有其代表性算法,这里给出一个大纲. 先来说下Bagging和Boosting之间的相同点:都是不知道g,和 ...
- 集成学习(ensemble method)--基于树模型
bagging方法(自举汇聚法 bootstrap aggregating) boosting分类:最流行的是AdaBoost(adaptive boosting) 随机森林(random fores ...
随机推荐
- 【Oracle】Oracle中复合数据类型
1,常见的操作数据库的技术有那些 jdbc 使用java 访问数据库的技术 PLSQL (procedure 过程化sql) 在数据库内部操作数据的技术 proc/c++ ...
- Oracle->mysql碰到的问题
1.大小写敏感的区别(如果服务器OS是linux). 在oracle中一般情况下不区分大小写.有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:in ...
- php,perl计算crc
PHP版: <?php echo getCrc32("/var/www/html/resource/koc_data/2013_03/01/1ck65e.koc") ; # ...
- GGSN与SGSN简介
GPRS核心网是GPRS(general packet radio service)系统的核心部分,GPRS的作用在于传输IP包,广泛应用于2G的GSM和3G的WCDMA网络. 1.GPRS核心网基本 ...
- Python 文件 isatty() 方法
概述 Python 文件 isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False. 语法 isatty() 方法语法如下: fileObject.isatty ...
- df -h和du -sh显示结果不一样的原因及解决
一.背景:一台2T硬盘的mysql服务器,保存电话的CDR信息.按照历史数据的水平,一个月能生成20+GB的文件.然而短短的半年时间,满了?! 登录服务器看谁占了这么大的空间?好吧,slow-quer ...
- 开关电源9v,1A
- 百度地图 隐藏百度地图Logo
/* 隐藏百度Logo */ .BMap_cpyCtrl, .anchorBL {display: none; }
- VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示
1.VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示 2.以前也有Excel导入通用功能,但速度有些慢一会把两种实现方式都提供出为参考对比. 一.原通用导入exc ...
- Jmeter 线程组、运行次数参数化
Jmeter的jmx文件保存了线程数和运行次数等参数,这个参数可以在命令行中传入参数的方式来修改数值 步骤如下 1.生成线程和运行次数的参数 Jmeter选项中函数助手对话框,选中__P参数,这个参数 ...