Perceptron multi-couches
Ce TP consiste à faire quelques expérimentations avec le perceptron multi-couches (PMC) dans une tâche de classification supervisée. L'objectif est de compendre le fonctionnement d'un PMC et d'exhiber le phénomène de sur-apprentissage. On utilise la bibliothèque nnet de R qui permet de manipuler des perceptrons à une couche cachée et un neurone en sortie. La fonction d'activation des neurones de la couche cachée est la fonction logistique.
En cas de besoin, voir le TP précédent.
Entraînement et utilisation d'un PMC
Voir le TP précédent.
La seule différence est qu'ici, la sortie attendue est 0 ou 1 et non pas un nombre réel. Le perceptron de sortie aura donc une fonction d'activation logistique.
Apprentissage des poids
Voir le TP précédent.
Prédiction à l'aide d'un PMC
Voir le TP précédent.
Application
Exercice 1
On va utiliser les exemples présents dans ce fichier. Chaque exemple possède deux attributs numériques et une classe (0 ou 1).
- Charger ce fichier dans R. On procédera comme suit :
m <- as.matrix (read.table ("https://philippe-preux.github.io/ensg/miashs/l3-rnf/tps/pmc/expe-2-classes/40.exemples.txt", header = T))
x <- m [, 1:2]
y <- m [, 3]
- la première instruction lit les données depuis l'url indiquée et les met dans une matrice dénommée m. Cette matrice possède 3 colonnes, les 2 premières sont les 2 attributs des exemples, la 3è est la classe de chaque exemple.
- la deuxième instruction place dans x les 2 colonnes de m, donc les attributs de chacun des exemples.
- la troisième instruction place dans y la 3è colonne de m, donc la classe des exemples.
- Faites un graphique des exemples. Chaque point a une couleur qui dépend de sa classe (bleu pour 0, vert pour 1). Vous devez obtenir quelque chose comme cela :
Pour que chaque point soit représenté par un petit disque, vous ajouterez le paramètre pch = 19 dans l'appel de plot().
L'objectif de l'exercice est de créer des PMC ayant un nombre croissant de neurones dans leur couche cachée (de 1 à 10 neurones par exemple) est de voir la classe prédite en chaque point du domaine.
- Créer et entraîner un PMC ayant 1 seul neurone dans la couche cachée.
- Calculer la classe prédite pour chaque exemple et mettre le résultat dans y.predite. Pour cela, on fera :
y.predite <- round (predict (pmc, x))
La sortie du perceptron est un nombre compris entre 0 et 1. Il faut l'arrondir pour obtenir 0 ou 1 et pouvoir le comparer à y.
- Calculer le nombre d'exemples dont la classe est mal prédite par ce PMC.
Si y.predite est le vecteur des prédictions effectuées pour chaque exemple, on obtient ce nombre d'exemples mal prédits par :
length (which (y != y.predite))
- On va évaluer les PMC en leur faisant prédire la classe de chaque point d'une grille 100x100 dont les coordonnées sont comprises entre -1 et 1. Ces points doivent être mis dans une matrice pour pouvoir être traités par predict(). On construit cette grille comme suit :
n.grille <- 100
grille <- matrix (0, nrow = n.grille * n.grille, ncol = 2)
for (i in 1:n.grille)
for (j in 1:n.grille) {
grille [(i - 1) * n.grille + j, 1] <- 2 / n.grille * i - 1
grille [(i - 1) * n.grille + j, 2] <- 2 / n.grille * j - 1
}
- Prédire la classe de chaque point de la grille. Placer le résultat dans y.grille.
- Afficher le résultat de cette prédiction dans un graphique où chaque point de la grille est indiqué par une couleur, bleu si la classe prédite est 0, vert sinon.
- Ajouter les exemples, avec le même code de couleurs.
Vous devez obtenir quelque chose qui ressemble à cette image :
Pour que chaque point de la grille soit affiché de manière discrète, vous ajouterez le paramètre pch = "." dans l'appel de plot().
En supposant que y.grille contient les prédictions pour chaque point de la grille, la figure s'obtient comme suit :
plot (grille, col = ifelse (y.grille < .5, "blue", "green"), pch = ".")
points (x [, 1], x [, 2], col = ifelse (y == 0, "blue", "green"), pch = 19)
- Maintenant, vous faites la même chose pour des PMC ayant de 2 à 10 neurones cachés.
- Vous comparez le nombre d'exemples mal classés pour chaque taille de la couche cachée. Quel PMC donne le minimum d'erreur de classification ?
- Vous réalisez le graphique pour chaque taille de PMC et vous les comparez visuellement. Qu'en pensez-vous ?
Exercice 2
- Vous refaites la même chose avec ce jeu d'exemples.
- Faites-en un graphique pour le comparer au précédent ; ils se ressemblent beaucoup mais il y a une différence importante.
- Obtenez-vous les mêmes conclusions que précédemment ?