可以将 Vowpal Wabbit 预测与观察到的目标值一起输出到 .txt 吗?

Possible to output Vowpal Wabbit predictions to .txt along with observed target values?

我们正在编写一个使用 Vowpal Wabbit 的预测应用程序,并希望尽可能多地自动化我们的模型验证过程。任何人都知道 vw 是否有一个本地实用程序来输出测试文件中的目标值以及 vw 模型的预测?这些值在预测期间打印到终端输出。常规 vw 调用是否有参数,或者 utl 文件夹中是否有一个工具可以逐行打印目标和预测?

下面是我现在用于预测的代码:

vw -d /path/to/data/test.vw -t -i lg.vw --link=logistic -p predictions.txt

我的目标是从 Vowpal 中生成如下所示的输出文件:

Predicted  Target
0.78       1
0.23       0 
0.49       1

...

更新

@arielf 的代码非常有效。我只做了一个小的补充,将流媒体结果打印到 validation.txt 文件:

vw -d test.vw -t -i lg.vw --link=logistic -P 1 2>&1 | \
     perl -ane 'print "$F[5]\t$F[4]\n" if (/^\d/)' > validation.txt

试试这个:

vw -d test.vw -t -i lg.vw --link=logistic -P 1 2>&1 | \
    perl -ane 'print "$F[5]\t$F[4]\n" if (/^\d/)'

解释:

-P 1     # Add option: set vw progress report to apply to every example

注:-P为大写P--progress的别名),1为进度打印间隔

请注意,您不需要使用 -p ... 添加预测,因为在这种情况下这是多余的(预测已包含在 vw 进度线中)

带有 headers 的进度报告行如下所示:

average   since     example    example   current  current   current
loss      last      counter     weight     label  predict  features
0.000494  0.000494        1        1.0   -0.0222   0.0000        14

由于进度报告转到 stderr,我们需要将 stderr 重定向到 stdout (2>&1)。

现在我们将 vw 进度输出通过管道传输到 perl 以实现简单的 post-processing。 perl 命令循环遍历每一行输入,默认情况下不打印 (-n),auto-splits 进入 white-space 上的字段 (-a),并应用表达式(-e) 打印由 TAB 分隔的第 5 和第 4 个字段,如果该行以数字开头则以换行符终止(为了跳过任何不是进度行的内容,例如 headers,序言和摘要行)。我颠倒了第 5 和第 4 个提交的顺序,因为 vw 进度线的观察值在预测值之前,而您要求相反的顺序。

更新

Aaron 在 Google 驱动器中发布了一个使用此解决方案的工作示例:https://drive.google.com/open?id=0BzKSYsAMaJLjZzJlWFA2N3NnZGc