Apprentissage avec Python et Scikit-Learn

Page 1 sur 4Lecteur de document UniversityLib

Apprentissage avec Python et Scikit-Learn

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

régression

scikit-learn offre

arbres de décision,

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

Publicité

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

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()

Publicité

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é")

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)

Publicité

plt.xlabel("x")

plt.ylabel("y")

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

2

plt.legend()

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