【问题标题】:Get holdout loss in Vowpal Wabbit在 Vowpal Wabbit 中获得保持损失
【发布时间】:2016-01-20 15:27:38
【问题描述】:

我正在尝试在 Vowpal Wabbit 中实现网格搜索或更复杂的超参数搜索。为此目的,是否有一种相对简单的方法可以在验证集(vw 中的保留)上获得损失函数值?大众必须计算它,例如对于每个传球次数,因为提前停止取决于它的价值。

到目前为止,我通过使用验证数据集创建一个单独的文件来绕过这一点,在这个数据集上保存不同模型的预测,并比较它们在 python 中的性能,从而导致不必要的数据浪费。但也许有一种方法可以明确使用大众坚持分数?

【问题讨论】:

  • --holdout_after(和vw -h | grep holdout)。也就是说,我通常也会准备一个单独的验证集,这样我就可以比较在不同训练规模上训练的模型并绘制学习曲线。我还计算了训练损失(训练误差)来评估过度拟合的程度。我可以提供一些脚本。
  • github.com/JohnLangford/vowpal_wabbit/pull/841(我的其他脚本对于我自己的实验设置来说太具体了,对其他人没有用处)
  • 另见github.com/martinpopel/vowpal_wabbit/wiki/vw-hyperopt-plans(我现在没有时间实施vw-hyperopt,但我想将来这样做。至少我的计划可能是灵感的来源。)
  • 使用--holdout_after=N,您需要连接训练文件和保留文件并计算 N = 训练文件中的示例数。大众在第一次通过后报告的损失将标记为h(作为保留),它将基于您的保留数据。如果您另外使用-p,您将保存预测(在整个连接文件上)。
  • 您可以使用--save_per_pass 代替--holdout_after,并使用vw -t -i model123 -d test.file 评估每次通过后保存的模型。另一种选择是在每次通过(或另一块训练数据)后使用--save_resume 保存模型,并根据需要继续训练并将训练与测试交织在一起(但将模型加载到内存中需要一些时间)。另一种选择是使用github.com/JohnLangford/vowpal_wabbit/wiki/… 按需保存模型(可能使用vw --daemon

标签: machine-learning vowpalwabbit hyperparameters


【解决方案1】:

总结 cmets,有几种方法可以从 VW 获得保持损失(它们可以组合):

  1. 通过一次性学习,VW 报告渐进式验证损失,(简单地说)在足够的示例后收敛到与保持损失大致相同的值。
  2. 在多次通过后,VW 会根据 每个 第 10 个示例(不是随机 1/10 示例)报告保持损失(除非指定 --holdout_off)。使用 --holdout_period 可以指定不同于 10 的数字。
  3. 参数 --holdout_after=N 指定输入数据的前 N ​​个示例将用于训练,文件的其余部分作为保留集(而不是每 10 个示例)。
  4. 可以使用-p predictions.txt 计算大众以外的损失(通过将predictions.txt 与带有金标签的输入数据进行比较)。当使用 X 遍时,predictions.txt 将包含 X*number_of_input_data_examples。因此,建议对训练数据进行训练(可能需要多次传递),将模型保存到文件中,然后仅使用 VW 进行预测:vw -i trained.model -t -d test.input -p test.predictions
  5. 在某些情况下--save_per_passvw --daemonsaving model on demand 可能会有所帮助。
  6. 对于计算保持(测试)损失和训练损失,可以从命令行轻松地使用vw-experiment

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2017-10-09
    • 2015-11-03
    • 2015-09-16
    • 2015-01-06
    • 2013-12-15
    • 2016-01-18
    • 2017-08-29
    • 2014-11-09
    相关资源
    最近更新 更多