Nous considérons dans ces séances de TP le jeu de données spam utilisé comme exemple en cours.

1 Données spam

Commencer par installer le package kernlab qui contient les données spam :

Charge les données à l’aide de la commande suivante :

La commande suivante affiche la strucutre de l’objet spam chargé dans l’environnement :

Créer un objet n contenant le nombre d’individus, et p le nombre de variables, grâce à :

Pour un descriptif des données, consulter la page de l’aide grâce à ?kernlab::spam

L’objectif est de construire un classifieur capable de prédire le statut du mail (variable appelée type) à partir des caractéristiques sur les proportions d’occurences de mots et de caractères dans le mail (les 57 autres variables).

La fonction table() permet d’afficher la répartition de la variable type :

## 
## nonspam    spam 
##    2788    1813

2 Le package rpart

Charger le package rpart (pour recursive partitioning), puis consulter l’aide de la fonction rpart à l’aide de :

3 Construction d’un arbre.

  1. Construire un arbre de classification t_def à l’aide de la fonction rpart, en gardant les valeurs par défaut des différents paramètres. La fonction demande en premier argument une formule du genre \(\mathtt{y \sim x}\) et des données data = spam. De plus, dans une formule le signe . placé à droite du signe \(\mathtt{\sim}\) signifie “toutes les variables”.
  1. Faire afficher l’arbre en tapant t_def, tracer l’arbre à l’aide des commandes plot(t_def), puis text(t_def). Consulter également summary(t_def).

4 Prédictions

Prédire les données de l’échantillon d’apprentissage à l’aide de la fonction predict, qui demande comme premier argument le prédicteur par arbre et en deuxième le nom du jeu de données à prédire (regarder l’aide de predict.rpart). Calculer alors le taux d’erreur empirique.

## [1] 0.09737014

5 Quelques paramètres

Trouver quels arbres sont construits par les commandes suivantes (regarder la fonction rpart.control qui permet de régler les paramètres de construction d’un arbre) :

Faire afficher puis tracer les arbres t1 et t2. Calculer leurs erreurs empiriques.

##      err_emp_def err_emp_t1 err_emp_t2
## [1,]  0.09737014  0.2062595 0.00108672

6 Erreur de prédiction

  1. Découper aléatoirement le jeu de données en deux. On pourra commencer par utiliser la commande :

    qui permet de permuter aléatoirement les indices de lignes du jeu de données spam. Il faut alors créer un jeu de données d’entraînement et un jeu de de données de validation.

## [1] 2300   58
## [1] 2301   58
  1. Calculer des estimations de l’erreur de prédiction pour les 3 arbres construits précédemments.
##      err_valid_t_def err_valid_t1 err_valid_t2
## [1,]       0.1029987    0.2116471   0.09821817

7 Elagage.

  1. A partir de l’arbre maximal sur le jeu de données d’entraînement, faire afficher les résultats de la construction de la suite de sous-arbres élagués (consulter l’aide de rpart.object).
  1. Déterminer la valeur de la complexité correspondante au minimum de l’erreur par validation croisée (colonne xerror).
  1. Elaguer l’arbre maximal au niveau de cette complexité, en utilisant la fonction prune.