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

转载 2016年06月01日 18:33:13

LambdaMART的源码分析:一(MART:回归树)
508人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
参考论文:
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:回归树)

参考论文: From RankNet to LambdaRank to LambdaMART: An Overview(公式主要引用这个) GREEDY FUNCTION APPROXIMATIO...
  • guoguo881218
  • guoguo881218
  • 2014年12月31日 17:39
  • 1230

LambdaMART的思想

LambdaRank如何跟MART结合在一起的。 MART是一个经典的集成思想,多个弱分类器可以生成一个比他们都好的分类器。 MART思想: 主要来自这篇论文: GREEDY FUNC...
  • guoguo881218
  • guoguo881218
  • 2015年01月01日 13:08
  • 2195

【原创】GBDT(MART)概念简介

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种用于回归的机器学习算法,该算法由...
  • suranxu007
  • suranxu007
  • 2015年11月18日 17:51
  • 1653

Learning To Rank之LambdaMART的前世今生

LambdaMART是Learning To Rank的其中一个算法,适用于许多排序场景。它是微软Chris Burges大神的成果,最近几年非常火,屡次现身于各种机器学习大赛中,Yahoo! Lea...
  • huagong_adu
  • huagong_adu
  • 2014年11月02日 17:57
  • 35609

LambdaMART简介:lambda计算及Regression Tree训练

part1: lambda计算(来源:http://www.mamicode.com/info-detail-149823.html) 学习Machine Learning,阅读文献,看各种数学公式...
  • u010035907
  • u010035907
  • 2017年04月25日 15:16
  • 1013

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

 LambdaMART简介——基于Ranklib源码(一 lambda计算) 学习Machine Learning,阅读文献,看各种数学公式的推导,其实是一件很枯燥的事情。有的时候...
  • starzhou
  • starzhou
  • 2016年06月01日 18:00
  • 1160

求解LambdaMART的疑惑?

 求解LambdaMART的疑惑? 研究这个LambdaMART好久了,无奈自己在这瞎研究,脑子实在不够用,网上也看了博客,到最后还是看不懂,我明白的是MART是一个学习打分的算法,通过让...
  • starzhou
  • starzhou
  • 2016年05月17日 18:28
  • 1162

GBDT(MART) 迭代决策树算法 深入浅出

GBDT(MART) 迭代决策树
  • lipengcn
  • lipengcn
  • 2016年02月29日 11:17
  • 1652

CART回归树和GBDT

CART 分为回归树和决策树。这里重点讲讲回归树的特征选择。 回归树选择特征的方法是:平方误差最小化。 具体步骤为: 1)依次遍历每个特征j,以及该特征的每个取值s,计算每个切分点(j,s)的损失函数...
  • ZhikangFu
  • ZhikangFu
  • 2016年05月08日 12:13
  • 1266

RankLib源码分析---MART(GBRT)

参考论文: GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE 1.boosting的算法流程 ...
  • guoguo881218
  • guoguo881218
  • 2015年01月02日 16:58
  • 981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LambdaMART的源码分析:一(MART:回归树)
举报原因:
原因补充:

(最多只允许输入30个字)