Boosting Tree

f(x)=fM(x)=∑m=1Mh(x;θm)f(\bold{x}) = f_M(\bold{x}) = \sum_{m=1}^Mh(\bold{x};\theta_m)f(x)=fM​(x)=m=1∑M​h(x;θm​)

其中h(x;θm)h(\bold{x;\theta_m})h(x;θm​)为第m棵树,θm\theta_mθm​为第m棵树的参数,M为决策树的数量。

前向分步算法:

  • 首先确定初始提升树f0(x)=0f_0(\bold{x}) = 0f0​(x)=0
  • 第m步的提升树模型为fm(x)=fm−1(x)+hm(x;θm)f_{m}({\bold{x}})=f_{m-1}({\bold{x}})+h_{m}({\bold{x}} ; \theta_{m})fm​(x)=fm−1​(x)+hm​(x;θm​),θm\theta_mθm​为待求解的第m个树的参数
  • (xi,y‾i)(\bold{x}_i,\overline{y}_i)(xi​,y​i​)为样本, θm:θ^m=argminθmE[L(y,fm(x))]=arg⁡min⁡θm∑i=1NL(y‾i,fm(xi))\theta_m: \hat{\theta}_m=argmin_{\theta_m}E[L(y,f_m(\bold{x}))]=\arg \min _{\theta_m} \sum_{i=1}^{N} L\left(\overline{y}_i, f_m\left(\bold{x}_{i}\right)\right)θm​:θ^m​=argminθm​​E[L(y,fm​(x))]=argminθm​​∑i=1N​L(y​i​,fm​(xi​))

损失函数有以下推导:

L(yˉ,fm(x))=(yˉ−fm(x))2L(\bar{y}, f_m(\bold{x})) = (\bar{y}-f_m(\bold{x}))^2L(yˉ​,fm​(x))=(yˉ​−fm​(x))2

=(yˉ−fm−1(x)−hm(x;θm))2=(r−hm(x;θm))2,r=yˉ−fm−1(x)=(\bar{y}-f_{m-1}(\bold{x})-h_m(\bold{x};\theta_m))^2 = (r - h_m(\bold{x};\theta_m))^2,r=\bar{y}-f_{m-1}({\bold{x}})=(yˉ​−fm−1​(x)−hm​(x;θm​))2=(r−hm​(x;θm​))2,r=yˉ​−fm−1​(x)

其中r为上一步模型拟合的残差,hm(⋅)h_{m}(\cdot)hm​(⋅)拟合的是fm−1(⋅)f_{m-1}(\cdot)fm−1​(⋅)的残差。

回归提升树的算法过程

输入:训练数据集D={(x1,yˉ1),...,(xn,yˉn)}D=\{(\bold{x}_1,\bar{y}_1),...,(\bold{x}_n,\bar{y}_n)\}D={(x1​,yˉ​1​),...,(xn​,yˉ​n​)}

输出:fM(x)f_M(\bold{x})fM​(x)

算法:

  • 初始化f0(x)=0f_0(\bold{x}) = 0f0​(x)=0
  • 对于m=1,2,..,Mm = 1, 2,..,Mm=1,2,..,M
    • 计算残差rmi=yˉi−fm−1(xi)r_{mi} = \bar{y}_i - f_{m-1}(\bold{x}_i)rmi​=yˉ​i​−fm−1​(xi​),构建训练样本{(x1,rm1),...,(xn,rmn)}\{(\bold{x}_1,r_{m1}),...,(\bold{x}_n,r_{mn})\}{(x1​,rm1​),...,(xn​,rmn​)}
    • 新建一个回归树拟合上一步残差,得到回归树hm(x;θm)h_m({\bold{x};\theta_m})hm​(x;θm​)
    • 更新模型fm(x)=fm−1(x)+hm(x;θm)f_m(\bold{x}) = f_{m-1}(\bold{x})+h_m(\bold{x};\theta_m)fm​(x)=fm−1​(x)+hm​(x;θm​)
  • 得到模型fM(x)=∑m=1Mh(x;θm)f_M(\bold{x})=\sum_{m=1}^Mh(\bold{x};\theta_m)fM​(x)=∑m=1M​h(x;θm​)

