Gradient boosting
Gradient boosting
gradient boosting 是一种boosting(组合弱学习器得到强学习器)算法中的一种,可以把学习算法(logistic regression,decision tree)代入其中。
问题描述:
给定一组数据{(x,y)}i,i=1,2...,N,使用函数F(x)对数据进行拟合,使对于给定损失函数L(y,F(x))最小
(损失函数可以为$(y-F(x))^2,|y-F(x)|$[regression],$log(1+e^{-2yF})$[classification])
使用$F(x)=F_0(x)+\sum_{m=1}^{M}r_ih_m(x;\alpha_m)$(1),
$F_0(x)=argmin_r\sum_{i=1}^N L(y_i,r)$为初始值;为常数;$r_i$为权重
$h_m(x;\alpha_m)$是某个弱学习算法(logistic regression,decision tree),$\alpha_m$为算法的参数
算法描述:
首先选取一个常数作为F(x)的估计,最优的常数需要使损失函数最小
1.初始化$F_0(x)=argmin_r\sum_{i=1}^N L(y_i,r)$
现在已经有了$F_0(x)$作为$F(x)$的初始估计,考虑使用gredient decent方法,使损失函数减少
A.选取方向$g_m=-\left[\frac{\partial L(y,F(x))}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}$
B.选取方向后,选取步长,$\beta_m=argmin_{\beta}\sum_{i=1}^{N}L(y_i,F_{m-1}(x_i)+\beta g_m)$
对照(1)式,$g_m$(称为残差,residual)即为$h_m(x;\alpha_m)$;$\beta_m$即为$r_m$
2.计算$g_m$,使用$h_m(x;\alpha_m)$拟合${x,g_m}_1^N$,得到参数$\alpha_m$和$h_m(x)$的值
计算$r_m=argmin_r\sum_{i=1}^{N}L(y_i,F_{m-1}(x_i)+rh_m(x))$
3.更新$F_m(x)=F_{m-1}(x)+r_mh_m(x)$
4.循环2,3两步,得到F_M(x)
输出:算法结束后,得到以下参数$(r_0,r_1,r_2,...,r_M,\alpha_1,\alpha_2,...,\alpha_M)$
当作预测时:$F(c)=r_0+\sum_{i=1}^{M}r_ih_i(c;\alpha_i)$
程序中使用:
损失函数 $L(y,F(x))=\frac{1}{N}\sum_{i=1}{N}(y_i-F(x_i))^2$
弱学习算法 spline regression 参看Intro_to_splines(实际就是加了特征转换的regression)
注意:程序中的predict实现是错误的;程序没有计算步长$r_m$,而是使用常数
for i=1:nboost
% 计算残差g_m,residual
gradient = -2/nTrain * (f-y); % 用h_m拟合{(x,g_m)}
submodel = boostedModel(X,gradient,options); % 作者实现中,对每个特征生成一个spline regression,下列代码选出表现最好的特征
diff = (submodel - Y).^2;
err = sum(diff,1)/nTrain;
best(i) = find( err == min(err));
f_i = submodel(:,best(i));
% 如果需要预测,需要保存 spline regression 的两个参数,
% 特征i和参数alpha(regression每个特征上的权重)
%
% 以及训练spline regression时用的knote及Degree参数 % 没有计算步长(权重),直接使用常数,1-500次循环时,v=0.9
if i>500
v = 0.5;
end
%更新F_m(x)
f = f + v*f_i; if mod(i,100) == 0
n = n+1;
error(n) = 1/nTrain * sum((y - f).^2);
end end
Gradient boosting的更多相关文章
- Gradient Boosting Decision Tree学习
Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...
- A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning
A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning by Jason Brownlee on S ...
- How to Configure the Gradient Boosting Algorithm
How to Configure the Gradient Boosting Algorithm by Jason Brownlee on September 12, 2016 in XGBoost ...
- Ensemble Learning 之 Gradient Boosting 与 GBDT
之前一篇写了关于基于权重的 Boosting 方法 Adaboost,本文主要讲述 Boosting 的另一种形式 Gradient Boosting ,在 Adaboost 中样本权重随着分类正确与 ...
- GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法
GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别
引自http://blog.csdn.net/xianlingmao/article/details/7712217 Jackknife,Bootstraping, bagging, boosting ...
- 模型组合(Model Combining)之Boosting与Gradient Boosting
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- Gradient Boosting, Decision Trees and XGBoost with CUDA ——GPU加速5-6倍
xgboost的可以参考:https://xgboost.readthedocs.io/en/latest/gpu/index.html 整体看加速5-6倍的样子. Gradient Boosting ...
随机推荐
- fzu 1753 Another Easy Problem
本题题意为求 t (t<150) 个 c (n,m) (1<=m<=n<=100000)的最大公因子: 本题的难点为优化.主要有两个优化重点.一是每次对单个素因子进行处理,优 ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- logstash 使用grok正则解析日志
http://xiaorui.cc/2015/01/27/logstash%E4%BD%BF%E7%94%A8grok%E6%AD%A3%E5%88%99%E8%A7%A3%E6%9E%90%E6%9 ...
- Ubuntu 安装 Eclipse C/C++开发环境
所需软件清单: 1.eclipse-linuxtools-indigo-SR1-incubation-linux-gtk.tar.gz 2.jre-7u2-linux-i586.tar.gz 先将上述 ...
- iOS 监听 出发 Home键 NSNotificationCenter UIApplicationWillResignActiveNotification
第一步: 创建2个NSNotificationCenter监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@sel ...
- Codeforces 551C GukiZ hates Boxes 二分答案
题目链接 题意: 一共同拥有n个空地(是一个数轴,从x=1 到 x=n),每一个空地上有a[i]块石头 有m个学生 目标是删除全部石头 一開始全部学生都站在 x=0的地方 每秒钟每一个学生都 ...
- leetcode_question_102 Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
程序: #include<stdio.h> int main(int argc,char *argv[]) { FILE * stream; fpos_t pos; stream = fo ...
- 【floyd求最小环】【Vijos 1046】【观光旅游】
标签:图结构 最短路 题目大意:给你一个无向图,至少经过3个节点的简单回路(不能包括其他环) 一开始的思路:用一个NUM[i][j]表示i到j的最短路经过几个节点,显然解法不太优美,而且还是错的 再想 ...
- html 父容器和子容器通信
通过拿到document对象下的window对象后执行对应的方法.