Importance des caractéristiques avec la forêt aléatoire

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous utiliserons la forêt aléatoire pour évaluer l'importance des caractéristiques dans une tâche de classification artificielle. Nous allons générer un ensemble de données synthétiques avec seulement 3 caractéristiques informatives. Les importances des caractéristiques de la forêt seront tracées, ainsi que leur variabilité entre les arbres représentée par les barre d'erreur.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers 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ésoudrons rapidement le problème pour vous.

Importation des bibliothèques

Nous allons importer les bibliothèques nécessaires pour ce laboratoire.

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
import pandas as pd
import numpy as np
import time

Générer des données

Nous allons générer un ensemble de données synthétiques avec seulement 3 caractéristiques informatives. Nous n'allons pas mélanger explicitement l'ensemble de données pour vous assurer que les caractéristiques informatives correspondront aux trois premières colonnes de X. De plus, nous allons diviser notre ensemble de données en sous-ensembles d'entraînement et de test.

X, y = make_classification(
    n_samples=1000,
    n_features=10,
    n_informative=3,
    n_redundant=0,
    n_repeated=0,
    n_classes=2,
    random_state=0,
    shuffle=False,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

Ajuster la forêt aléatoire

Nous allons ajuster un classifieur à forêt aléatoire pour calculer les importances des caractéristiques.

feature_names = [f"feature {i}" for i in range(X.shape[1])]
forest = RandomForestClassifier(random_state=0)
forest.fit(X_train, y_train)

Importance des caractéristiques basée sur la diminution moyenne de l'impureté

Les importances des caractéristiques sont fournies 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é au sein de chaque arbre. Nous allons tracer l'importance basée sur l'impureté.

start_time = time.time()
importances = forest.feature_importances_
std = np.std([tree.feature_importances_ for tree in forest.estimators_], axis=0)
elapsed_time = time.time() - start_time

print(f"Elapsed time to compute the importances: {elapsed_time:.3f} seconds")

forest_importances = pd.Series(importances, index=feature_names)

fig, ax = plt.subplots()
forest_importances.plot.bar(yerr=std, ax=ax)
ax.set_title("Feature importances using MDI")
ax.set_ylabel("Mean decrease in impurity")
fig.tight_layout()

Importance des caractéristiques basée sur la permutation des caractéristiques

L'importance des caractéristiques basée sur la permutation surmonte les limites de l'importance des caractéristiques basée sur l'impureté : elles n'ont pas de biais en faveur des caractéristiques à forte cardinalité et peuvent être calculées sur un ensemble de test laissé de côté. Nous allons calculer l'importance de permutation complète. Les caractéristiques sont mélangées n fois et le modèle est réajusté pour estimer son importance. Nous allons tracer le classement d'importance.

start_time = time.time()
result = permutation_importance(
    forest, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2
)
elapsed_time = time.time() - start_time
print(f"Elapsed time to compute the importances: {elapsed_time:.3f} seconds")

forest_importances = pd.Series(result.importances_mean, index=feature_names)

fig, ax = plt.subplots()
forest_importances.plot.bar(yerr=result.importances_std, ax=ax)
ax.set_title("Feature importances using permutation on full model")
ax.set_ylabel("Mean accuracy decrease")
fig.tight_layout()
plt.show()

Sommaire

Dans ce laboratoire, nous avons généré un ensemble de données synthétiques avec seulement 3 caractéristiques informatives et utilisé la forêt aléatoire pour évaluer l'importance des caractéristiques. Nous avons tracé les importances des caractéristiques de la forêt, ainsi que leur variabilité entre les arbres représentée par les barres d'erreur. Nous avons utilisé l'importance basée sur l'impureté et l'importance de permutation des caractéristiques pour calculer les importances des caractéristiques. Les mêmes caractéristiques ont été détectées comme les plus importantes en utilisant les deux méthodes.