机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)
文章目录
- 一、Boosting
- 1. 什么是boosting
- 2. 实现过程:
- 3. bagging集成与boosting集成的区别:
- 4. AdaBoost介绍
- 4.1 构造过程细节
- 4.2 关键点剖析
- 4.3 api介绍
- 二、GBDT介绍
- 1. Decision Tree:CART回归树
- 1.1 回归树生成算法(复习)
- 2. Gradient Boosting: 拟合负梯度
- 3. GBDT算法原理
一、Boosting
1. 什么是boosting
随着学习的积累从弱到强
简而言之:每新加入一个弱学习器,整体能力就会得到提升
代表算法:Adaboost,GBDT,XGBoost,LightGBM
2. 实现过程:
1.训练第一个学习器
2.调整数据分布
3.训练第二个学习器
4.再次调整数据分布
5.依次训练学习器,调整数据分布
6.整体过程实现
3. bagging集成与boosting集成的区别:
- 区别一:数据方面
- Bagging:对数据进行采样训练;
- Boosting:根据前一轮学习结果调整数据的重要性。
- 区别二:投票方面
- Bagging:所有学习器平权投票;
- Boosting:对学习器进行加权投票。
- 区别三:学习顺序
- Bagging的学习是并行的,每个学习器没有依赖关系;
- Boosting学习是串行,学习有先后顺序。
- 区别四:主要作用
- Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
- Boosting主要用于提高训练精度 (解决欠拟合,也可以说降低偏差)
4. AdaBoost介绍
建议参考:https://panjinquan.blog.csdn.net/article/details/70995333,这里面的例题讲的非常好,步骤十分详细
4.1 构造过程细节
步骤一:初始化训练数据权重相等,训练第一个学习器。
该假设每个训练样本在基分类器的学习中作用相同,这一假设可以保证第一步能够在原始数据上学习基本分类器H1(x)H_1(x)H1(x)
步骤二:AdaBoost反复学习基本分类器,在每一轮m=1,2,...,Mm=1,2,...,Mm=1,2,...,M顺次的执行下列操作:
(a) 在权值分布为DtD_tDt 的训练数据上,确定基分类器;
(b) 计算该学习器在训练数据中的错误率:
εt=P(ht(xt)≠yt)\varepsilon _t = P(h_t(x_t)\neq y_t)εt=P(ht(xt)=yt)
(c) 计算该学习器的投票权重:
αt=12ln(1−εtεt)\alpha _t=\frac{1}{2}ln(\frac{1-\varepsilon _t}{\varepsilon _t})αt=21ln(εt1−εt)
(d) 根据投票权重,对训练数据重新赋权
将下一轮学习器的注意力集中在错误数据上
重复执行a到d步,m次;
步骤三:对m个学习器进行加权投票
4.2 关键点剖析
如何确认投票权重?
如何调整数据分布?
4.3 api介绍
from sklearn.ensemble import AdaBoostClassifier
api链接:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier
二、GBDT介绍
理论知识建议参考:https://blog.csdn.net/XiaoYi_Eric/article/details/80167968
例题参考:https://blog.csdn.net/zpalyq110/article/details/79527653
GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算的上TOP3的算法。想要理解GBDT的真正意义,那就必须理解GBDT中的Gradient Boosting 和Decision Tree分别是什么?
1. Decision Tree:CART回归树
首先,GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。
- 为什么不用CART分类树呢?
- 因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。
在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度。
1.1 回归树生成算法(复习)
- 输入:训练数据集D:
- 输出:回归树f(x)f(x).
- 在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
(1)选择最优切分特征jj与切分点sss,求解
遍历特征jjj,对固定的切分特征jjj扫描切分点sss,选择使得上式达到最小值的对(j,s)(j,s)(j,s).(2)用选定的对(j,s)(j,s)(j,s)划分区域并决定相应的输出值:
(3)继续对两个子区域调用步骤(1)和(2),直至满足停止条件。
(4)将输入空间划分为M个区域R1,R2,,,,,,,,RMR_1, R_2, ,,,,,,, R_MR1,R2,,,,,,,,RM, 生成决策树:
2. Gradient Boosting: 拟合负梯度
梯度提升树(Grandient Boosting)是提升树(Boosting Tree)的一种改进算法,所以在讲梯度提升树之前先来说一下提升树。
先来个通俗理解:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。最后将每次拟合的岁数加起来便是模型输出的结果。
提升树算法:
(1)初始化f0(x)=0f_0(x)=0f0(x)=0
(2)对m=1,2,…,M
- (a)计算残差rmi=yi−fm−1(x),i=1,2,,,,,,,Nr_{mi}=y_i-f_{m-1}(x),i=1,2,,,,,,,Nrmi=yi−fm−1(x),i=1,2,,,,,,,N
- (b)拟合残差rmir_{mi}rmi学习一个回归树,得到hm(x)h_m(x)hm(x)
- (c)更新fm(x)=fm−1+hm(x)f_m(x) = f_{m-1}+h_m(x)fm(x)=fm−1+hm(x)
(3)得到回归问题提升树 fM(x)=∑m=1Mhm(x)f_M(x)=\sum_{m=1}^Mh_m(x)fM(x)=∑m=1Mhm(x)
上面伪代码中的残差是什么?
在提升树算法中,
假设我们前一轮迭代得到的强学习器是:ft−1(x)f_{t-1}(x)ft−1(x)
损失函数是:L(y,ft−1(x))L(y,f_{t-1}(x))L(y,ft−1(x))
我们本轮迭代的目标是找到一个弱学习器:ht(x)h_t(x)ht(x)
最小化让本轮的损失:L(y,ft(x))=L(y,ft−1(x)+ht(x))L(y,f_t(x))=L(y,f_{t-1}(x)+h_t(x))L(y,ft(x))=L(y,ft−1(x)+ht(x))
当采用平方损失函数时:
这里,r=y−ft−1(x)r=y-f_{t-1}(x)r=y−ft−1(x)是当前模型拟合数据的残差(residual)。
所以,对于提升树来说只需要简单地拟合当前模型的残差。
回到我们上面讲的那个通俗易懂的例子中,第一次迭代的残差是10岁,第二 次残差4岁,
当损失函数是平方损失和指数损失函数时,梯度提升树每一步优化是很简单的,但是对于一般损失函数而言,往往每一步优化起来不那么容易。
针对这一问题,Friedman提出了梯度提升树算法,这是利用最速下降的近似方法,其关键是利用损失函数的负梯度作为提升树算法中的残差的近似值。
那么负梯度长什么样呢?
第t轮的第i个样本的损失函数的负梯度为:
此时不同的损失函数将会得到不同的负梯度,如果选择平方损失:
负梯度为:
此时我们发现GBDT的负梯度就是残差,所以说对于回归问题,我们要拟合的就是残差。
那么对于分类问题呢?
- 二分类和多分类的损失函数都是logloss。
本文以回归问题为例进行讲解。
3. GBDT算法原理
上面两节分别将Decision Tree和Gradient Boosting介绍完了,下面将这两部分组合在一起就是我们的GBDT了。
GBDT算法:
(1)初始化弱学习器
(2)对m=1,2,...,Mm=1,2,...,Mm=1,2,...,M有:
(a)对每个样本i=1,2,…,N,计算负梯度,即残差
(b)将上步得到的残差作为样本新的真实值,并将数据(xi,rim),i=1,2,..N(x_i,r_{im}), i=1,2,..N(xi,rim),i=1,2,..N作为下棵树的训练数据,得到一颗新的回归树fm(x)f_{m} (x)fm(x)其对应的叶子节点区域为Rjm,j=1,2,...,JR_{jm}, j =1,2,..., JRjm,j=1,2,...,J。其中JJJ为回归树t的叶子节点的个数。
(c)对叶子区域j=1,2,…J计算最佳拟合值
(d)更新强学习器
(3)得到最终学习器
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)相关推荐
- 【机器学习】集成学习之boosting AdaBoost
Boosting Boosting策略在上一篇中有提到过,这里再说一遍. Boosting策略的核心思想就是对错误分类的样本投入更大的关注.采用的是加法模型和向前分步算法,向前分步算法中的每一步都会改 ...
- 机器学习之集成学习(Boosting算法、Bagging算法、Stacking算法)总结
1.集成学习概述 机器学习分为有监督学习算法和无监督学习算法.在有监督学习中,我们的目标是学习一个稳定的且各方面都表现较好的模型.但是,实际情况往往不理想,有时我们只能得到多个在某些方面表现比较好的& ...
- 【机器学习】集成学习:Boosting、Bagging 和 Stacking
文章目录 一.集成学习概述 二.Boosting 三.Bagging 四.Stacking 借鉴 一.集成学习概述 基分类器可能是同构的,也可能是异构的. 基分类器应该"好而不同" ...
- 机器学习:集成学习之boosting
1.Boosting介绍 Boosting体现了提升的思想: 每一个训练器重点关注前一个训练器不足的地方进行训练 通过加权投票的方法得出最后的预测结果 2.Boosting和Bagging对比 区别一 ...
- 【机器学习】集成学习(Boosting)——XGBoost算法(理论+图解+公式推导)
- 【机器学习】集成学习知识点总结一
集成学习算法概述 严格意义上来说,集成学习算法不算是一种机器学习算法,而更像是一种优化手段或策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策.有人把它称为机器学习中的"屠龙刀&q ...
- 【机器学习】集成学习投票法:投票回归器(VotingRegressor) 投票分类器(VotingClassifier)
前言 投票回归器和投票分类器都属于集成学习.在[机器学习]集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法.投票法和学习法.sklearn.ensemble库中的Voting Clas ...
- 【机器学习】集成学习—Boosting—GBM(Gradient Boosting Machine)解析
[机器学习]集成学习-Boosting-GBM(Gradient Boosting Machine)解析 文章目录 [机器学习]集成学习-Boosting-GBM(Gradient Boosting ...
- 集成学习--基础概述
集成学习 1.集成学习概述 2.集成学习之基学习器 3.Bagging 4.Boosting 5.结合策略 5.1 均值法 5.2 投票法 5.3 学习法 参考资料 1.集成学习概述 简单来说,集成学 ...
最新文章
- mysql rand()产生随机整数范围及方法
- mysql教程日志_mysql日志文件的详细说明
- linux c不占用cpu的延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
- JSP内置对象(request、session、application)
- 对比表示学习必知的几种训练目标
- Spring Boot——基于OkHTTP的GitHub第三方登录DEMO
- 注意| .NET开发者大会防疫须知 !
- nginx 实用配置问题总结
- Ubuntu 14.04下安装Redis报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决
- stopping hbasecat: /tmp/hbase-elastic-master.pid: 没有那个文件或目录
- CCF202006-4 1246【矩阵快速幂】(100分题解链接)
- WGS84 与 北京54 坐标系互转
- H5 - 实现半颗星评分功能
- InputArray和OutputArray的那些事
- StopWatch简单使用
- P3084 [USACO13OPEN]照片Photo(差分约束)
- html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
- Django--Models
- 复现腾讯表格识别解析| 鹅厂技术
- 先行发生原则-Happends-Before