2016-07-08 8 views
0

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 
+0

Mit '--probabilities' brauchen Sie nicht' --link = logistic' noch '--raw_predictions'. Sind Ihre Trainingsdaten gemischt (oder natürlich chronologisch geordnet)? –

+0

@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

+0

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

Antwort

0

ich mein Hauptproblem glauben war nur, dass ich mehr Pässe laufen benötigt. Ich verstehe nicht ganz, wie vw das Online-Lernen implementiert und wie sich das vom Batch-Lernen unterscheidet, aber nach mehreren Durchgängen sank der durchschnittliche Verlust auf 13%. Mit --holdout_off aktiviert ging dieser Verlust weiter auf% 1. Vielen Dank an @arielf und @MartinPopel

Running training command with 2421 examples: vw --oaa=19 --loss_function=logistic --save_resume -c --passes 10 -d /tmp/train.vw -f /tmp/model.vw 
final_regressor = /tmp/model.vw 
Num weight bits = 18 
learning rate = 0.5 
initial_t = 0 
power_t = 0.5 
decay_learning_rate = 1 
using cache_file = /tmp/train.vw.cache 
ignoring text input in favor of cache input 
num sources = 1 
average since   example  example current current current 
loss  last   counter   weight label predict features 
1.000000 1.000000   1   1.0  11  1  234 
1.000000 1.000000   2   2.0  6  11  651 
1.000000 1.000000   4   4.0  2  12  1157 
1.000000 1.000000   8   8.0  4  2  74 
1.000000 1.000000   16   16.0  12  15  171 
0.906250 0.812500   32   32.0  9  6  6 
0.750000 0.593750   64   64.0  15  19  348 
0.625000 0.500000   128   128.0  12  12  110 
0.566406 0.507812   256   256.0  12  5  176 
0.472656 0.378906   512   512.0  5  5  168 
0.362305 0.251953   1024   1024.0  16  8  274 
0.293457 0.224609   2048   2048.0  3  4  118 
0.224670 0.224670   4096   4096.0  8  8  850 h 
0.191419 0.158242   8192   8192.0  6  6  249 h 
0.164926 0.138462  16384  16384.0  3  4  154 h 

finished run 
number of examples per pass = 2179 
passes used = 10 
weighted example sum = 21790.000000 
weighted label sum = 0.000000 
average loss = 0.132231 h 
total feature number = 12925010 
Verwandte Themen