Extraction de connaissances à partir de données structurées et non structurées

Séance 7 : Modélisation supervisée via différentes modèles

Utilisation de python

L'idée de cette séance est de voir l'utilisation de différentes méthodes pour la classification supervisée (création d'un modèle permettant de prédire une variable de type binaire). Ainsi, nous utiliserons les modèles suivants :

Données de travail

Nous allons réutiliser les données spam que nous avons utiliser la dernière fois

Toutes les fonctions dans sklearn utilisent le même formalisme, à savoir la séparation des données en deux objets :

$k$-plus proches voisins (ou $k$-NN - $k$-nearest neightbors)

L'idée de cette méthode, comme son nom l'indique, de rechercher un certain nombre de points proches de celui à prédire. Ce nombre $k$ est un des paramètre de la méthode, l'autre étant la méthode à utiliser pour calculer la distance entre deux points (très souvent la distance euclidienne).

Cette méthode a l'avantage d'être rapide, applicable à des données de grandes tailles et ne nécessite pas d'hypothèse forte. Par contre, si la méthode trouvent deux voisins à une distance identique, selon le cas, elle peut n'en retenir qu'un des deux (le premier dans la liste). Et si la valeur de $y$ est différente entre les deux, cela impacte très fortement les résultats.

Avec $k=5$

En variant le nombre de voisins $k$

On remarque ici que c'est en choisissant $k=1$ que l'on obtient les meilleurs résultats.

Arbres de décision

Cette méthode itérative cherche, à chaque noeud, la varaible explicative séparant le mieux les modalités à prédire. A la racine de l'arbre, il y a donc tous les individus, et la population est séparée en deux sous-population pour dans chaque fils. L'algorithme permet de définir quelle variable, et surtout quel seuil (dans le cas d'une variable quantitative) ou quelle répartition de modalités (dans le cas d'une variable qualitative), permet de mieux séparer les classes à prédire.

Cette méthode est intéressante, car elle permet de voir rapidement quelles sont les variables ayant le plus d'impact sur la classe à prédire (ce sont celles en premier dans l'arbre). Il existe différentes méthodes dans la façon de choisir la variable (CART par défaut dans sklearn). Son défaut principal est le sur-apprentissage possible, si l'arbre est trop profond. On parle alors d'élagage pour le rendre plus généralisable.

Arbre complet

Vous remarquerez que les performances sont très impressionnantes (seulement 3 mails mal classés).

Arbre élagué

Comme indiqué plus haut, il est généralement préférable d'élaguer l'arbre (i.e de couper des branches) pour éviter le sur-apprentissage. Cela permet généralement que l'arbre ait de meilleures performances sur des nouvelles données. Pour cela, on utilise une méthode cherchant pour comment l'impureté des feuilles (i.e. la part d'individus mal classés) évolue en fonction d'une valeur alpha. Dans l'idéal, pour la choisir, on doit avoir un jeu de données d'apprentissage (train) et un jeu de données test (test).

Ici, au vu du graphique, nous choisissons une valeur de 0.005 (avec la méthode du coude).

Réseaux de neurones

On parle ici de perceptron (simple couche ou multi-couches, en fonction de la complexité que l'on souhaite). L'idée est de connecter des neurones d'entrée (qui prendront les valeurs des variables explicatives) à un neurone de sortie (ou plusieurs en fonction de la variable à expliquer donc). Entre les deux, il y a une ou plusieurs couches de neurones cachés, chacun complètement connecté aux neurones de la couche précédente et de la couche suivante.

A partir de poids aléatoires sur chaque liaison entre neurones, l'algorithme propage l'erreur entre la valeur observée et la valeur prédite par le réseau à chaque couche, avec une méthode de back-propagation. Celle-ci permet de corriger les poids, afin que les neurones s'activent correctement. Cette méthode prend plusieurs paramètres comme le nombre de couches, la taille de chaque couche, la fonction d'activation d'un neurone, et d'autres encore.

Un des défauts majeurs est la difficulté, principalement dans le cadre d'un réseau multi-couches, à percevoir l'impact d'une variable par rapport à une autre. L'autre défaut étant le nombre important de paramètres, et la variabilité des résultats en fonction des valeurs de ceux-ci. Malgré cela, les performances sont plutôt très intéressantes.

Perceptron sans couche caché

Ici, on décide de n'avoir aucune couche caché, donc les neurones d'entrées sont directement connectés au neurone de sortie. Dans le cas d'une variable à expliquer quantitative, cela revient au modèle linéaire généralisé, pour information.

Pour notre cas, nous sommes obligé d'augmenter le nombre d'itérations pour que l'algorithme converge, avec des résultats plutôt bons.

Perceptron simple couche

Par défaut, la fonction choisit un réseau avec une couche cachée à 100 neurones, qui marche plutôt bien ici.

Perceptron multi-couches

Nous utilisons ici plusieurs couches, dont nous donnons la taille (i.e. nombre de neurones) dans le paramètre hiden_layer_sizes. Ici, après plusieurs essais (avec des choix empiriques), nous calculons un MLP avec 3 couches cachés de 100, 100 et 50 neurones respectivement.

Exercice

A partir des même données Spotify vu précédemment ce cours, nous souhaitons savoir s'il est possible de prédire le fait qu'une chanson soit populaire, ou non (variable popularity).

A faire

Sur ces données :