dimanche 1 juin 2014

Troisième TD sur les réseaux neuronaux



Comment choisir un seuil pour produire une décision dans un contexte de classification? La solution : les Courbes ROC (Receiver Operating Characteristic), comment les produire, et comment les interpréter... C'est ce que nous allons voir pendant ce TD.

Introduction
Vous avez vu dans les TD précédent comment mettre en formaliser une problématique de classification pour la résoudre avec des réseaux neuronaux (en apprentissage supervisé ou non-supervisé). Vous avez vu comment formater les données, et comment entraîner un réseau pour une tâche donnée. Vous avez vu aussi comment on fait pour évaluer correctement la performance de ce type de programme.
Ce que vous allez voir dans ce TD, c'est comment adapter un système de classification à une situation réelle. On restera dans la situation simple à 2 classes de la problématique de détection de cellules cancéreuses.On verra que dans presque toutes les applications, toutes les erreurs n'ont pas le même coût. Typiquement les "faux positif" et "faux négatifs" ont des conséquences bien différente selon les situation, en particulier quand il s'agit d'analyse dans un contexte médical...

Choix du seuil
On va tout d'abord constater que, avec un même réseaux, selon le choix de seuil de décision, ces deux types d'erreurs (vrai et faux positifs) évoluent. Pour cela reprenez le programme de test donné dans le TD 1 ainsi que le script de calcul de la matrice de confusion. Utilisez des valeur de seuil différentes et voyez comment les 2 types d'erreur changent... Trouvez les valeurs de seuils "extrèmes" :
  • "extrème prudence". Trouvez la valeur de seuil permettant de n'avoir aucun faux négatif, c'est à dire de ne rater aucun cas de cancer. Dans ce cas combien de faux positifs avons nous ?
  • "extrème précision " .Trouvez la valeur de seuil permettant de n'avoir aucun faux positif, c'est à dire de ne pas faire inutilement peur au patients. Dans ce cas combien de faux négatifs avons nous ?
En pratique, selon le coût réels des deux situations d'erreur, il faudra trouver un compromis optimal. Pour cela un outils pratique permet de trouver ce compromis dans faire les tâtonnements sur le seuil. Il s'agit des courbes ROC qui permettent de représenter graphiquement toutes les valeurs de seuil ainsi que les taux des 2 types d'erreurs associées.

Courbes ROC (Receiver Operating Characteristic)

Le calcul de la courbe

Il n'y a pas de magie, la constitution des courbes ROC nécessite de tester toutes les valeurs de seuil... La bonne nouvelle, c'est que c'est un programme qui va le réaliser pour nous. Vous trouverez sur sourceforge le programme simple ROC curve, qui fait automatise la production de ce genre de courbes. Téléchargez le, installez le, lisez le fichier README pour voir comment l'utiliser. Et surtout utiliser d'abord les données d'exemple fournies (avant d'utiliser vos données) pour bien comprendre comment fonctionne se programme. Regardez bien le fichier d'exemple pour voir le format de donné utilisé (oui il y aura encore quelques petites bidouilles de format à mettre en oeuvre ;) ). Le logiciel crée un fichier ".points" (avec comme nom de base le nom de votre fichier de données), c'est ce fichier qui contient la courbe ROC.

Visualiser la courbe

Le logiciel de calcul de courbe ROC ne fait que calculer les coordonnées des points de la courbe. Il faut utiliser un autre logiciel pour la visualiser. Ils s'agit de données au format CSV. Vous pouvez utiliser le logiciel de votre choix pour le visualiser. Si vous n'en connaissez pas je vous propose d'utiliser le logiciel gnuplot qui est déjà installé sur les postes de travail. Gnuplot est un logiciel de tracé graphique qui fonctionne en ligne de commande. Pour commencer, tapez gnuplot dans un terminal. Ensuite enchaînez les commandes suivantes :
gnuplot> set style data  line
gnuplot> plot "./data_sorted.dat.points" using 1:2
La première commande demande de tracer des lignes entre les points. La deuxième demande d'afficher le contenu d'un fichier en utilisant les données de la première colonne pour l'axe des X et la deuxième pour l'axe Y. Dans cet exemple j'ai utilisé le fichier donné en exemple dans le logiciel "simple ROC curve". Attention, le format CSV de "simple ROC curve" ne convient pas à gnuplot. Le changement est simple il suffit de remplacer toutes les virgules par des espaces (ce qui se fait en deux clic via n'importe quel éditeur de texte). Évidement une fois que vous avez réussi à tracer la courbe des données d'exemple vous tracerez la courbe correspondant à votre réseau neuronal, en suivant le même processus. Pour que cette courbe soit réaliste il faut bien sur que vous ayez entraîné et testé votre réseau sur deux bases disjointes (comme pour l'obtention de la matrice de confusion).

Conclusion
Si vous avez réalisé (et compris) le contenu des 3 TD, vous êtes prêt pour le TP. Vous savez formuler un problème de classification pour le résoudre avec des réseaux neuronaux (apprentissage supervisé ou non). Vous savez construire un réseau et l'entraîner. Vous savez l'évaluer en minimisant les risques de sur-évaluation des performances. Vous savez aussi le paramétrer (choisir un seuil) pour en tirer le maximum et adapter ses capacités de classification à une situation réelle.
Il ne reste plus qu'à s'attaquer à une problématique un peu plus compliquée (voir ici pour une présentation avec une vidéo) , ce sera l'objectif du TP...