LambdaMART的思想

2024-02-02 14:38
文章标签 思想 lambdamart

本文主要是介绍LambdaMART的思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


LambdaMART的思想
469人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
作者同类文章 X
    LambdaRank如何跟MART结合在一起的。
    MART是一个经典的集成思想,多个弱分类器可以生成一个比他们都好的分类器。
    MART思想:
    主要来自这篇论文:
    GREEDY FUNCTION APPROXIMATION:A GRADIENT BOOSTING MACHINE1
    其思路来源于数值优化---梯度下降。在使用梯度下降时,更新函数的参数是,w= w-δw
    从数值优化推广到函数空间的优化,可以得到δf, f= f-δf.
    新生成的每个树h(x,m)需要跟-δf(f的梯度)之差最小(如果为0,则新生成的树就是所要求的梯度),第4行。
    F(x) =F(x) + ρmh(x,m),针对排序问题,F(x)代表x的评分,也就是y。
    因此可以通过前面已生成的树(m-1),就可以生成一棵新树δf(m).

    LambdaRank的思路:
    1.MART的F(xi)等价于LambdaRank的o(i)
    F(xi)m=F(xi)m-1+newTree。
    2.MART的L(yi,F(xi))等价于
    之和。
    指定的i,对应多个j,而yi,则根据输入的数据j,指定为1,或者-1.
    这里的目标是求C的最大值。
    输入某个si的具体计算过程:
    lambdai就是si从newTree中获取的值,表示si的值如何调整才能满足C最大(类似梯度)。
    将si= si+lambdai,代入到C中,并对Si求导,
    公式里没有lambdai的原因:lambdai的初始值为0,并且只迭代一次。
    备注:
    根据Newton-Raphson,求函数最小值为:
    这里求最大值,则用加。

    根据输入(xi,lambdai),其中lambdai表示xi的调整方向(梯度)(例如:让排名最前的值越来越大,让排名最后的值越来越小),生成一棵指定节点个数的树,并给相应叶子节点赋予γkm的值,就可完成新树的生成。




    个人总结:
    1.LambdaMART 与LambdaRank和NetRank的训练方式不同
    LambdaMART是通过boosting的方式,其score(xi)m = socre(xi)m-1 + newTree。
    LambdaRank和NetRank则是通过训练神经网络的方式,直接通过对输出求到,然后再一层层求参数。
       LambdaMART 和LambdaRank采用了相同的梯度lambdaij,并且都是为了求DNCG的最大值。
     但是由于F(xi)的形式不一样,两者的训练方式不同,一个是神经网络的方式(LambdaRank),一个是回归树+梯度boosting的方式(LambdaMART )。

    LambdaMART是采用了Lambda的梯度形式和评估函数(NDCG),并用树的方式来计算。

    这篇关于LambdaMART的思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/671021

    相关文章

    hdu1496(用hash思想统计数目)

    作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

    函数式编程思想

    我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

    实例demo理解面向接口思想

    浅显的理解面向接口编程 Android开发的语言是java,至少目前是,所以理解面向接口的思想是有必要的。下面通过一个简单的例子来理解。具体的概括我也不知道怎么说。 例子: 现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的

    【Java编程思想】线程的基本协作机制 与 线程的中断

    wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

    【Java编程的思想】理解synchronized

    用法和基本原理 synchronized可以用于修饰类的实例方法、静态方法和代码块 实例方法 在介绍并发基础知识的时候,有一部分是关于竞态条件的,当多个线程访问和操作同一个对象时,由于语句不是原子操作,所以得到了不正确的结果。这个地方就可以用synchronized进行处理 public class Counter {private int count;public synchroni

    【ShuQiHere】从残差思想到 ResNet:深度学习的突破性创新

    【ShuQiHere】引言 在深度学习的迅速发展中,卷积神经网络(CNN)凭借其在计算机视觉领域的出色表现,已经成为一种主流的神经网络架构。然而,随着网络层数的增加,研究人员逐渐发现了一个关键问题:梯度消失 😖 和 梯度爆炸 💥,这使得训练非常深的网络变得极其困难。为了解决这一问题,残差思想 💡 被提出,并在 2015 年由 Kaiming He 等人正式引入 ResNet 中。这一创新不

    2024国赛数学建模备战-数学建模思想方法大全及方法适用范围

    第一篇:方法适用范围 一、统计学方法 1.1 多元回归 1、方法概述: 在研究变量之间的相互影响关系模型时候,用到这类方法,具体地说:其可以定量地描述某一现象和某些因素之间的函数关系,将各变量的已知值带入回归方程可以求出因变量的估计值,从而可以进行预测等相关研究。 2、分类 分为两类:多元线性回归和非线性线性回归; 其中非线性回归可以通过一定的变化转化为线性回归,比如:y= ln

    2016年末程序员应该知道的基本架构思想

    http://www.toutiao.com/i6352598153379709442/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=6176041275&utm_medium=toutiao_ios

    用数据驱动思想来设计游戏

    游戏由两部分组成,逻辑和数据。这是一种对游戏的有效划分。逻辑部分定义游戏引擎的核心原则和算法,数据部分则提供其内容 和行为的具体细节。在最初的游戏开发的过程中,大家总是喜欢将逻辑和数据都写入代码中,这样的代码可移植性很差,重用性也差,还容易出现数据的不统一。如果要进行些许修改,甚至有可能牵一发而动全身。      数据驱动设计可以比喻成是一种面向对象的游戏设计,它将游戏数据存储在文件

    栈的顺序表和链表实现,以及一些涉及到栈思想的题目

    一、std里面栈的基本操作 #include <stdio.h>#include <stack>//使用命名空间std using namespace std;stack<char> s; int main(){//判断栈是否为空if(s.empty()){printf("空\n");}else{printf("非空\n");}char asd='a';//入栈s.push(asd)