LambdaMart
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∑Mh(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,yi)为样本, θm:θ^m=argminθmE[L(y,fm(x))]=argminθ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θmE[L(y,fm(x))]=argminθm∑i=1NL(yi,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=1Mh(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=1Mhm(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∑NL(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∑NL(yˉi,fm−1(xi)+hm(xi;θm))+γT+21λj=1∑Twj2
其中Ω(∗)\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+21f′′(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∑NL(yˉi,fm(xi))+γT+21λj=1∑Twj2
≈∑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)+21hi∗hm(xi;θm)2]+γT+21λj=1∑Twj2
其中
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)+21hi∗hm(xi;θm)2]+γT+21λj=1∑Twj2
=∑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+21hi∗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[wjxi∈Ij∑gi+21wj2(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∈Ijhi∑xi∈Ijgi(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∗)=−21j=1∑Tλ+∑xi∈Ijhi(∑xi∈Ijgi)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∑Tlog(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∈Ikwi∑xi∈Ikyi
- 更新模型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相关推荐
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
LambdaMART简介--基于Ranklib源码(一 lambda计算) 时间:2014-08-09 21:01:49 阅读:168 评论:0 收藏:0 ...
- 徐博 From RankNet to LambdaRank to LambdaMART: An Overview
徐博 From RankNet to LambdaRank to LambdaMART: An Overview 新闻来源:IR实验室 发布时间:2012/10/17 15:44:39 ...
- LambdaMART的思想
LambdaMART的思想 2015-01-01 13:08 469人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: learning to rank(6) 作者同类文章X 版权声明:本 ...
- LambdaMART的源码分析:一(MART:回归树)
LambdaMART的源码分析:一(MART:回归树) 2014-12-31 17:39 508人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: learning to rank(6) ...
- LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
LambdaMART简介--基于Ranklib源码(二 Regression Tree训练) 上一节中介绍了 λ λ 的计算,lambdaMART就以计算的每个doc的 λ λ 值作为label ...
- 求解LambdaMART的疑惑?
求解LambdaMART的疑惑? 研究这个LambdaMART好久了,无奈自己在这瞎研究,脑子实在不够用,网上也看了博客,到最后还是看不懂,我明白的是MART是一个学习打分的算法,通过让多棵树进 ...
- Learning To Rank之LambdaMART的前世今生
Learning To Rank之LambdaMART的前世今生 标签: 机器学习排序模型Learning To RankLambdaMARTRanknet 2014-11-02 17:57 1448 ...
- 员外带你读论文:From RankNet to LambdaRank to LambdaMART: An Overview
严格来说,这并不是一篇论文,只是一个 ,里面系统的介绍了三个比较著名的排序模型 ,链接 Rank[1] 本篇博文将分析总结下这三个排序模型.其参考的代码RankNet.LambdaRank[2],L ...
- 排序学习(LTR)经典算法:RankNet、LambdaRank和LambdaMart
©PaperWeekly 原创 · 作者 | yancy 单位 | 字节跳动 研究方向 | 推荐系统 背景 在许多场景中我们都需要模型学习到排序的能力,比如网页搜索场景下我们需要根据搜索词和文档的相关 ...
- java lambdamart库,LambdaMART 之 lambda(示例代码)
LambdaMART 之 lambda 概念 LTR 排序学习主要用于对召回结果的精排,主流使用基于pair(文档对标记)的 LambdaMART 算法,该算法由两部分组成:lambda + MART ...
最新文章
- Java学习总结:58(Collections工具类)
- Eigen 学习笔记
- php数组中插入数值,php中如何在数组指定位置插入数据单元
- 面向Tableau开发人员的Python简要介绍(第3部分)
- 第三十六期:学 Java 网络爬虫,需要哪些基础知识?
- java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;
- STL工作笔记-map中关于erase返回值的操作
- 如何在github上发起一个pull request
- java怎么使用wcf_如何使用WCF服务
- Kafka如何更新元数据到各broker节点
- 【ES】学习5-全文搜索
- vbs调用c++dll_COM编程攻略(八 动态调用与IDispatch接口)
- android ndk 下载安装(ubuntu)
- 14、CSS渲染:CSS是如何绘制颜色的?
- SpringBoot - Unable to start ServletWebServerApplicationContext due to missing ServletWeb
- mysql版本号xx.xx.xx类型字段排序问题解决
- 想裁剪视频时长,用电脑怎么裁剪视频时长
- Android浮窗实现(WindowManager)
- 2022-2028年中国微创治疗行业市场运行态势及发展战略研究报告
- bcoma 应用程序发生错误_打开网页老是出现《应用程序错误》是怎么回事?
热门文章
- 读书笔记(五)--公司绝不会告诉你的50大秘密
- java中feli删除操作_Feli的生日礼物
- 力扣题:977. 有序数组的平方
- 【k8s的持久化存储】PV、PVC、StorageClass讲解
- 世界战争2HTML5小游戏,[娱乐][PCD]SkyWarsReloaded —— 天空战争小游戏全新归来![1.8-1.13.2]...
- 《互联网信贷风险与大数据》读书笔记(三)
- C/C++编译器 GCC 默认 C++ 17
- Python爬虫入门学习实战项目(一)
- stm32cubeide调试查看函数值_STM32CubeIDE使用ITM调试
- 思博伦OpenFlow性能测试白皮书上篇