Apprentissage avec Python et Scikit-learn: Les arbres de décision en régression

Page 1 sur 3Lecteur de document UniversityLib

Apprentissage avec Python et Scikit-learn: Les arbres de décision en régression

Data Science · lab

Voir tous les documents en intelligence artificielle et données

APPRENTISSAGE AVEC PYTHON ET SICKIT LEARN

Master 1 Business Analytics & Data Science

TP5 : Les arbres de décision avec Scikit-learn : Régression

Mounira Ilahi Amri

Objectifs

Dans ce TP, nous allons étudier les arbres de décision pour la

régression.

La documentation en ligne de scikit-learn est complète et devra être

consultée chaque fois que nécessaire. En particulier, l'ensemble des

méthodes disponibles dans l'outil sont résumées ici : http://scikit-

learn.org/stable/modules/classes.html .

** Ce tp est insipré d'un travail de Marin FERECATU

  • Ce TP est à rendre avant mercredi prochain 23h55

Enoncé du TP

la

les

avec

Publicité

régression

scikit-learn offre

arbres de décision,

Documentation de sklearn : http://scikit-learn.org/stable/modules/tree.html .

Pour

la

classe DecisionTreeRegressor. Comme pour la classification, la méthode fit(...) prend en

entrée le paramètre X (attributs des observations). Attention : les y ne sont pas des

étiquettes de classes mais des valeurs réelles.

from sklearn import tree

X = [[0, 0], [2, 2]]

y = [0.5, 2.5]

clf = tree.DecisionTreeRegressor()

clf = clf.fit(X, y)

clf.predict([[1, 1]])

Dans l’exemple suivant nous allons construire un signal sinusoïdal affecté par un bruit

1

Publicité

blanc et nous allons apprendre un arbre de régression sur ces données d’apprentissage.

import numpy as np

import matplotlib.pyplot as plt

from sklearn.tree import DecisionTreeRegressor

Créer les données d'apprentissage

np.random.seed(0)

X = np.sort(5 * np.random.rand(80, 1), axis=0)

y = np.sin(X).ravel()

fig = plt.figure(figsize=(12, 4))

fig.add_subplot(121)

plt.plot(X, y)

plt.title("Signal sinusoïdal pur")

On ajoute un bruit aléatoire tous les 5 échantillons

y[::5] += 3 * (0.5 - np.random.rand(16))

fig.add_subplot(122)

plt.plot(X, y)

plt.title("Signal sinusoïdal bruité")

Publicité

L’objectif est de régresser ce signal y à partir des valeurs de x. Pour cela, nous utilisons

un arbre de régression.

Apprendre le modèle

reg = DecisionTreeRegressor(max_depth=2)

reg.fit(X, y)

Prédiction sur la même plage de valeurs

X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]

y_pred = reg.predict(X_test)

Affichage des résultats

plt.figure()

plt.scatter(X, y, c="darkorange", label="Exemples d'apprentissage")

plt.plot(X_test, y_pred, color="cornflowerblue", label="Prédiction", linewidth=2)

plt.xlabel("x")

plt.ylabel("y")

plt.title("Régression par un arbre de décision")

2

plt.legend()

Publicité

plt.show()

Question1:

Changer la valeur du parametre max_depth. Que se passe-t-il si on prend une valeur trop

grande ? Trop petite ? Changer le taux d’éléménts affectés par le bruit (le y[::5]). Quand

tous les éléments sont affectés par le bruit, faut-il préférer une valeur élevée ou faible

pour max_depth ?

Question2:

Pour approfondir, chargez la base de données Diabetes du module sklearn.datasets et faire

une partition aléatoire en partie apprentissage et partie test (70% apprentissage, 30% test).

Construire un modèle d’arbre de régression sur cette base. Calculer l’erreur quadratique

moyenne sur l’ensemble de test. Faire un grid search pour trouver la valeur du

paramètre max_depth qui minimize cette erreur.

3