1

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

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

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

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

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

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

4

1 回答 1

0

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

在您的场景中,您有一个训练集中所有项目组成的大型“组”;因此,它不能分成训练集和验证集。我看到你有两个选择:

  1. distribution直接在目标值(“高斯”参数)上训练最小二乘模型。
  2. (更好但更复杂)如果训练后模型的预期用途是预测,给定一项目,是否应该首选第一个项目而不是第二个项目,您可以相应地重新格式化您的数据:第一个项目的 112 个特征列,加上第二个项目的 112 个特征列,加上一个二进制目标,即 1 iff 项目 1 在原始数据集中具有更高的目标。然后,在此基础上训练一个逻辑模型(distribution“bernoulli”)。
于 2016-05-08T06:59:52.447 回答