2014-06-26 73 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丟失的二進制分類。 –

相關問題