Régression logistique

Dans ce TP, nous abordons la régression logistique. C'est une méthode très utilisée pour la classification supervisée qu'il faut connaître. Elle estime la probabilité qu'une donnée soit d'une certaine classe étant donné un ensemble d'exemples.
À l'issue de ce TP, vous m'envoyez par email un compte-rendu (format pdf) indiquant la réponse aux questions qui sont posées. Vous m'envoyez également un fichier python réalisant toutes les manipulations de ce TP : je dois pouvoir exécuter ce fichier en tapant python3 nom-de-votre-fichier.py et reproduire vos résultats. Cette exécution ne doit pas provoquer d'erreur de python. Remarque : un notebook ne convient pas.

Régression logistique en python

Préliminaires

On commence par importer la bibliothèque adéquate par : from sklearn import linear_model.
On suppose que l'on a chargé des exemples. On note comme d'habitude X_train et Y_train les exemples d'entraînement, X_test et Y_test les exemples de test. J'utilise les iris pour illustrer ce qui suit.

Estimation des paramètres du modèle

Étant donné X_trainY_train, on estime les paramètres du modèle de régression logistique comme suit :

modele_regression_logistique = linear_model. LogisticRegression ()
modele_regression_logistique. fit (X_train, Y_train)

Prédire la classe de données à partir du modèle de régression logistique

On peut maintenant utiliser le modèle pour prédire la classe d'une donnée ou obtenir la probabilité pour cette donnée d'appartenir à chacune des 3 classes.
Pour cela, en supposant que donneesApredire est un tableau contenant les attributs des données à prédire (tableau de la même forme que X_train, par exemple X_test), on écrit :

classesPredites = modele_regression_logistique. predict (donneesApredire)

qui met dans classesPredites la classe prédite pour chacune des données contenues dans donneesApredire.
Par exemple, si on applique le modèle sur l'ensemble d'entraînement, j'obtiens :

modele_regression_logistique. predict (X_train)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1
 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

Quand vous le faites, le résultat que vous obtenez peut-être légérement différent. (Pourquoi d'après vous ?)
Pour obtenir les probabilités d'appartenance à chacune des classes, on écrit :

probaClasses = modele_regression_logistique. predict_proba (donneesApredire)

probaClasses est alors un tableau dont chaque ligne correspond à une donnée de donneesApredire, chaque élément (colonne) correspondant à la probabilité d'appartenir à une classe.
Par exemple, si on applique le modèle sur l'ensemble d'entraînement, on obtient :

modele_regression_logistique. predict_proba (X_train)
[[  8.79681649e-01   1.20307538e-01   1.08131372e-05]
 [  7.99706325e-01   2.00263292e-01   3.03825365e-05]
 [  8.53796795e-01   1.46177302e-01   2.59031285e-05]
...
 [  1.45811816e-03   2.98379693e-01   7.00162189e-01]
 [  1.09779827e-03   1.31785617e-01   8.67116585e-01]
 [  1.68397530e-03   2.81057800e-01   7.17258224e-01]]

Quand vous le faites, le résultat que vous obtenez peut-être légérement différent. (Pourquoi d'après vous ?)
Naturellement, pour chaque donnée, la classe prédite correspond à la colonne ayant la plus grande valeur (probabilité).

Travail en autonomie

Mettre le pied à l'étrier de la régression logistique

Mettre en œuvre la régression logistique sur ce jeu de données.
Centrer-réduire les attributs est-il utile ? Est-ce que cela change le modèle ?
Quelle est la proportion de données de test pour lesquelles le modèle « n'est pas sûr de lui « ? (on dira que le modèle n'est pas sûr de lui si la probabilité estimée est dans l'intervalle [0,2; 0,8]). Réaliser plusieurs découpages du jeu d'exemples et mesurer cette proportion. Est-il stable ?
Comparer les performances de ce modèle avec les prédictions d'un arbre de de décision, d'une forêt aléatoire et d'un perceptron multi-couche. Prenez soin d'utiliser de bons modèles.

Les olives

Appliquez la régression logistique au jeu de données olives à 8 classes (voir ce TP). À nouveau, comparer les résultats à un arbre de décision, une forêt et un PMC.