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

Ben*_*ins 8 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
...
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

感觉我显然做错了什么,但我认为我正在以记录的方式使用这些选项:

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

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

Mar*_*pel 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
Run Code Online (Sandbox Code Playgroud)