2014-06-26 7 views
8

Ich versuche, ein Vowpal Wabbit-Modell mit invertierten Hashes zu erhalten. Ich habe ein gültiges Modell mit dem folgenden hergestellt:Vowpal Wabbit inverted_hash Option erzeugt leere Ausgabe, aber warum?

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

, die ein Modell-Datei wie folgt erzeugt:

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 
... 

(und so weiter für viele Tausende mehr Funktionen). Um jedoch nützlicher zu sein, muss ich die Feature-Namen sehen. Schien wie eine ziemlich offensichtliche Sache, aber ich habe

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

und es produziert wie diese eine Modelldatei (keine Gewichte produziert werden):

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 

Es fühlt sich an wie ich offensichtlich etwas getan habe falsch, aber ich glaube, ich bin die Optionen im documented way mit:

--invert_hash zu --readable_model ähnlich ist, aber das Modell ist o Ausgabe in einem besser lesbaren Format mit Feature-Namen gefolgt von Gewichtungen anstelle von Hash-Indizes und Gewichten.

Kann jemand sehen, warum mein zweiter Befehl keine Ausgabe produziert?

Antwort

9

Dies wird durch einen Fehler in VW verursacht, der vor kurzem behoben wurde (wegen dieser Frage), siehe https://github.com/JohnLangford/vowpal_wabbit/issues/337.

Übrigens ist es nicht sinnvoll, --oaa 2 zu verwenden. Wenn Sie eine binäre Klassifizierung (auch logistische Regression genannt) wünschen, verwenden Sie --loss_function=logistic (und stellen Sie sicher, dass Ihre Bezeichnungen 1 und -1 sind). OAA ist nur für N> 2 Klassen sinnvoll (und es wird empfohlen, --loss_function=logistic mit --oaa zu verwenden).

Beachten Sie auch, dass das Lernen mit --invert_hash ist viel langsamer (und erfordert mehr Speicher, natürlich).

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

Interessant: mit einem Durchgang über die Trainingsdaten mit -t Die empfohlene Art und Weise, wie Inverted-Hash-Modell zu schaffen, vor allem mit mehreren Durchgängen ist ein übliches binäres Modell zu lernen und es dann in umgekehrter Hash zu konvertieren. Experimentell finde ich Ergebnisse, die so interpretiert werden könnten, dass sie mit Ihrer Aussage über "--oaa" nicht übereinstimmen. Mit nur "-b 31" meldet es einen durchschnittlichen Verlust von .6. Mit '-b 31 --loss_function = logistic' meldet es einen Verlust von .48 (und das Fummeln mit '-l' und' -l1' und '-passes' ändert es nicht wirklich viel). Mit '-b 31 --aa 2 -c -k - führt 3 -l 0,25 ', meldet vw nur einen Verlust von .19. Wenn '--oaa 2' keinen Sinn ergibt, warum läuft es dann so viel besser? Ich versuche nicht unangenehm zu sein. Ich will nur verstehen. –

+0

Sie sollten Äpfel (0/1 Verlust) und Orangen (logistischer oder quadratischer Verlust) nicht vergleichen. Für OAA meldet VW immer 0/1 Verlust. Ohne OAA (oder andere Klassenreduzierungen) meldet VW den gewünschten Verlust (Quadrat, Logistik, Scharnier ...). –

+1

Sie können VW zwingen, 0/1 Verlust für die binäre Klassifizierung mit '--binary' zu melden. –

Verwandte Themen