Introduction
Ce laboratoire démontre l'utilisation de l'estimateur métarégresseur multi-sortie pour effectuer une régression multi-sortie. Un arbre de décision aléatoire est utilisé, qui prend en charge nativement la régression multi-sortie, de sorte que les résultats peuvent être comparés. Le but de ce laboratoire est de montrer comment utiliser le MultiOutputRegressor dans scikit-learn pour effectuer une régression multi-sortie et de comparer les résultats à un arbre de décision aléatoire standard.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques
Tout d'abord, nous devons importer les bibliothèques nécessaires. Nous utiliserons numpy, matplotlib et RandomForestRegressor, train_test_split et MultiOutputRegressor de scikit-learn.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor
Création d'un ensemble de données aléatoire
Ensuite, nous allons créer un ensemble de données aléatoire pour notre régression. Nous utiliserons numpy pour créer un ensemble de 600 valeurs de x entre -100 et 100, et les valeurs de y correspondantes calculées à partir de la fonction sinus et cosinus des valeurs de x plus un certain bruit aléatoire.
rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(600, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y += 0.5 - rng.rand(*y.shape)
Diviser les données en ensembles d'entraînement et de test
Nous allons diviser nos données en un ensemble d'entraînement de 400 et un ensemble de test de 200 en utilisant la fonction train_test_split de scikit-learn.
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=400, test_size=200, random_state=4)
Création d'un arbre de décision aléatoire pour la régression
Nous allons créer un arbre de décision aléatoire pour la régression avec une profondeur maximale de 30 et 100 estimateurs en utilisant RandomForestRegressor de scikit-learn.
max_depth = 30
regr_rf = RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=2)
regr_rf.fit(X_train, y_train)
Création d'un MultiOutputRegressor
Nous allons créer un MultiOutputRegressor en utilisant un arbre de décision aléatoire pour la régression comme estimateur de base. Nous utiliserons les mêmes paramètres que dans l'Étape 4.
regr_multirf = MultiOutputRegressor(RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=0))
regr_multirf.fit(X_train, y_train)
Prédiction sur de nouvelles données
Nous allons utiliser à la fois l'arbre de décision aléatoire pour la régression et le multi-output regressor pour effectuer des prédictions sur nos données de test.
y_rf = regr_rf.predict(X_test)
y_multirf = regr_multirf.predict(X_test)
Tracer les résultats
Nous allons tracer les résultats pour comparer les performances des deux régresseurs. Nous utiliserons matplotlib pour créer un graphique en points dispersés des données de test réelles, des prédictions effectuées par l'arbre de décision aléatoire pour la régression et des prédictions effectuées par le multi-output regressor.
plt.figure()
s = 50
a = 0.4
plt.scatter(y_test[:, 0], y_test[:, 1], edgecolor="k", c="navy", s=s, marker="s", alpha=a, label="Données")
plt.scatter(y_rf[:, 0], y_rf[:, 1], edgecolor="k", c="c", s=s, marker="^", alpha=a, label="Score RF=%.2f" % regr_rf.score(X_test, y_test))
plt.scatter(y_multirf[:, 0], y_multirf[:, 1], edgecolor="k", c="cornflowerblue", s=s, alpha=a, label="Score Multi RF=%.2f" % regr_multirf.score(X_test, y_test))
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("cible 1")
plt.ylabel("cible 2")
plt.title("Comparaison des forêts aléatoires et de l'estimateur métamulti-output")
plt.legend()
plt.show()
Sommaire
Dans ce laboratoire, nous avons montré comment utiliser MultiOutputRegressor de scikit-learn pour effectuer une régression multi-sortie. Nous avons comparé les performances de l'estimateur multi-sortie à celles d'un arbre de décision aléatoire standard pour la régression en utilisant un ensemble de données aléatoires. Les résultats ont montré que l'estimateur multi-sortie a légèrement mieux performé que l'arbre de décision aléatoire pour la régression.