2016-07-25 7 views
0

Ich versuche Vowpal Wabbit zu verwenden, um eine binäre Klassifizierung zu machen, d. H. Bestimmte Merkmalswerte. Vw klassifiziert es entweder 1 oder 0. So habe ich die Trainingsdaten formatiert.Vowpal Wabbit nicht binäre Werte vorhersagen, vielleicht Übertraining?

1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ... 
-1 'name2 | feature1:1 feature2:0 feature3:5 feature4:2565 ... 
etc 

Ich habe etwa 30.000 1 Datenpunkte und etwa 3.000 0 Datenpunkte. Ich habe 100 1 und 100 0 Datenpunkte, die ich zum Testen verwende, nachdem ich das Modell erstellt habe. Diese Testdatenpunkte werden standardmäßig klassifiziert als 1. Hier ist, wie ich die Vorhersage Satz formatiert werden:

1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ... 

Von meinem Verständnis der VW-Dokumentation, muss ich entweder die logistische oder Scharnier loss_function für binäre Klassifikationen verwenden. Dies ist, wie ich habe das Modell wurde die Erstellung:

vw -d ../training_set.txt --loss_function logistic/hinge -f model 

Und das ist, wie ich die Prognosen versuchen:

vw -d ../test_set.txt --loss_function logistic/hinge -i model -t -p /dev/stdout 

Dies ist jedoch, wo ich in Probleme laufen lasse. Wenn ich die Scharnierverlustfunktion verwende, sind alle Vorhersagen -1. Wenn ich die logistische Verlustfunktion verwende, erhalte ich willkürliche Werte zwischen 5 und 11. Es gibt einen allgemeinen Trend für Datenpunkte, die 0 sein sollten, um niedrigere Werte zu sein, 5-7, und für Datenpunkte, die 1 von 6 sein sollten -11. Was mache ich falsch? Ich habe mich in der Dokumentation umgeschaut und eine Reihe von Artikeln über VW überprüft, um zu sehen, ob ich mein Problem identifizieren kann, aber ich kann es nicht herausfinden. Idealerweise würde ich einen Wert von 0,1 oder einen Wert zwischen 0 und 1 erhalten, der dem starken VW entspricht. Jede Hilfe wäre willkommen!

+0

Haben Sie die Trainingsdaten gemischt? –

+0

Nein, ist das erforderlich? Ich glaube nicht, dass die Reihenfolge der Daten eine Rolle gespielt hat, sondern nur die Merkmalswerte. – stormcynk

+0

Wenn die Trainingsdaten zuerst alle negativen Beispiele gefolgt von allen positiven Beispielen enthalten, dann wird Online-Lernen (standardmäßig in vw verwendet, wenn Sie nicht "--bfgs" angeben) nichts trainieren und wird (fast) nur positive Markierungen vorhersagen. Zufälliges Shuffling der Trainingsdaten verhindert diesen häufigen Fallstrick. Es ist nicht unbedingt erforderlich, wenn Ihre Trainingsdaten bereits gemischt sind (oder wenn sie einer natürlichen chronologischen Reihenfolge folgen). –

Antwort

0

Unabhängig von Ihrem Werkzeug und/oder spezifischen Algorithmus können Sie "Lernkurven" verwenden und Validierungs-/Testaufspaltungen trainieren, um Ihren Algorithmus zu diagnostizieren und festzustellen, was Ihr Problem ist. Nachdem Ihr Problem diagnostizieren Sie Anpassungen an Ihren Algorithmus, zum Beispiel anwenden können, wenn Sie feststellen, haben über anliegende Sie einige Aktionen wie anwenden können:

  1. hinzufügen
  2. Regularisierung mehr holen Trainingsdaten
  3. Reduzieren Sie die Komplexität von Ihrem Modell
  4. Beseitigen Sie redundante Funktionen.

Sie können Andrew Ng verweisen. "Ratschläge für maschinelles Lernen" Videos auf YouTube zu weiteren Details zu diesem Thema.

+0

Vielen Dank für den Rat, haben Sie etwas offensichtlich falsch mit der Art und Weise, wie ich meine Daten oder die Art, wie ich eingerichtet habe trainiere und führe ich Vorhersagen mit VW? – stormcynk

1
  • Wenn die Ausgabe nur -1 und +1 Etiketten sein sollte, verwenden Sie die --binary Option (bei der Prüfung).
  • Wenn die Ausgabe eine reelle Zahl zwischen 0 und 1 sein soll, verwenden Sie --loss_function=logistic --link=logistic. Die loss_function=logistic wird beim Training benötigt, damit die Zahl als Wahrscheinlichkeit interpretiert werden kann. Wenn die Ausgabe eine reelle Zahl zwischen -1 und 1 sein soll, verwenden Sie --link=glf1.

Wenn Ihre Trainingsdaten unsymmetrisch sind, z. 10 Mal mehr positive Beispiele als negativ, aber Ihre Testdaten sind ausgeglichen (und Sie wollen den besten Verlust für diese Testdaten erhalten), stellen Sie die importance weight der positiven Beispiele auf 0,1 (weil es 10 mal mehr positive Beispiele gibt).