r - 在 gbm 的 LamdbaMART 实现中的验证集上获得 0 偏差

标签 r machine-learning supervised-learning gbm

我正在尝试训练 LambdaMART 模型来对对象列表执行成对排序。我的训练数据集由 50,000 个 112 维特征向量组成。每个特征都由一个非负整数编码。

目标值是正整数(不连续)。给定两个新实例 X 和 Y,我希望我的模型能够预测 X 的目标值是否大于 Y。

由于这不是信息检索应用程序,因此查询的概念是无关紧要的。所有 50,000 个实例都属于同一个“查询”。

似乎当我运行我的模型时,即使设置为使用 70%/30% 训练验证分割,我的验证集上的偏差也为 0,并且如果我尝试,gbm.perf 函数会抛出异常采用 OOB 方法来查找最佳树数。

总的来说,我对这个包如何处理所有这些无用的命名参数感到非常困惑。我想知道要做的就是指定一个测试验证集,然后最小化树大小范围内的验证错误。不应该太多,但是这个包让我很难知道我需要设置哪些旋钮……以至于我要自己实现它,这样我就有一定的透明度并知道它在做什么。

抱歉,我可以使用一些帮助来让这个包返回有意义的验证结果。

最佳答案

我认为 LambdaMart 并不适合您的用例。该算法假设数据由组成,每个组包含多个项目;目标是一组项目总体排列的函数。因此,要将数据拆分为训练集和验证集,属于同一组的所有项目都将分配给前者或后者。在GBM中,组的构成是通过group参数指定的,它是一个列名列表。所有同意这些列的实例都属于同一组。

在您的场景中,您有一个单个大型“组”,其中包含训练集中的所有项目;因此,它不能分为训练集和验证集。我为您提供了两个选择:

  1. 直接根据目标值训练最小二乘模型(“高斯”分布参数)。
  2. (更好但更复杂)如果训练后模型的预期用途是预测,给定一对项目,第一个项目是否应该优先于第二个项目,您可以重新格式化您的模型相应的数据:第一项的 112 个特征列,加上第二项的 112 个特征列,再加上 1 的二进制目标(当且仅当第 1 项在原始数据集中具有更高的目标)。然后,在此基础上训练逻辑模型(分布“伯努利”)。

关于r - 在 gbm 的 LamdbaMART 实现中的验证集上获得 0 偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162740/

相关文章:

machine-learning - 线性回归: Substituting the non-numerical discrete domain of a predictor with numerical one

r - 如何总结 R 中的嵌套组

machine-learning - ML.NET预测客户订单数量

r - 如何有效地将一组数字拟合到预定分布中

python - 在python中实现梯度下降

python - 如何在 pyspark 机器学习中使用 Dataframe?

machine-learning - 监督学习中的提取分类函数

machine-learning - 自动学习集群

r - 如何操作嵌套列表中的NULL元素?

r - 移动数据框每一行的最后两个元素