Séminaire IMT Grand-Est

Introduction à l'apprentissage automatique - TP4 exercice 1

Classification supervisée sur données réelles, et sélection de modèle par validation croisée


On commence par charger quelques bibliothèques...

In [ ]:
from sklearn import datasets, neighbors, naive_bayes, linear_model, model_selection
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# pour ignorer les "warnings" concernant les modifications futures
# (pour régression logistique et perceptron)
from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)

%matplotlib inline

...puis on charge le jeu de données digits:

In [ ]:
dataset = datasets.load_digits()
X_dataset = dataset.data
y_dataset = dataset.target

Bien entendu, quand on s'intéresse à un "vrai" problème de classification supervisée, on ne connaît pas les classes auxquelles les observations-tests appartiennent.

Pour mesurer la performance des différents algorithmes, on va séparer artificiellement le jeu de données en base d'apprentissage et base de test, et on pourra comparer le résultat de classification des observations-tests aux vraies classes.

On sépare aléatoirement le jeu de données en base d'apprentissage et base de test (20\% des observations), ainsi:

In [ ]:
X_train, X_test, y_train, y_test = model_selection.train_test_split(X_dataset,y_dataset,test_size=.2)

Calculez les scores de classification de la base de test pour les algorithmes 1-PPV, 5-PPV, 10-PPV, naive Bayes, régression logistique (comme fait dans une séance précédente), et perceptron.

Constatez que les scores varient si vous ré-exécutez le code de la cellule précédente, la base de test étant choisie aléatoirement.

In [ ]:
# votre code ici

Comparez les méthodes au sens de la validation croisée à K plis (K-fold cross validation), pour $K=10$.

Affichez la matrice de confusion du "meilleur" algorithme lorsque vous séparez base d'apprentissage et base de test dans la base de donnée initiale (avec respectivement 80% et 20% des observations initiales).

In [ ]:
# votre code ici


Identifiez les meilleurs classifieurs dans les deux cas suivants:

  • Breast-Cancer décrite ici.

et qui est fournie dans SKLearn:

dataset = datasets.load_breast_cancer()
  • South African Heart Disease décrite ici et disponible .

Pour cette base de données, vous allez être amené à charger le fichier CSV comme un dataframe Pandas (les dataframes Pandas permettent des fonctionnalités proches des dataframes R).

Puis chargez et traitez les données par:

import pandas as pd
dataset=pd.read_csv('SAheart.data')
print(dataset.iloc[:3,:]) 
# On transforme la variable bi-modale en variable qualitative:
dataset.iloc[:,5]=dataset.iloc[:,5].map({'Present':1, 'Absent':0}) 
print(dataset.iloc[:3,:])
X_dataset = dataset.values[:,:-1]
y_dataset = dataset.values[:,-1]


Dans le cas biclasse, quel serait le score de classification d'un tirage aléatoire?

In [ ]:
# breast cancers, votre code ici
In [ ]:
# South African Heart Disease, votre code ici