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

时间:2015-08-02 18:37:43

标签: vowpalwabbit

我们正在编写一个使用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

1 个答案:

答案 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