Gradiant Boosting Tree

对损失函数进行泰勒展开,得到损失函数的近似表示:

L(yˉ,fm(x))=L(yˉ,fm−1(x)+hm(x;θm))L(\bar{y},f_m(\bold{x})) = L(\bar{y},f_{m-1}(\bold{x})+h_m(\bold{x};\theta_m))L(yˉ​,fm​(x))=L(yˉ​,fm−1​(x)+hm​(x;θm​))

≈L(yˉ,fm−1(x))+∂L(yˉ,fm−1(x))∂fm−1(x)hm(x;θm)\approx L(\bar{y},f_{m-1}(\bold{x})) + \frac{\partial L(\bar{y}, f_{m-1}(\bold{x}))}{\partial f_{m-1}(\bold{x})} h_m(\bold{x};\theta_m)≈L(yˉ​,fm−1​(x))+∂fm−1​(x)∂L(yˉ​,fm−1​(x))​hm​(x;θm​)

取hm(x;θm)=−∂L(yˉ,fm−1(x))∂fm−1(x)h_m(\bold{x};\theta_m) = -\frac{\partial L(\bar{y},f_{m-1}(\bold{x}))}{\partial f_{m-1}(\bold{x})}hm​(x;θm​)=−∂fm−1​(x)∂L(yˉ​,fm−1​(x))​,则损失函数下降

梯度提升树算法过程

输入:训练数据集D={(x1,yˉ1),...,(xn,yˉn)}D=\{(\bold{x}_1,\bar{y}_1),...,(\bold{x}_n,\bar{y}_n)\}D={(x1​,yˉ​1​),...,(xn​,yˉ​n​)}

输出:fM(x)f_M(\bold{x})fM​(x)

算法:

  • 初始化f0(x)=0f_0(\bold{x})=0f0​(x)=0
  • 对于m=1,2,...,Mm=1, 2,...,Mm=1,2,...,M
    • 计算梯度rmi=−∂L(yˉi,fm−1(xi))∂fm−1(xi)r_{mi} = -\frac{\partial L(\bar{y}_i,f_{m-1}(\bold{x}_i))}{\partial f_{m-1}(\bold{x}_i)}rmi​=−∂fm−1​(xi​)∂L(yˉ​i​,fm−1​(xi​))​,构建样本{(x1,rm1),...,(xn,rmn)}\{(\bold{x}_1,r_{m1}),...,(\bold{x}_n,r_{mn})\}{(x1​,rm1​),...,(xn​,rmn​)}
    • 拟合rmir_{mi}rmi​,得到回归树hm(x;θm)h_m(\bold{x};\theta_m)hm​(x;θm​)
    • 更新模型fm(x)=fm−1(x)+hm(x;θm)f_m(\bold{x})=f_{m-1}(\bold{x}) + h_m(\bold{x};\theta_m)fm​(x)=fm−1​(x)+hm​(x;θm​)
  • 得到模型fM(x)=∑m=1Mhm(x;θm)f_M(\bold{x})=\sum_{m=1}^Mh_m(\bold{x};\theta_m)fM​(x)=∑m=1M​hm​(x;θm​)

xgboost

xgboost的第m步的损失函数定义为:

L(θm)=∑i=1NL(yˉi,fm(xi))+Ω(hm(x;θm))L({\theta}_{m})=\sum_{i=1}^{N} L\left(\bar{y}_{i}, f_{m}\left(\mathbf{x}_{i}\right)\right)+\Omega\left(h_{m}({\mathbf{x}};\theta_m)\right)L(θm​)=i=1∑N​L(yˉ​i​,fm​(xi​))+Ω(hm​(x;θm​))

