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

2014-12-31 17:39 508人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
learning to rank(6)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

参考论文:
From RankNet to LambdaRank to LambdaMART: An Overview(公式主要引用这个)
GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE (MART的思想)
Adapting boosting for information retrieval measures
回归树:
1.思想(参考李航的《统计学习方法》的5.51节CART生成)
注意:这里的回归树,每次split的时候,都是为了选择最优的feature和切分点,这里的切分点,只会按照该feature,把数据集一分为二
2.回归树实现(ciir.umass.edu.learning.tree.RegressionTree 二叉树)
参数介绍:
int nLeaves //控制分裂的次数,这个次数是按照节点来算的,而不是按照层数来计算的,例如,2个叶子的时候,分裂1次;3个叶子的时候,分裂2次;4个叶子的时候,分裂3次。N个叶子,分裂N-1次。
DataPoint[] trainingSamples //训练的数据点
double[] labels //这里的lables就是y值,在lambdaMART里为lambda值
FeatureHistogram hist,
int minLeafSupport //控制分裂的次数,如果某个节点所包含的训练数据小于2*minLeafSupport ,则该节点不再分裂。
fit方法
根据输入的数据以及lable值,生成回归树。
辅助类:
ciir.umass.edu.learning.tree.FeatureHistogram来选择每次split时的最优feature和最优划分点
construct方法:
sum[i][j] : 指定feature i 的所有值(训练数据中出现的值),每个j代表一个训练数据中出现的一个值,
sum[i][j]的值为feature i 的所有小于某个指定值(该值由threshold[j]提供)的训练数据                                datapoint的label(该算法里为lambda)之和。
count[i][j]:

指定feature i 的所有值(训练数据中出现的值),每个j代表一个训练数据中出现的一个值,
sum[i][j]的值为feature i 的所有小于某个指定值(该值由threshold[j]提供)的训练数据                              datapoint的总数。

update方法:
用新的label更新sum[i][j]
findBestSplit方法:
a.选取feature作为划分的备选(可全选,可选部分)。
b.选取最优feature和最优划分点
计算每个feature的每个划分点,
   double S = sumLeft * sumLeft / countLeft + sumRight * sumRight / countRight;
最小的S即为最优feature和最优划分点s(该s是feature的具体值)。
sumLeft是该节点下某个feature的值小于指定值(备选s)的所有训练数据的lambad之和。
countLeft是该节点下某个feature的值小于指定值(备选s)的所有训练数据的总数。
sumRight 是该节点下某个feature的值大于等于指定值(备选s)的所有训练数据的lambad之和。
countRight是该节点下某个feature的值大于等于指定值(备选s)的所有训练数据的总数。
这里非常不理解,参考CART的资料,均不是按照这种方式来分裂的,希望有朋友能够帮忙解释一下
int countLeft = count[i][t];
int countRight = totalCount - countLeft;
double sumLeft = sum[i][t];
double sumRight = sumResponse - sumLeft;
double S = sumLeft * sumLeft / countLeft + sumRight * sumRight / countRight;
if(cfg.S < S)
{
cfg.S = S;
cfg.featureIdx = i;
cfg.thresholdIdx = t;
}
通过学习LambdaMART的思路,构建树的时候,输入为(xi,lambdai),其中lambdai代表着对xi的评分(影响排序结果,是增大还是减少)。
最好的划分点,就是把增大的划分到一起(全部为正值,相加结果为sumA),减少的划分到一起(全部为负值,相加结果为sumb).
此时的sumA*sumA/countA+sumB*sumB/countB为最大。
因此,这里的S的含义为:该划分点尽量把正值和负值区分开。 正值表示:后续评分调大;负值表示:后续评分调小;
lambdai就是si从newTree中获取的值,表示si的值如何调整才能满足C最大(类似梯度)。
C表示的是排序后的NDCG,求其最大值。

Sim=Sim-1+lambdai
Sim-1为经过m-1棵树之后,i的评分;
Sim为经过m棵树之后,i的评分;
lambdai就是第m棵树对i的影响,决定了评分是增大,还是减少

LambdaMART的源码分析:一(MART:回归树)相关推荐

  1. 从源码分析TreeSet集合(树集)

    从源码分析TreeSet 简介 构造方法 TreeSet() TreeSet(Comparator<? super E> comparator) TreeSet(Collection< ...

  2. LambdaMART的源码分析:二(LambdaMART的流程)

    参考论文: From RankNet to LambdaRank to LambdaMART: An Overview(公式主要引用这个) GREEDY FUNCTION APPROXIMATION: ...

  3. 【机器学习经典算法源码分析系列】-- 逻辑回归

    1.逻辑回归(Logistic Regression)又常被成为"逻辑斯蒂回归",实质上是一个二元分类问题. 逻辑回归代价函数: 代价函数导数: Matlab实现: 采用matla ...

  4. Ranklib部分源码分析

    Ranklib部分源码分析LambdaMARTRandomForest 声明 关于Ranklib 主框架Evlauatorjava 程序主入口main函数 训练器evaluate函数 预测test函数 ...

  5. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  6. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  7. android字符显示流程图,Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

  8. MyBatis 源码分析 - SQL 的执行过程

    本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析.运 ...

  9. android(cm11)状态栏源码分析(一)

    版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50216563 (一):写在前面 最近由于工 ...

最新文章

  1. python ssh2 库 远程登录 执行命令 文件获取
  2. Docker操作系统理解
  3. 一个用于SAP UI5学习的脚手架应用,没有任何后台API的依赖
  4. Oracle sql如何把毫秒转为日期,sql – 将毫秒转换为时间戳
  5. 文献阅读课10-Neural Relation Extraction for Knowledge Base Enrichment(提取+嵌入+消歧+规范化联合模型,实体已知,仅关系抽取,多词实体)
  6. WebSocket剖析
  7. 机器人学 —— 机器人感知(Mapping)
  8. 图像从程序到GPU再到LCD显示的流程:GPU渲染管线(五)
  9. android studio 模拟器 简书,Android Studio的模拟器genymotion
  10. 基于vue+html的Web网页音乐播放器设计
  11. 小说形象特征包括哪些方面_【现代文阅读】分析小说中人物形象特点答题模板...
  12. 服务器文件安全扫描,服务器安全扫描工具
  13. [小作品]小小梦想初级物理摸拟系统
  14. 如何简单通俗地解释什么是云计算?
  15. 我找到了村里最挣钱的生意!
  16. 2、ehcache与springBoot整合
  17. elemen点击时,修改走马灯的播放索引
  18. macOS安装homebrew与更新gcc
  19. setInterval()的三种写法
  20. 【apollo6.0安装全教程】

热门文章

  1. pve安装黑群晖直通硬盘_在Proxmox VE(PVE)安装黑群晖
  2. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
  3. Oracle序列的建立以及使用
  4. dw上按钮事件 pb_「React TS3 专题」使用 TS 的方式在类组件里定义事件
  5. 《基于张量网络的机器学习入门》学习笔记5
  6. IntelliLight: a Reinforcement Learning Approach for Intelligent Traffic Light Control 论文阅读
  7. 吴良超 融合 cnn+lstm
  8. 点云网络的论文理解(一)-点云网络的提出 PointNet : Deep Learning on Point Sets for 3D Classification and Segmentation
  9. 机器学习笔记:高斯判别分析
  10. pyecharts应用3 Faker函数库