提升方法之AdaBoost、提升树(GBDT)
来源:互联网 发布:投影机融合软件 编辑:程序博客网 时间:2024/06/05 04:31
引言
提升方法是一种常用的学习方法(确切来说是一种基于统计的学习方法),并且广泛有效,基本思想是:不需针对学习任务(分类或者回归,为叙述方便,后文中以分类为例)直接学习出一个模型,而是先学习出一个模型,对样本进行分类,在该模型无法准确分类的样本上学习第二个模型,以此类推,直到所有样本都被准确的分类,最终的模型是将之前学习到的模型进行线性组合,可看做是“分而治之”的思想。
AdaBoost
强弱学习器
强学习器亦叫做强可学习:是指一个模型针对学习任务结果具有很高的准确性;
弱学习器亦叫做弱可学习:是指一个模型针对学习任务的结果比随机猜测的准确性好。
所以提升方法中学习到的一系列学习器都是弱学习器,那为什么不直接学习出强学习器,反而要去学习一些准确性不高的弱学习器呢?因为困难啊,很多任务无法或者很困难去学习出一个好的强学习器,我们就退而求其次,先学习出一些弱学习器,明显,学习出一个弱学习器比学习出一个强学习容易得多得多啊!然后想办法将这些弱学习器提升成强学习器,这也就是提升方法这个名词的由来,在提升方法中,下一轮关注的样本始终是上一次学习器未能准确分类的样本集合,为了使这些样本在下一轮的学习中获得更多关注,往往我们会加大这些错误分类样本的权重,使之受到更大的重视程度,而降低已经被正确分类的样本权重。
AdaBoost算法
不是一般性,我们这里考虑一个二分问题。假定一个二分训练数据集:
AdaBoost算法步骤:
输入: 训练集{(x_1,y_1),(x_2,y_2)...(x_n,y_n)} 弱学习器法输出: 最终分类器G(x)(1). 初始化训练样本的权值(weight)分布 D_1 = (w_11, ... w_1i,...w_1N), w1i=1/N, i=1,2,3...N(2). 对m=1,2...,M a.使用具有训练权值分布Dm的训练数据集学习,得到基本分类器: G_m(x)->{-1,+1} b.计算Gm(x)在训练数据集上的分类错误率 e_m=P(G_m(x_i)!=y_i)=sum(w_mi*I(G_m(xi)!=y_i)) c.计算G_m(x)的系数 a_m=1/2*log((1-e_m)/e_m) d.更新训练权值 D_m+1=(w_m+1_1,w_m+1_i,...,w_m+1_N) w_m+1_i=(w_mi/Z_m)exp(-a_m*y_i*G_m(x_i)) 这里Z_m是规范化因子 Zm=SUM(w_mi*exp(-a_m*y_i*G_m(x_i))(3). 构建线性组合 f(x)=sum(a_m*G_m(x))得到最终的分类器: G(x)=sign(f(x))=sign(sum(a_m*G_m(x)))
步骤分析:前向分步式算法
考虑AdaBoost的模型可表示为:>
>
> (1). 初始化
> (2). 对
>
>
> (3). 得到加法模型:
AdaBoost其实就是特殊的前向分步算法,用到的损失函数是指数函数。具体证明请参考相关资料(《统计学习方法》 李航)。
提升树模型(GBDT)
提升树是以决策树为基学习器的加法模型,在分类问题时用的是二叉分类树,在回归问题时用的二叉回归树,最简单的回归树可看做是一个根节点连接的左右子树的二叉树,即所谓的决策树桩。提升树的模型可表示为:
提升树算法
由于提升树是加法模型,则依然可以用前向分步式算法进行模型的求取,首先确定
对于分类问题,只需要将上述的AdaBoost的基学习器限定为二分类树,其余的和上述的AdaBoost内容无差。对于回归问题,可看做是对输入空间
其中
(1). 初始化$f_0(x)=0
(2). 对
m=1,2,..,M :
a . 计算残差r=y−fm−1(x)
b . 拟合残差,学习一个回归树,得到T(x;θm)
c . 更新fm(x)=fm−1(x)+T(x;θm)
(3). 得到回归提升树fM(x)=∑m=1MT(x;θm)
梯度提升方法
前面用到的损失函数都有比较好的性质,如平方误差、指数函数等,但对于一般的函数来说,问题可能会变得复杂些,针对这一问题Freidman提出了梯度提升(Gradient Boosting),这是利用最速下降的近似方法,其关键是利用损失函数的负梯度在当前模型的值
算法步骤:
(1). 初始化f0(x)=argminc∑i=1NL(yi,c)
(2). 对m=1,2,..,M :
a . 对于i=1,2,...,N , 计算rmi=−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)
b . 拟合rmi ,学习一个回归树的叶节点区域Rmj,j=1,2,...,J
c . 对j=1,2,...,J 计算Cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+C)
d . 更新fm(x)=fm−1(x)+∑Jj=1CmjI(x∈Rmj)
(3). 得到回归树:f(x)∗=fM(x)=∑m=1M∑j=1JCmjI(x∈Rmj)
参考文献
[1] 《统计学习方法》李航
[2].http://www.jianshu.com/c/415a64b18dcc?utm_source=desktop&utm_medium=notes-included-collection
- 提升方法之AdaBoost、提升树(GBDT)
- 提升方法:GBDT、XGBOOST、AdaBoost
- 提升Boost:GBDT & Xgboost & Adaboost
- Adaboost提升方法
- 提升方法及AdaBoost
- 提升方法AdaBoost
- 提升方法Adaboost
- 提升树GBDT详解
- 提升树GBDT 详解
- 提升树和GBDT
- 提升树GBDT详解
- 提升方法(Adaboost算法实现)
- 机器学习提升算法之Adaboost、GB、GBDT与XGBoost算法
- 提升方法 - 1 - Adaboost 算法
- 梯度提升树GBDT原理
- 梯度提升树GBDT原理
- 梯度提升树(GBDT)原理
- 梯度提升树GBDT原理
- 1013. 数素数 (20)
- java之dbcp笔记
- Android 应用的启动过程
- 警察智力训练--蓝桥杯历年java真题(java递归实现eval算法)
- UVA 1605 Building for UN
- 提升方法之AdaBoost、提升树(GBDT)
- hihocoder 1175 : 拓扑排序·二
- eclipse中 Unable to read repository at http://download.eclipse.org/releases/indigo 解决方案
- Android UI根据屏幕分辨率决定加载布局
- Android选择控件,CheckBox和RadioButton使用大全
- calc()实现CSS响应式布局
- 2017 Multi-University Training Contest
- Lucas模板 hdu3037
- MyBatis + Spring Boot