=∑i=1NL(yˉi,fm−1(xi)+hm(xi;θm))+γT+12λ∑j=1Twj2= \sum_{i=1}^{N} L(\bar{y}_{i}, f_{m-1}(\bold{x}_i)+h_m(\bold{x}_i;\theta_m))+\gamma T + \frac{1}{2}\lambda\sum_{j=1}^Tw_j^2=i=1∑N​L(yˉ​i​,fm−1​(xi​)+hm​(xi​;θm​))+γT+21​λj=1∑T​wj2​

其中Ω(∗)\Omega(*)Ω(∗)表示正则项,具体包括:TTT表示m棵树叶子节点数量,wjw_jwj​表示叶子节点jjj输出值,正则项的含义是希望数的叶子节点数量较少,并且叶子节点的输出值不要出现极值。

由二阶泰勒展开:

f(x+Δx)≃f(x)+f′(x)Δx+12f′′(x)Δx2f(x+\Delta x) \simeq f(x)+f^{\prime}(x) \Delta x+\frac{1}{2} f^{\prime \prime}(x) \Delta x^{2}f(x+Δx)≃f(x)+f′(x)Δx+21​f′′(x)Δx2

得到:

L(θm)=∑i=1NL(yˉi,fm(xi))+γT+12λ∑j=1Twj2L(\theta_m)= \sum_{i=1}^{N} L\left(\bar{y}_{i}, f_{m}\left(\mathbf{x}_{i}\right)\right)+\gamma T + \frac{1}{2}\lambda\sum_{j=1}^Tw_j^2L(θm​)=i=1∑N​L(yˉ​i​,fm​(xi​))+γT+21​λj=1∑T​wj2​

≈∑i=1N[L(yˉi,fm−1(xi))+gi∗hm(xi;θm)+12hi∗hm(xi;θm)2]+γT+12λ∑j=1Twj2\approx \sum_{i=1}^N[L(\bar{y}_i,f_{m-1}(\bold{x}_i)) + g_i * h_m(\bold{x}_i;\theta_m) + \frac{1}{2}h_i * h_m(\bold{x}_i;\theta_m)^2] + \gamma T + \frac{1}{2}\lambda\sum_{j=1}^Tw_j^2≈i=1∑N​[L(yˉ​i​,fm−1​(xi​))+gi​∗hm​(xi​;θm​)+21​hi​∗hm​(xi​;θm​)2]+γT+21​λj=1∑T​wj2​

其中

y^i<m−1>=fm−1(xi),gi=∂L(yˉi,y^i<m−1>)∂y^i<m−1>,hi=∂2L(yˉi,y^i<m−1>)∂2y^i<m−1>\hat{y}_i^{<m-1>}=f_{m-1}\left({\bold{x}_i}\right), \quad g_i=\frac{\partial L\left(\bar{y}_i, \hat{y}_i^{<m-1>}\right)}{\partial \hat{y}_i^{<m-1>}}, \quad h_i=\frac{\partial^{2} L\left(\bar{y}_i, \hat{y}_i^{<m-1>}\right)}{\partial^{2} \hat{y}_i^{<m-1>}}y^​i<m−1>​=fm−1​(xi​),gi​=∂y^​i<m−1>​∂L(yˉ​i​,y^​i<m−1>​)​,hi​=∂2y^​i<m−1>​∂2L(yˉ​i​,y^​i<m−1>​)​

去掉常数项,简化为:

L(θm)=∑i=1N[gi∗hm(xi;θm)+12hi∗hm(xi;θm)2]+γT+12λ∑j=1Twj2L(\theta_m) = \sum_{i=1}^N[g_i * h_m(\bold{x}_i;\theta_m) + \frac{1}{2}h_i * h_m(\bold{x}_i;\theta_m)^2] + \gamma T + \frac{1}{2}\lambda\sum_{j=1}^Tw_j^2L(θm​)=i=1∑N​[gi​∗hm​(xi​;θm​)+21​hi​∗hm​(xi​;θm​)2]+γT+21​λj=1∑T​wj2​

