我试图用倒置的哈希来保存一个用于保存的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
类似,但模型以更易读的格式输出,其中的特征名称后跟 权重,而不是哈希索引和权重。
有谁知道为什么我的第二个命令无法产生任何输出?
答案 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