Introduction
Dans ce laboratoire, nous utiliserons la bibliothèque scikit-learn pour entraîner une forêt aléatoire sur l'ensemble de données Olivetti Faces et évaluer l'importance des fonctionnalités basée sur l'impureté. Nous utiliserons l'importance des fonctionnalités pour créer une carte thermique de l'importance des pixels. Nous paralléliserons également la construction et le calcul des prédictions dans plusieurs tâches.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour passer à l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
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églerons rapidement le problème pour vous.
Charger les données et ajuster le modèle
Nous commençons par charger l'ensemble de données Olivetti Faces et en limitant le contenu aux cinq premières classes seulement. Ensuite, nous entraînons une forêt aléatoire sur cet ensemble de données et évaluons l'importance des fonctionnalités basée sur l'impureté. Nous allons définir le nombre de coeurs à utiliser pour les tâches.
from sklearn.datasets import fetch_olivetti_faces
## Nous sélectionnons le nombre de coeurs à utiliser pour effectuer l'ajustement parallèle du
## modèle de forêt. `-1` signifie utiliser tous les coeurs disponibles.
n_jobs = -1
## Charger l'ensemble de données de visages
data = fetch_olivetti_faces()
X, y = data.data, data.target
## Limiter l'ensemble de données aux 5 classes.
mask = y < 5
X = X[mask]
y = y[mask]
## Un classifieur de forêt aléatoire sera ajusté pour calculer l'importance des fonctionnalités.
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=750, n_jobs=n_jobs, random_state=42)
forest.fit(X, y)
Évaluer l'importance des fonctionnalités
Nous évaluons l'importance des fonctionnalités en fonction de la diminution moyenne de l'impureté (MDI). L'importance des fonctionnalités est fournie par l'attribut ajusté feature_importances_ et elles sont calculées comme la moyenne et l'écart-type de l'accumulation de la diminution d'impureté dans chaque arbre.
import time
import matplotlib.pyplot as plt
start_time = time.time()
img_shape = data.images[0].shape
importances = forest.feature_importances_
elapsed_time = time.time() - start_time
print(f"Temps écoulé pour calculer les importances : {elapsed_time:.3f} secondes")
imp_reshaped = importances.reshape(img_shape)
plt.matshow(imp_reshaped, cmap=plt.cm.hot)
plt.title("Importances des pixels en utilisant les valeurs d'impureté")
plt.colorbar()
plt.show()
Interpréter la carte thermique
La carte thermique montre l'importance des pixels. Plus le pixel est chaud, plus il est important. Nous pouvons observer les pixels importants qui contribuent à la classification de l'ensemble de données Olivetti Faces.
Sommaire
Dans ce laboratoire, nous avons appris à entraîner une forêt aléatoire sur l'ensemble de données Olivetti Faces et à évaluer l'importance des fonctionnalités basée sur l'impureté. Nous avons créé une carte thermique de l'importance des pixels et observé les pixels importants qui contribuent à la classification de l'ensemble de données Olivetti Faces.