=∑j=1T[∑xi∈Ij[gi∗wj+12hi∗wj2]+12λwj2]+γT=\sum_{j=1}^T[\sum_{\bold{x}_i\in I_j}[g_i * w_j + \frac{1}{2}h_i * w_j^2] + \frac{1}{2}\lambda w_j^2] + \gamma T=j=1∑T​[xi​∈Ij​∑​[gi​∗wj​+21​hi​∗wj2​]+21​λwj2​]+γT

=∑j=1T[wj∑xi∈Ijgi+12wj2(∑xi∈Ij[hi]+λ)+γT=\sum_{j=1}^T[w_j\sum_{\bold{x}_i\in I_j}g_i + \frac{1}{2}w_j^2(\sum_{\bold{x}_i\in I_j}[h_i]+\lambda) + \gamma T=j=1∑T​[wj​xi​∈Ij​∑​gi​+21​wj2​(xi​∈Ij​∑​[hi​]+λ)+γT

其中xi∈Ij\bold{x}_i\in I_jxi​∈Ij​表示xi\bold{x}_ixi​落到第jjj个叶子节点。

∂L∂wj=0\frac{\partial L}{\partial w_j} = 0∂wj​∂L​=0

得到:

wj∗=−∑xi∈Ijgiλ+∑xi∈Ijhi(1)w_j^* = -\frac{\sum_{\bold{x}_i\in I_j}g_i}{\lambda + \sum_{\bold{x}_i\in I_j}h_i} \quad (1)wj∗​=−λ+∑xi​∈Ij​​hi​∑xi​∈Ij​​gi​​(1)

L(wj∗)=−12∑j=1T(∑xi∈Ijgi)2λ+∑xi∈Ijhi+γT(2)L(w_j^*) = -\frac{1}{2}\sum_{j=1}^T\frac{(\sum_{\bold{x}_i\in I_j}g_i)^2}{\lambda + \sum_{\bold{x}_i\in I_j}h_i} + \gamma T \quad (2)L(wj∗​)=−21​j=1∑T​λ+∑xi​∈Ij​​hi​(∑xi​∈Ij​​gi​)2​+γT(2)

根据损耗函数决定节点分裂方式,假设根据某个特征和特征值将样本分裂成IL,IRI_L,I_RIL​,IR​两个集合,定义节点分裂的增益为:

Gain=12[GL2HL+λ+GR2HR+λ−(GL+GR)2HL+HR+λ]−γ(3)Gain = \frac{1}{2}[\frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R + \lambda}- \frac{(G_L+G_R)^2}{H_L+H_R+\lambda}] - \gamma \quad (3)Gain=21​[HL​+λGL2​​+HR​+λGR2​​−HL​+HR​+λ(GL​+GR​)2​]−γ(3)

GL=∑xi∈ILgiG_L=\sum_{\bold{x}_i\in I_L}g_iGL​=xi​∈IL​∑​gi​

GR=(∑xi∈IRgi)2G_R=(\sum_{\bold{x}_i\in I_R}g_i)^2GR​=(xi​∈IR​∑​gi​)2

HL=∑xi∈ILhiH_L = \sum_{\bold{x}_i\in I_L} h_iHL​=xi​∈IL​∑​hi​

HR=∑xi∈IRhiH_R = \sum_{\bold{x}_i\in I_R} h_iHR​=xi​∈IR​∑​hi​

xgboost算法过程

输入:训练集{(x1,y1),...,(xn,yn)}\{(\bold{x}_1,y_1),..., (\bold{x}_n,y_n)\}{(x1​,y1​),...,(xn​,yn​)}

输出:fM(x)f_M(\bold{x})fM​(x)

算法:

  • 初始化f0(x)=0f_0(\bold{x}) = 0f0​(x)=0
  • 对于m=1,...,Mm = 1,...,Mm=1,...,M
    • 节点分裂增益定义(3)找到最优的分裂特征和分裂值进行分裂
    • 根据(1)计算叶子节点输出值,得到第m个树hm(x;θm)h_m(\bold{x};\theta_m)hm​(x;θm​)
    • 更新模型fm(x)=fm−1(x)−hm(x;θm)f_m(\bold{x}) = f_{m-1}(\bold{x})-h_m(\bold{x};\theta_m)fm​(x)=fm−1​(x)−hm​(x;θm​)
  • 得到模型fM(x)f_M(\bold{x})fM​(x)

LambdaMart

dcg@T=∑i=1T2lable(i)−1log(i+1)dcg@T=\sum_{i=1}^T\frac{2^{lable(i)}-1}{log(i+1)}dcg@T=i=1∑T​log(i+1)2lable(i)−1​

ndcg@T=dcg@TmaxDcg@Tndcg@T=\frac{dcg@T}{maxDcg@T}ndcg@T=maxDcg@Tdcg@T​

ΔNDCG(i,j)=∣ndcg(originalSequence)−ndcg(sequenceAfterSwap(i,j))∣\Delta NDCG(i,j) = |ndcg(originalSequence) - ndcg(sequenceAfterSwap(i,j))|ΔNDCG(i,j)=∣ndcg(originalSequence)−ndcg(sequenceAfterSwap(i,j))∣

λij=−σ1+eσ(si−sj)∣ΔNDCG(i,j)∣\lambda_{ij} = \frac{-\sigma }{1+e^{\sigma(s_i-s_j)}}|\Delta NDCG(i,j)|λij​=1+eσ(si​−sj​)−σ​∣ΔNDCG(i,j)∣

λi=∑j:lable(i)>lable(j)λij−∑j:label(j)>lable(i)λij\lambda_i = \sum_{j:lable(i)>lable(j)} \lambda_{ij}-\sum_{j:label(j)>lable(i)} \lambda_{ij}λi​=j:lable(i)>lable(j)∑​λij​−j:label(j)>lable(i)∑​λij​

输入:树的数量M,训练数据集{(x1,label1),...,(xn,labeln)}\{(\bold{x}_1,label_1),...,(\bold{x}_n,label_n)\}{(x1​,label1​),...,(xn​,labeln​)},学习率η\etaη

输出:fM(x)f_M(\bold{x})fM​(x)

算法

  • 初始化f0(x)=0f_0(\bold{x}) = 0f0​(x)=0
  • 对于m=1,...,Mm=1,...,Mm=1,...,M
    • 计算一阶导,也就是xix_ixi​的λ\lambdaλ梯度,记为yi=λiy_i = \lambda_iyi​=λi​值,构成{(x1,λ1),...,(xn,λn)}\{(\bold{x}_1,\lambda_1),...,(\bold{x}_n,\lambda_n)\}{(x1​,λ1​),...,(xn​,λn​)}
    • 计算二阶导wi=∂yi∂fm−1(xi)w_i = \frac{\partial y_i}{\partial f_{m-1}(\bold{x}_i)}wi​=∂fm−1​(xi​)∂yi​​,用于下面基于牛顿法的优化
    • 回归树拟合λi\lambda_iλi​,得到决策树fm(x)f_m(\bold{x})fm​(x)
    • 计算叶子节点的值γmk=∑xi∈Ikyi∑xi∈Ikwi\gamma_{mk} = \frac{\sum_{x_i\in I_k} y_i}{\sum_{x_i\in I_k} w_i}γmk​=∑xi​∈Ik​​wi​∑xi​∈Ik​​yi​​
    • 更新模型fm(x)=fm−1(x)+hm(x)f_m(\bold{x}) = f_{m-1}(\bold{x}) + h_m(\bold{x})fm​(x)=fm−1​(x)+hm​(x)
    • 更新数据得分为fm(xi)f_m(\bold{x}_i)fm​(xi​),根据最新得分重排序训练集
  • 得到模型fM(x)f_M(\bold{x})fM​(x)

待更新。。。

LambdaMart相关推荐

  1. LambdaMART简介——基于Ranklib源码(一 lambda计算)

     LambdaMART简介--基于Ranklib源码(一 lambda计算) 时间:2014-08-09 21:01:49      阅读:168      评论:0      收藏:0      ...

  2. 徐博 From RankNet to LambdaRank to LambdaMART: An Overview

    徐博 From RankNet to LambdaRank to LambdaMART: An Overview 新闻来源:IR实验室       发布时间:2012/10/17 15:44:39   ...

  3. LambdaMART的思想

     LambdaMART的思想 2015-01-01 13:08 469人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: learning to rank(6) 作者同类文章X 版权声明:本 ...

  4. LambdaMART的源码分析:一(MART:回归树)

     LambdaMART的源码分析:一(MART:回归树) 2014-12-31 17:39 508人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: learning to rank(6) ...

  5. LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)

     LambdaMART简介--基于Ranklib源码(二 Regression Tree训练) 上一节中介绍了 λ λ 的计算,lambdaMART就以计算的每个doc的 λ λ 值作为label ...

  6. 求解LambdaMART的疑惑?

     求解LambdaMART的疑惑? 研究这个LambdaMART好久了,无奈自己在这瞎研究,脑子实在不够用,网上也看了博客,到最后还是看不懂,我明白的是MART是一个学习打分的算法,通过让多棵树进 ...

  7. Learning To Rank之LambdaMART的前世今生

    Learning To Rank之LambdaMART的前世今生 标签: 机器学习排序模型Learning To RankLambdaMARTRanknet 2014-11-02 17:57 1448 ...

  8. 员外带你读论文:From RankNet to LambdaRank to LambdaMART: An Overview

    严格来说,这并不是一篇论文,只是一个  ,里面系统的介绍了三个比较著名的排序模型 ,链接 Rank[1] 本篇博文将分析总结下这三个排序模型.其参考的代码RankNet.LambdaRank[2],L ...

  9. 排序学习(LTR)经典算法:RankNet、LambdaRank和LambdaMart

    ©PaperWeekly 原创 · 作者 | yancy 单位 | 字节跳动 研究方向 | 推荐系统 背景 在许多场景中我们都需要模型学习到排序的能力,比如网页搜索场景下我们需要根据搜索词和文档的相关 ...

  10. java lambdamart库,LambdaMART 之 lambda(示例代码)

    LambdaMART 之 lambda 概念 LTR 排序学习主要用于对召回结果的精排,主流使用基于pair(文档对标记)的 LambdaMART 算法,该算法由两部分组成:lambda + MART ...

最新文章

  1. awk和cut分割字符区别
  2. 原始样式增加标题_版式设计!10个技巧让你设计出好的标题
  3. CompletableFuture 实现异步计算
  4. PCB为什么要做无盘设计及其在Allegro中的具体操作
  5. 关于input的change事件触发多次发解决
  6. IOS打包封装Framework-在工程中直接制作framework(三)
  7. RocketMQ集群特点
  8. 计算机d,计算机词汇d
  9. java中的static类_再议Java中的static关键字
  10. LeetCode刷题(22)
  11. Oracle 11g RAC 修改IP
  12. 乐橙tp6接入硬盘_乐橙“智能养殖”新概念,全套监管最佳组合方案曝光!
  13. java函数式编程的好处
  14. linux内核编程--1模块的装载和卸载
  15. Android studio 教程入门
  16. “恐怖”的阿里一面,我究竟想问什么
  17. 曝英伟达将新发低功耗RTX 3050显卡
  18. android 怎么封装方法,开发那点事(九)安卓开发,封装常用方法,工作用
  19. C - 喵帕斯之天才算数少女
  20. Amesim学习——RC电路仿真

热门文章

  1. WeChatPlugin Mac版安装
  2. 学python怎么样
  3. flink sql 指南
  4. echart各个柱体设置不同颜色
  5. Flink process 和 apply 简单案例
  6. 艾灸排病反应及解决方案(中),建议收藏!
  7. 我的 C 语言学习生涯记——纪念 Dennis M. Ritchie
  8. SAP的月结相关流程介绍
  9. 应急响应常用命令(Linux)---读书笔记
  10. C/C++ BeaEngine 反汇编引擎