LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
来源:互联网 发布:网络电视剧收视率排行 编辑:程序博客网 时间:2024/06/10 04:22
上一节中介绍了
其实Regression Tree的训练很简单,最主要的就是决定如何分裂节点。lambdaMART采用最朴素的最小二乘法,也就是最小化平方误差和来分裂节点:即对于某个选定的feature,选定一个值val,所有<=val的样本分到左子节点,>val的分到右子节点。然后分别对左右两个节点计算平方误差和,并加在一起作为这次分裂的代价。遍历所有feature以及所有可能的分裂点val(每个feature按值排序,每个不同的值都是可能的分裂点),在这些分裂中找到代价最小的。
举个栗子,假设样本只有上一节中计算出
1 qId=1830 features and lambdas 2 qId=1830 1:0.003 2:0.000 3:0.000 4:0.000 5:0.003 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(1):-0.495 3 qId=1830 1:0.026 2:0.125 3:0.000 4:0.000 5:0.027 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(2):-0.206 4 qId=1830 1:0.001 2:0.000 3:0.000 4:0.000 5:0.001 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(3):-0.104 5 qId=1830 1:0.189 2:0.375 3:0.333 4:1.000 5:0.196 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(4):0.231 6 qId=1830 1:0.078 2:0.500 3:0.667 4:0.000 5:0.086 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(5):0.231 7 qId=1830 1:0.075 2:0.125 3:0.333 4:0.000 5:0.078 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(6):-0.033 8 qId=1830 1:0.079 2:0.250 3:0.667 4:0.000 5:0.085 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(7):0.240 9 qId=1830 1:0.148 2:0.000 3:0.000 4:0.000 5:0.148 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(8):0.24710 qId=1830 1:0.059 2:0.000 3:0.000 4:0.000 5:0.059 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(9):-0.05111 qId=1830 1:0.071 2:0.125 3:0.333 4:0.000 5:0.074 6:0.000 7:0.000 8:0.000 9:0.000 10:0.000 lambda(10):-0.061
上表中除了第一列是qId,最后一列是lambda外,其余都是feature,比如我们选择feature(1)的0.059做分裂点,则左子节点<=0.059的doc有: 1, 2, 3, 9;而>0.059的被安排到右子节点,doc有4, 5, 6, 7, 8, 10。由此左右两个子节点的lambda均值分别为:
继续计算左右子节点的平方误差和:
因此将feature(1)的0.059的均方差(分裂代价)是:
我们可以像上面那样遍历所有feature的不同值,尝试分裂,计算Cost,最终选择所有可能分裂中最小Cost的那一个作为分裂点。然后将
上面讲述了一棵树的标准分裂过程,需要多提一点的是,树的分裂还有一个参数设定:叶子节点上的最少样本数,比如我们设定为3,则在feature(1)处,0.001和0.003两个值都不能作为分裂点,因为用它们做分裂点,左子树的样本数分别是1和2,均<3。叶子节点的最少样本数越小,模型则拟合得越好,当然也容易过拟合(over-fitting);反之如果设置得越大,模型则可能欠拟合(under-fitting),实践中可以使用cross validation的办法来寻找最佳的参数设定。
- LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
- LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
- LambdaMART简介:lambda计算及Regression Tree训练
- RankLib源码分析(二):RankNet
- LambdaMART的源码分析:二(LambdaMART的流程)
- RankLib源码分析(一):主框架
- Ranklib部分源码分析
- MachineLearning—Linear Regression(二)
- MachineLearning—Logistic Regression(二)
- RankLib源码分析(三)----LambdaRank
- RankLib源码分析---MART(GBRT)
- 理解线性回归(二)——Logistic Regression 回归
- 如何用Tensorflow训练模型成pb文件(二)——基于tfrecord的读取
- Logistic Regression(逻辑回归)(二)—深入理解
- linear regression(二)
- RankLib源码分析---RFRanker(随机森林)
- Tomcat双击startup.bat出现一闪而过,无法启动
- LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
- http://a.codekk.com/detail/Android/grumoon/Volley 源码解析
- jquery学习
- 数据结构 - 串的基本运算实现
- LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
- Coderforce 598A Tricky Sum
- WebStrom 编辑器修改文件默认编码
- lua 写的游戏log逻辑(基本支持lua所有格式)
- 汉诺塔递归实现
- ccah-500 第11题What does CDH packaging do on install to facilitate Kerberos security setup
- Spring配置多数据源和JOTM分布式事务解决方案
- Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation原因及解决方法
- 第13周项目2:动物这样叫(1)