2014-06-26 78 views
8

我想要获得用反转散列保存的vowpal wabbit模型。我有以下产生有效模式:Vowpal Wabbit inverted_hash选项会产生空输出,但为什么?

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,但该模型为邻以更加人性化的可读格式输出,其中包含要素名称后加 权重,而不是散列索引和权重。

有没有人看到为什么我的第二个命令不能产生任何输出?

回答

9

这是由最近修复的VW中的错误引起的(由于此问题),请参阅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 
+0

有趣。在实验中,我发现结果可能被解释为不同意你关于'--oaa'的观点。只有'-b 31',它报告的平均损失为0.6。使用'-b 31 --loss_function = logistic',它会报告丢失.48(并且''-l'和'--l1'和'--passses'并没有真正改变太多)。用'-b 31 --oaa 2 -c -k - 通过3 -l 0.25',vw报告只损失0.19。如果'--oaa 2'没有意义,那为什么它表现得更好呢?我并不想讨厌;我只是想明白。 –

+0

你不应该比较苹果(0/1损失)和橙子(后勤或平方损失)。对于OAA,大众报告总是0/1损失。如果没有OAA(或其他多类别减税),大众公司会报告您要求的损失(正方形,后勤,合并......)。 –

+1

您可以强制VW用'--binary'报告0/1丢失的二进制分类。 –

相关问题