Méthodes stochastiques pour l’apprentissage
automatique
Projets de TP
Gianluca Bontempi - Yann-Ael Le Borgne
1 Projet 1 : Classificateur naïf bayésien
1.1 But
Comme son nom l’ indique, ce classificateur se base sur le théorème de Bayes,
théorème permettant de calculer les probabilités conditionnelles à posteriori :
P(cj|a1, a2, a3, ..., an) = P(a1, a2, ..., an|cj)P(cj)
P(a1, a2, ..., an)
cjest une catégorie et aiest un attribut. La simplification apportée (d’où le
nom de naïf) est que l’on suppose les aiindépendants conditionnellement aux
cj, et donc
P(a1, a2, ..., an|cj) =
n
Y
i=1
P(ai|cj)
.
Bien qu’étant une forte hypothèse, les classificateurs naïfs bayésiens permettent
d’atteindre des performances satisfaisantes comparativement à d’autres modèles,
tout en restant simples à implémenter. Le but de ce projet sera d’implémenter
un tel classificateur en R, et de tester ses performances sur le jeu de données
’golub’ (fichier golub.Rdata). Ce fichier contient :
Une matrice d’entrées X, de 72 lignes (patients) et 7129 variables (gènes).
Un vecteur de sortie Y de 72 valeurs, associant à chaque patient un type
de leucémie (Lymphoblastique ou myeloide aigu) par l’identifiant 0 ou 1.
1.2 Specifications
La fonction predict.bayes à programmer prendra en entrée :
Un training set X.tr et Y.tr, contenant les valeurs des inputs et outputs
pour les exemples d’apprentissage,
Un test set X.ts contenant les inputs des données à tester,
Un paramètre k, précisant le nombre d’intervalles de discrétisation de l’es-
pace d’entrée,
1
et devra renvoyer un vecteur Y.pred, des prédictions pour les données à prédire
à partir de X.ts.
Nous fournissons ici l’algorithme de base :
Discrétiser l’espace des entrées en un nombre d’intervalles k
pour chacune des n variables d’entrée (utiliser la fonction quantile)
Créer une matrice proba_mat k*n pour stocker les probabilités P(a_i|c_j)
(Comptage à partir du training set X.tr)
Pour chacun des exemples dans X.ts
| Calculer la probabilité à posteriori à partir de la formule de Bayes
| Déterminer la classe correspondante et la stocker dans le vecteur de
| sortie Y.pred
Fin pour
1.3 Evaluations et questions
Utilisez le jeu de données golub.
1. Implémenter la fonction ’predict.bayes’.
2. Implémenter une fonction de cross validation qui permettra de renvoyer
l’erreur de cross validation du classificateur bayésien pour un k donné.
3. Déterminez la valeur optimale pour le paramètre kpar 10-fold cross vali-
dation.
NB : La commande ’browser()’ vous permet de mettre des points d’arrêts
dans un code pour le débugging.
2 Projet 2 : Sélection de variables
2.1 but
Reduire le nombre de variables d’entrées dans un problème de prédiction
permet souvent de réduire le nombre de paramètres à estimer, et donc d’amélio-
rer les performances du modèle de prédiction par une réduction de la variance
dans l’estimation des paramètres du modèles. Aussi, cela facilite l’interpréta-
tion des relations entre variables d’entrées et variable de sortie. Le but de ce
second projet est d’implémenter en R une méthode de sélection de variables
appelée ’forward selection’, puisqu’elle consiste à ajouter une à une les variables
d’entrées au modèle, jusqu’à ce que la qualité des performances du modèle de
prédiction se détériore. Le principe d’ajout des variables est détaillé dans la
section suivante.
2.2 Spécifications
La fonction feature.selection à programmer prendra en entrée un ensemble d’ob-
servations sous la forme d’une matrice X et d’un vecteur Y, contenant respecti-
2
vement les valeurs des inputs et outputs pour les exemples d’apprentissage. Elle
devra renvoyer :
Un vecteur feature.selected contenant les variables d’entrées (sous forme
d’indice se rapportant aux colonnes de la matrice X) pour lesquelles la
prédiction de l’algorithme était optimal.
Une valeur err.pred, contenant l’estimation de l’erreur de prédiction du
modèle utilisé pour le subset optimal feature.selected déterminé par l’al-
gorithme de sélection de variables.
Nous fournissons ici l’algorithme de base :
n<-nombre de variables
feature.selected<-{}
feature.remaining<-{ensemble des variables}
Pour i de 1 à n
| Pour j dans feature.remaining
| | feature.act<-{feature.selected,j}
| | Erreur_j<-estimation de l’erreur par 10-fold cross validation
| | du modèle pour X,Y réduit aux entrées feature.act
| Fin pour
| Erreur_i<-Erreur minimale obtenue dans Erreur_j
| Rajouter à feature.selected l’indice de la variables dont la contribution
| a le plus minimisé l’erreur
| Enlever à feature.remaining ce même indice
Fin pour
Renvoyer la partie de feature.selected pour laquelle l’erreur Erreur_i fut
la plus basse, avec cette erreur
Le jeu de données à utiliser se trouve dans le fichier ’breastCancer.Rdata’. Ce
fichier contient :
Une matrice d’entrées X, de 683 lignes (patientes) et 9 variables (données
physiologiques).
Un vecteur de sortie Y de 683 valeurs, indiquant par 0 et 1 le type de
tumeur (benigne ou maligne).
C’est une version légèrement modifiée qui est plus facile à manipuler que celle
de la librarie dont ce jeu de données est issue (mlbench).
Référez-vous à l’aide de mlbench (http ://cran.r-project.org, package mlbench),
page 3, pour une description du dataset.
L’algorithme à utiliser est celui des K-Nearest Neighbors (KNN). Etant donné
un exemple (un vecteur x de valeurs pour l’ensemble des variables d’entrées), la
procédure de classification d’un K-NN est la suivante :
Classer par ordre croissant les différents exemples de la base
d’apprentissage en fonction de la distance par rapport à x
Selectionner un sous ensemble K des plus proches voisins
Retouner la classe majoritaire parmi les output y associées aux K plus
proches voisins
3
2.3 Evaluations et questions
1. Testez la procédure avec comme modèles de prédictions les plus proches
voisins.
2. Implémenter une fonction de cross validation qui permettra de renvoyer
l’erreur de cross validation du classificateur K-NN pour un K donné.
3. Déterminez la valeur optimale pour le paramètre kpar 10-fold cross vali-
dation.
4. Implémentez la fonction de sélection de variables, et déterminez les para-
mètre optimaux en terme de nombre de voisins/subset de variables.
NB : La commande ’browser()’ vous permet de mettre des points d’arrêts
dans un code pour le débugging.
3 Compte rendu et deadline
Le compte rendu sera composé du code commenté et des résultats obtenus pour
les différentes questions.
Il sera à envoyer par mail avant le .... à yleb[email protected].
Bon travail !
4
1 / 4 100%