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:回归树)

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

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

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

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

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

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

 LambdaMART简介——基于Ranklib源码(一 lambda计算) 学习Machine Learning,阅读文献,看各种数学公式的推导,其实是一件很枯燥的事情。有的时候...

GBDT(MART) 迭代决策树入门教程 | 简介

在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下:                GBDT(Gradient Boosting Decision Tree) 又叫 MART...

GBDT(MART) 迭代决策树入门教程 | 简介

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决...

GBDT(MART) 迭代决策树入门教程 | 简介

在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下:                GBDT(Gradient Boosting Decision Tree) 又叫 MART(Mul...

GBDT(MART) 迭代决策树入门教程 | 简介

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决...
  • zjh4213
  • zjh4213
  • 2014年04月09日 16:30
  • 410

GBDT(MART) 迭代决策树 实践

用GBDT和graphlab实现kaggle比赛 租车量预测这里我用的是graphlab包,而不是sklearn。借鉴上面的例子,完成仓库优化,但是可能由于库的原因,与上面的例子有一定的出入!!!数据...
  • MosBest
  • MosBest
  • 2016年07月29日 20:55
  • 636

GBDT(MART) 迭代决策树入门教程

在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下:        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multip...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LambdaMART的源码分析:一(MART:回归树)
举报原因:
原因补充:

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