在 Vowpal Wabbit 中获取保留损失

Get holdout loss in Vowpal Wabbit

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

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

总结评论,有几种方法可以从 VW 获得 holdout 损失(它们可以组合):

  1. 通过一次性学习,VW 报告渐进式验证损失,(简单地说)在足够多的示例后收敛到与 holdout 损失大致相同的值。
  2. 通过多次传递,VW 根据 每个 第 10 个示例(不是随机 1/10 的示例)报告保持损失(除非指定 --holdout_off)。使用 --holdout_period 可以指定与 10 不同的数字。
  3. 参数 --holdout_after=N 指定输入数据的前 N ​​个示例将用于训练,文件的其余部分作为保持集(而不是每 10 个示例)。
  4. 可以使用 -p predictions.txt 并计算 VW 之外的损失(通过将 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