2

Je voudrais former le réseau sigmoïde feedforward binaire pour le classement de la catégorie avec la commande suivante à l'aide impressionnante vowpal wabbit tool:vowpal-wabbit: utilisation de passes multiples, holdout, & holdout-période pour éviter le surajustement?

vw --binary --nn 4 train.vw -f category.model 

Et le tester:

vw --binary -t -i category.model -p test.vw 

Mais j'ai eu de très mauvais résultats (à comparer à mon estimateur svm linéaire).

J'ai trouvé un commentaire que je devrais utiliser argument Number of Training Passes (--passes arg).

Donc ma question est comment connaître le nombre de passes de formation afin de ne pas obtenir de nouveau formé modèle?

P.S. devrais-je utiliser argument holdout_period? et comment?

Répondre

2

La commande de test dans la question est incorrecte. Il n'a pas d'entrée (-p ... indique les prédictions de sortie). En outre, il ne sait pas si vous voulez test de ou prédire parce qu'il dit test mais la commande utilisée a -p ...

test signifie que vous avez marqué-données et vous évaluez la qualité de votre modèle. Strictement parlant: prédire signifie que vous n'avez pas d'étiquettes, donc vous ne pouvez pas savoir à quel point vos prédictions sont bonnes. Pratiquement, vous pouvez également prédire des données étiquetées en attente (en prétendant qu'elles n'ont pas d'étiquettes en les ignorant) et ensuite évaluer à quel point ces prédictions sont bonnes, puisque vous avez réellement des étiquettes.

En général:

  • si vous voulez faire classification binaire, vous devez utiliser des étiquettes en {-1, 1} et utiliser --loss_function logistic. --binary qui est une option indépendante qui signifie que vous voulez que les prédictions soient binaires (vous donnant moins d'informations).

  • Si vous disposez déjà d'un ensemble de tests distinct avec des étiquettes, vous n'avez pas besoin de vous retenir.

Le mécanisme de maintien en vw a été conçu pour remplacer le test-set et éviter la pose, il est pertinent que si des passes multiples sont utilisées parce que dans un seul passage tous les exemples sont effectivement détenus-out; chaque exemple suivant (encore non vu) est traité comme 1) non étiqueté pour la prédiction, et comme 2) étiqueté pour le test et la mise à jour du modèle. IOW: votre train-set est effectivement aussi votre test-set.

Vous pouvez faire plusieurs passes sur le jeu train sans holdout:

vw --loss_function logistic --nn 4 -c --passes 2 --holdout_off train.vw -f model 

puis tester le modèle avec un séparé et étiquetée, test set:

vw -t -i model test.vw 

ou faire passes multiples sur le même train avec une certaine résistance comme un ensemble de test.

vw --loss_function logistic --nn 4 -c --passes 20 --holdout_period 7 train.vw -f model 

Si vous ne disposez pas d'un test ensemble, et que vous voulez adapter-fort à l'aide de plusieurs-passes, vous pouvez demander vw de tenir chaque sortie N e exemple (la valeur par défaut est 10 N, mais vous pouvez le remplacer explicitement en utilisant --holdout_period <N> comme vu ci-dessus). Dans ce cas, vous pouvez spécifier un nombre de passes plus élevé car vw effectuera automatiquement une terminaison anticipée lorsque la perte sur l'ensemble bloqué commencera à augmenter.

Vous souhaitez vous remarquez frappé la résiliation anticipée depuis vw imprimera quelque chose comme:

passes used = 5 
... 
average loss = 0.06074 h 

Indiquant que seulement 5 des N passes ont été effectivement utilisés avant le début de l'arrêt, et l'erreur sur le sous-ensemble détenus sur de l'exemple est 0,06074 (le h suivant indique qu'il s'agit d'une perte bloquée).

Comme vous pouvez le voir, le nombre de passes et la holdout période sont des options complètement indépendantes. Pour améliorer et obtenir plus de confiance dans votre modèle, vous pouvez utiliser d'autres optimisations, faire varier le holdout_period, essayer d'autres arguments --nn. Vous pouvez également vérifier l'utilitaire vw-hypersearch (dans le sous-répertoire utl) pour trouver de meilleurs hyper-paramètres.

Voici un exemple d'utilisation vw-hypersearch sur l'un des tests ensembles inclus avec la source:

$ vw-hypersearch 1 20 vw --loss_function logistic --nn % -c --passes 20 --holdout_period 11 test/train-sets/rcv1_small.dat --binary 
trying 13 ............. 0.133333 (best) 
trying 8 ............. 0.122222 (best) 
trying 5 ............. 0.088889 (best) 
trying 3 ............. 0.111111 
trying 6 ............. 0.1 
trying 4 ............. 0.088889 (best) 
loss(4) == loss(5): 0.088889 
5  0.08888 

Indication de ce que ce soit 4 ou 5 devrait être de bons paramètres pour --nn qui donne une perte de 0,08888 sur un HOLD- hors sous-ensemble de 1 sur 11 exemples.