我们正在编写一个使用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
答案 0 :(得分:4)
试试这个:
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
进度行中)
包含标题的进度报告行,如下所示:
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
以进行简单的后处理。 perl
命令在每行输入上循环,默认情况下不打印(-n
),自动拆分为空格(-a
)上的字段,并应用表达式{{1如果行以数字开头,则打印由TAB分隔的第5和第4个字段,并以换行符结束(为了跳过任何不是进度行的内容,例如标题,前导和摘要行)。我扭转了第五和第五第四个提交的订单,因为-e
进度线在预测值之前具有观察值并且您要求相反的顺序。
更新
Aaron在Google云端硬盘中发布了一个使用此解决方案的工作示例:https://drive.google.com/open?id=0BzKSYsAMaJLjZzJlWFA2N3NnZGc