GBDT 与 XGBoost
GBDT & XGBoost
### 回归树
单棵回归树可以表示成如下的数学形式
\[
f(x) = \sum_j^Tw_j\mathbf{I}(x\in R_j)
\]
其中\(T\)为叶节点的个数,\(\mathbf{I}\)为指示函数。
回归树的参数学习
当给定树的结构的时候,即知道哪些点划分到哪些叶节点后,可以直接优化下式来获得参数
\[
\hat{R}(f) = \dfrac{1}{n}\sum_{i=1}^nL\left(y_i, \sum_{j=1}^Tw_j\mathbf{I}(x_i\in R_j)\right)
\]
又有划分的区域是不相交的,所以可以最小化每个区域的损失来求得每个区域\(R_j\)对应的参数\(w_j\)。
回归树的结构学习
上面给出了回归树的结构化损失函数
\[
\hat{R}(\hat{f}) = \sum_j^T\sum_{i\in I_j}L(y_i,\hat{w}_j)=\sum_j^T\hat{L}_J
\]
假设现在要对节点\(k\)进行分裂,那么有分裂之前的经验损失为
\[
\hat{R}(\hat{f}_{before}) = \hat{L}_k+\sum_{j\not= k}\hat{L}_j
\]
分裂之后的经验损失为
\[
\hat{R}(\hat{f}_{after})=\hat{L}_L + \hat{L}_R+\sum_{j\not= k}\hat{L}_j
\]
我们用增益来评价分裂的好坏,其计算如下
\[
Gain = \hat{R}(\hat{f}_{before}) - \hat{R}(\hat{f}_{after}) = \hat{L}_k - (\hat{L}_L + \hat{L}_R)
\]
上式本质上是比较划分之后相较于划分前,经验损失可以下降多少。也就是说下降得越多就越好,于是使得上式值最大的划分将会被采纳。
boosting 算法
boosting算法的基本形式如下
\[
f(x) = \sum_{m=0}^Mf_m(x)
\]
就是将多个弱学习器(基学习器)通过相加进行组合。可以写成如下的自适应形式
\[
f(x) = \theta_0 + \sum_{m=1}^M\theta_m\phi_m(x)
\]
boosting 算法的学习过程是串行的,不断去拟合残差。所以,在任意的第\(m\)步,其所需要优化和学习的东西可以表示成下式
\[
\{\hat{\theta}_m, \hat{\phi}_m\}=\arg\min_{\{\theta_m, \phi_m\}}\sum_{i=1}^nL\left(y_i,\hat{f}^{(m-1)}(x_i) + \theta_m\phi_m(x_i)\right)
\]
GBDT
GBDT中选取的弱学习器是回归树,增加树的目的纯粹是为了减少经验损失,所以会有
\[
\sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i)) \ge \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i) + \theta_m\phi_m(x_i))
\]
为了使得上式成立,我们寻找得到的新的树\(\phi_m(x_i)\)必须是在\(L(y_i,\hat{f}^{(m-1)}(x_i))\)的负梯度方向,设\(L(y_i, \hat{f}^{(m-1)}(x_i))\)的负梯度为\(-\hat{g}_m(x_i)\),那么让新加入的弱学习器直接去拟合\(-\hat{g}_m\)即可,于是可得到基学习器的学习公式为
\[
\hat{\phi}_m = \arg\min_{\phi\in\Phi}\dfrac{1}{2}\sum_{i=1}^n[-\hat{g}_m-\phi(x_i)]^2
\]
然后使用线性搜,得到
\[
\hat{\rho}_m = \arg\min_\rho \sum_{i=1}^nL(y_i, \hat{f}_m^{(m-1)}(x_i)+\rho\hat{\phi}_m(x_i))
\]
最终得到
\[
\hat{f}^{m}(x) = \eta\hat{\rho}_m\hat{\phi}_m(x) + \hat{f}^{(m-1)}(x)
\]
下面介绍下如何优化损失函数得到\(\hat{\phi}_m(x)\)
\[
\begin{split}
J_m(\theta_m) &= \dfrac{1}{2}\sum_{i=1}^n[-\hat{g}_m-\phi_m(x_i)]^2\\
&= \dfrac{1}{2}\sum_{i=1}^n\hat{g}_m^2(x_i) + \phi_m^2(x_i) + 2\hat{g}_m(x_i)\phi_m(x_i)\\
&= \dfrac{1}{2}\sum_{i=1}^n\sum_{j=1}^Tw_{jm}^2I(x_i\in R_{jm}) + 2\hat{g}_m(x_i)w_{jm}I(x_i\in R_{jm}) + constant\\
&= \dfrac{1}{2}\sum_{j=1}^T\sum_{i\in I_{jm}}w_{jm}^2 + 2\hat{g}_m(x_i)w_{jm} + constant\\
&= \sum_{j=1}^T\dfrac{1}{2}n_{jm}w_{jm}^2+G_{jm}w_{jm} + constant
\end{split}
\]
其中\(n_{jm}\)为第\(j\)个节点的样本数量。对\(w_{jm}\)进行求导并使得导函数为0,解得
\[
\hat{w}_{jm} = -\dfrac{G_{jm}}{n_{jm}}
\]
回代得到
\[
\hat{J}_m(\hat{\theta}) = -\dfrac{1}{2}\sum_{j=1}^T\dfrac{G_{jm}^2}{n_{jm}}
\]
那么有分裂时的信息增益为
\[
Gain = \dfrac{1}{2}\left[\dfrac{G_L^2}{n_L} + \dfrac{G_R^2}{n_R} - \dfrac{G_{jm}^2}{n_{jm}}\right]
\]
XGBoost
XGBoost与GBDT根本不同在于XGBoost使用了损失函数的泰勒二阶展开。同上,我们有
\[
J_m(\theta_m) = \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i) + \phi_m(x_i))
\]
对其进行泰勒二阶展开,于是有
\[
J_m(\theta_m) = \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i)) + \hat{g}_m(x_i)\phi_m(x_i) + \dfrac{1}{2}\hat{h}_m(x_i)\phi_m(x_i)^2
\]
其中
\[
\begin{split}
\hat{g}_m(x_i) &= \left[\dfrac{\partial L(y_i,f(x_i))}{\partial f(x_i)}\right]_{f(x)=\hat{f}^{(m-1)}(x)}\\
\hat{h}_m(x_i) &= \left[\dfrac{\partial^2 L(y_i,f(x_i))}{\partial f(x_i)^2}\right]_{f(x)=\hat{f}^{(m-1)}(x)}\\
\end{split}
\]
于是有
\[
\begin{split}
J_m(\theta_m) &= \sum_{i=1}^n\left[\hat{g}_m\phi_m(x_i) + \dfrac{1}{2}\hat{h}_m(x_i)\phi_m(x_i)^2\right] + constant\\
&= \sum_{i=1}^n\left[\hat{g}_m(x_i)\sum_{j=1}^Tw_{jm}I(x_i\in R_{jm}) + \dfrac{1}{2}\hat{h}_m(x_i)\sum_{j=1}^Tw_{jm}^2I(x_i\in R_{jm})\right] + constant\\
&= \sum_{j=1}^T\sum_{i\in I_{jm}}[\hat{g}_m(x_i)w_{jm} + \dfrac{1}{2}\hat{h}_m(x_i)w_{jm}^2] + constant\\
&= \sum_{j=1}^T[G_{jm}w_{jm} + \dfrac{1}{2}H_{jm}w_{jm}^2] + constant
\end{split}
\]
上式对\(w_{jm}\)求导,使其等于0,得到
\[
\hat{w}_{jm} = -\dfrac{G_{jm}}{H_{jm}}
\]
回代得到
\[
\hat{J}_m(\hat{\theta}) = -\dfrac{1}{2}\sum_{j=1}^T\dfrac{G_{jm}^2}{H_{jm}}
\]
那么有分裂时的信息增益为
\[
Gain = \dfrac{1}{2}\left[\dfrac{G_L^2}{H_L} + \dfrac{G_R^2}{H_R} - \dfrac{G_{jm}^2}{H_{jm}}\right]
\]
上面的操作可以得到
\[
\hat{f}^{(m)}(x) = \hat{f}^{(m-1)}(x) + \eta\sum_{j=1}^T\hat{w}_{jm}I(x\in R_{jm})
\]
GBDT 与 XGBoost的更多相关文章
- 一步一步理解GB、GBDT、xgboost
GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...
- 机器学习总结(一) Adaboost,GBDT和XGboost算法
一: 提升方法概述 提升方法是一种常用的统计学习方法,其实就是将多个弱学习器提升(boost)为一个强学习器的算法.其工作机制是通过一个弱学习算法,从初始训练集中训练出一个弱学习器,再根据弱学习器的表 ...
- 常见算法(logistic回归,随机森林,GBDT和xgboost)
常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...
- Boosting学习笔记(Adboost、GBDT、Xgboost)
转载请注明出处:http://www.cnblogs.com/willnote/p/6801496.html 前言 本文为学习boosting时整理的笔记,全文主要包括以下几个部分: 对集成学习进行了 ...
- GBDT,Adaboosting概念区分 GBDT与xgboost区别
http://blog.csdn.net/w28971023/article/details/8240756 ============================================= ...
- 机器学习(八)—GBDT 与 XGBOOST
RF.GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性. 根据个体学习器的生成方式,目前 ...
- GB、GBDT、XGboost理解
GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...
- 机器学习(四)--- 从gbdt到xgboost
gbdt(又称Gradient Boosted Decision Tree/Grdient Boosted Regression Tree),是一种迭代的决策树算法,该算法由多个决策树组成.它最早见于 ...
- 机器学习-GBDT和XGboost
参考: 陈天奇slides : https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf Friedman GBDT 论文: htt ...
- GBDT和XGBOOST算法原理
GBDT 以多分类问题为例介绍GBDT的算法,针对多分类问题,每次迭代都需要生成K个树(K为分类的个数),记为\(F_{mk}(x)\),其中m为迭代次数,k为分类. 针对每个训练样本,使用的损失函数 ...
随机推荐
- Android 调节图片工具类
package com.base.changeimage; import android.graphics.Bitmap; import android.graphics.Canvas; import ...
- c#在不安装Oracle客户端的情况下与服务器上的Oracle数据库交互
概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8. ...
- JavaScript_6_函数
函数是由事件驱动的或者当它被调用执行的可重复使用的代码块 调用带参数的函数 带有返回值的函数 <!DOCTYPE html> <html> <head> <t ...
- jsp另外五大内置对象之-out获取缓冲区大小
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- AutoHotKey设置ide的光标功能键
CapsLock:: SetCapsLockState,off ;锁定为小写 CapsLock & d:: flag_C=1 ;小写d代替control键,实现跨词移动CapsLock &am ...
- 到底什么样的ABAP系统能运行Fiori应用
有朋友在微信上问我两个问题: S/4 fiori是标配吗? 如果是ERP R/3,可以激活fiori配置吗? 先回答第二个问题. 在Jerry的微信公众号文章SAP Fiori应用的三种部署方式曾经提 ...
- (外挂破解)Cheat Engine(内存修改工具)V6.2中文版软件介绍
Heat Engine是一款内存修改编辑工具,Cheat Engine允许你修改你的游戏,所以你将总是赢.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能,且自 ...
- CF Gym 100187D Holidays (数学,递推)
题意:给n个元素,从n中选两个非空集合A和B.问有多少中选法? 递推: dp[n]表示元素个数为n的方案数,对于新来的一个元素,要么加入集合,要么不加入集合自成一个集合.加入集合有三种选择,A,B,E ...
- JDK安装及环境变量配置详解
一.下载(Jdk 1.8 ) 1.下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151 ...
- java基础—static关键字
一.static关键字