Ich versuche eine Eins-gegen-alles-logistische Regression, um redaktionelle Artikel nach Thema Kategorien anhand ihres Textes mit Vowpal Wabbit zu klassifizieren. Wenn ich versuche, mit den gleichen Daten, die für das Training verwendet wurden, Vorhersagen für neue Artikel zu treffen, habe ich schlechte Ergebnisse, aber ich würde aufgrund der Überanpassung unrealistisch gute Ergebnisse erwarten. In diesem Fall möchte ich eigentlich overfitting, weil ich überprüfen möchte, ob ich vowpal wabbit richtig verwende.Ein-gegen-alles logistische Regressions-Klassifikator mit Vowpal Wabbit
Mein Modell auf Beispiele trainiert wird, die wie folgt aussehen, wobei jedes Merkmal ein Wort aus dem Artikel ist, und jedes Etikett ist eine Kennung, einer Kategorie, wie Sport oder Unterhaltung: 1 | the baseball player ... stadium 4 | musicians played all ... crowd ... 2 | fish are an ... squid
Meine Ausbildung Befehl sieht wie folgt aus: vw --oaa=19 --loss_function=logistic --save_resume -d /tmp/train.vw -f /tmp/model.vw
Mein Test-Befehl wie folgt aussieht: vw -t --probabilities --loss_function=logistic --link=logistic -d /tmp/test.vw -i /tmp/model.vw -p /tmp/predict.vw --raw_predictions=/tmp/predictions_raw.vw
ich verwende --probabilities
und --link=logistic
b Weil ich möchte, dass meine Ergebnisse als die Wahrscheinlichkeit des Artikels, der zu dieser Klasse gehört, interpretierbar sind.
Ich habe ein offensichtliches Problem mit der Größe meines Datasets (81 Beispiele und 52000 Features), aber ich erwartete, dass dies zu einer starken Überanpassung führen würde und somit alle Vorhersagen, die auf dem gleichen Datensatz wie die Trainingsdaten gemacht wurden, ziemlich gut sind . Mache ich etwas falsch mit meinen vowpal wabbit Befehlen? Ist mein Verständnis der Datenwissenschaft aus? Hier
ist der Ausgang aus dem Training Befehl:
Num weight bits = 18
learning rate = 0.5
initial_t = 0
power_t = 0.5
using no cache
Reading datafile = /tmp/train.vw
num sources = 1
average since example example current current current
loss last counter weight label predict features
1.000000 1.000000 1 1.0 15 1 451
1.000000 1.000000 2 2.0 8 15 296
1.000000 1.000000 4 4.0 8 7 333
0.875000 0.750000 8 8.0 15 15 429
0.500000 0.125000 16 16.0 8 7 305
0.531250 0.562500 32 32.0 12 8 117
0.500000 0.468750 64 64.0 3 15 117
finished run
number of examples per pass = 81
passes used = 1
weighted example sum = 81.000000
weighted label sum = 0.000000
average loss = 0.518519
total feature number = 52703
Und für den Test Befehl:
only testing
predictions = /tmp/predict.vw
raw predictions = /tmp/predictions_raw.vw
Num weight bits = 18
learning rate = 0.5
initial_t = 0
power_t = 0.5
using no cache
Reading datafile = /tmp/test.vw
num sources = 1
average since example example current current current
loss last counter weight label predict features
1.000000 -0.015873 1 1.0 4294967295 3(7%) 117
1.000000 1.000000 2 2.0 4294967295 3(7%) 88
1.000000 1.000000 4 4.0 4294967295 3(7%) 188
1.000000 1.000000 8 8.0 4294967295 9(7%) 1175
1.000000 1.000000 16 16.0 4294967295 5(7%) 883
1.000000 1.000000 32 32.0 4294967295 7(7%) 229
1.000000 1.000000 64 64.0 4294967295 15(7%) 304
finished run
number of examples per pass = 40
passes used = 2
weighted example sum = 81.000000
weighted label sum = 0.000000
average loss = 1.000000
average multiclass log loss = 999.000000
total feature number = 52703
Mit '--probabilities' brauchen Sie nicht' --link = logistic' noch '--raw_predictions'. Sind Ihre Trainingsdaten gemischt (oder natürlich chronologisch geordnet)? –
@MartinPopel Ich sehe, danke. Ich habe Probleme, Informationen darüber zu finden, was genau "- Probabilities" und "--link = logistic" tun. Ja, ich habe darauf geachtet, meine Beispiele vor dem Training zu mischen. (Danke an eine andere SO Antwort von Ihnen) – vaerek
Haben Sie es ohne '--link = logisitic' versucht? '--probabilities' berechnet die logistische Linkfunktion intern. Versuchen Sie auch, '--save_resume' wegzulassen: Es wird nur benötigt, wenn Sie das Modell in mehreren Schritten trainieren müssen (und es kann den gemeldeten Testverlust beeinflussen, wenn es im letzten Trainingsschritt verwendet wurde). –