Faites un plearn vmat view abalone.amat pour avoir une idée du jeu de données sur lequel vous allez travailler. Il s'agit d'une base de données du répertoire UCI. Le but est de prédire l'âge d'abalones, qui sont des sortes de mollusques, à partir d'autres données comme leur taille, leur poids, etc. Remarquez que la première colonne est une catégorie (M, F, ou I pour Infant): appuyez sur la touche 's' pour visualiser les nombres par lesquels PLearn a automatiquement remplacé les caractères.
Le script abalone_nnet.plearn va vous permettre d'entraîner un réseau de neurones
sur l'ensemble d'entraînement (100 exemples) et l'ensemble de test (1044 exemples).
Utilisez-le par exemple avec la ligne de commande suivante :
plearn abalone_nnet.plearn nh=10 wd=0 nstages=50 lr=1e-1
Remarquez que l'erreur d'entraînement augmente! Cela est dû généralement à un
taux d'apprentissage (paramètre lr) trop haut, alors réduisez-le jusqu'à avoir une courbe
plus raisonnable.
Essayez également plusieurs valeurs du nombre de neurones cachés (nh) pour voir si vous pouvez faire mieux.
Une fois (plus ou moins) satisfait de la courbe, faites un plearn vmat view results_abalone.amat pour visualiser la MSE sur les ensembles d'entraînement (test1) et de test (test2). Le script d'apprentissage enregistre automatiquement l'erreur correspondant au point de la courbe où l'erreur en test est minimale (il fait donc de la sélection de modèle). En général augmenter le nombre d'époques (nstages) ne devrait donc pas avoir d'effet puisqu'on s'attend à ce que l'erreur en test augmente au bout d'un certain temps (sur-apprentissage), ce qui devrait être le cas sur les courbes affichées. Trouvez-vous quelque chose d'étrange dans les résultats ainsi obtenus ?
Complétez l'implémentation de PreprocessVMatrix (vous devrez sans doute lire
le reste du code de la classe pour au moins comprendre ce qu'elle fait exactement).
Vous pourrez en particulier utiliser les méthodes mean() et stddev() de la classe
StatsCollector.
Lorsque vous pensez avoir terminé (et que PLearn compile bien), faites:
plearn vmat diff test.vmat solution.amat
Si aucune différence n'est trouvée, votre code semble fonctionner. Sinon, appelez au secours !
Editez abalone.vmat pour effectuer le prétraitement qui vous semble le plus approprié pour chacune des colonnes. Pour l'instant, gardez la colonne target intacte, afin de pouvoir comparer les erreurs aux résultats précédents. Relancez l'apprentissage d'un réseau de neurones avec ce nouveau prétraitement. Comment l'apprentissage est-il modifié ?
Le script PLearn fourni dans la démo permet de choisir le modèle obtenant la meilleure erreur sur l'ensemble de test lors des itérations de l'optimisation : c'est ce que l'on appelle faire de l'early stopping. Rappelez-vous que, en pratique, il faut le faire sur un ensemble de validation qui n'est pas l'ensemble de test, sinon on triche ! Les autres hyper-paramètres à spécifier sont : le taux d'apprentissage, le nombre de neurones cachés, et le weight decay (pénalité sur les poids de manière à éviter les poids trop élevés). Essayez plusieurs combinaisons d'hyperparamètres pour obtenir la meilleure erreur de test possible.
Comparez en particulier les courbes d'apprentissage pour deux modèles fonctionnant "bien", l'un avec un weight decay de 0 et l'autre avec une valeur plus grande. Comment expliquez-vous les différences ?
Effectuez un prétraitement qui vous semble approprié sur la colonne target. Quelles différences cela fait-il ?