Importancia de las características con el bosque aleatorio

Beginner

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

Introducción

En este laboratorio, usaremos el bosque aleatorio para evaluar la importancia de las características en una tarea de clasificación artificial. Generaremos un conjunto de datos sintético con solo 3 características informativas. Se graficarán las importancias de las características del bosque, junto con su variabilidad entre árboles representada por las barras de error.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos para que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar bibliotecas

Importaremos las bibliotecas necesarias para este laboratorio.

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

Generar datos

Generaremos un conjunto de datos sintético con solo 3 características informativas. No barajaremos explícitamente el conjunto de datos para asegurarnos de que las características informativas correspondan a las tres primeras columnas de X. Además, dividiremos nuestro conjunto de datos en subconjuntos de entrenamiento y prueba.

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)

Ajustar el bosque aleatorio

Ajustaremos un clasificador de bosque aleatorio para calcular las importancias de las características.

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

Importancia de las características basada en la disminución media de la impureza

Las importancias de las características se proporcionan por el atributo ajustado feature_importances_ y se calculan como la media y la desviación estándar de la acumulación de la disminución de la impureza dentro de cada árbol. Graficaremos la importancia basada en la impureza.

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

Importancia de las características basada en la permutación de características

La importancia de las características basada en la permutación supera las limitaciones de la importancia de las características basada en la impureza: no tienen un sesgo hacia las características de alta cardinalidad y se pueden calcular en un conjunto de prueba omitido. Calcularemos la importancia de la permutación completa. Las características se barajan n veces y el modelo se ajusta nuevamente para estimar su importancia. Graficaremos la clasificación de importancia.

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

Resumen

En este laboratorio, generamos un conjunto de datos sintético con solo 3 características informativas y usamos un bosque aleatorio para evaluar la importancia de las características. Graficamos las importancias de las características del bosque, junto con su variabilidad entre árboles representada por las barras de error. Usamos la importancia basada en la impureza y la importancia de la permutación de características para calcular las importancias de las características. Las mismas características se detectaron como las más importantes usando ambos métodos.