Vowpal Wabbit inverted_hash选项产生空输出,但为什么呢?

时间:2014-06-26 17:56:20

标签: vowpalwabbit

我试图用倒置的哈希来保存一个用于保存的vowpal wabbit模型。我有一个有效的模型生成如下:

vw --oaa 2 -b 24 -d mydata.vw --readable_model mymodel.readable

生成如下模型文件:

Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options: --oaa 2
:0
66:0.016244
67:-0.016241
80:0.026017
81:-0.026020
84:0.015005
85:-0.015007
104:-0.053924
105:0.053905
112:-0.015402
113:0.015412
122:-0.025704
123:0.025704
...

(等等数千个功能)。但是,为了更有用,我需要查看功能名称。看起来像一个相当明显的事情,但我做了

vw --oaa 2 -b 24 -d mydata.vw --invert_hash mymodel.inverted

它产生了这样的模型文件(没有产生权重):

Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options: --oaa 2
:0

感觉我显然做错了什么,但我想我正在使用documented way中的选项:

  

--invert_hash--readable_model类似,但模型以更易读的格式输出,其中的特征名称后跟   权重,而不是哈希索引和权重。

有谁知道为什么我的第二个命令无法产生任何输出?

1 个答案:

答案 0 :(得分:10)

这是由于最近修复的大众汽车中的错误(由于此问题而导致),请参阅https://github.com/JohnLangford/vowpal_wabbit/issues/337

顺便说一下,使用--oaa 2是没有意义的。如果您想要二进制分类(也就是逻辑回归),请使用--loss_function=logistic(并确保您的标签为1和-1)。 OAA仅对N> 2个类有意义(建议--loss_function=logistic使用--oaa)。

另请注意,使用--invert_hash学习慢得多(当然需要更多内存)。建议使用反向散列模型的方法,尤其是多次传递,是学习通常的二进制模型,然后使用-t的训练数据一次传递将其转换为反向散列:

vw -d mytrain.data -c --passes 4 -oaa 3 -f model.binary
vw -d mytrain.data -t -i model.binary --invert_hash model.humanreadable