Eliminación recursiva de características con validación cruzada

Beginner

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

Introducción

En este laboratorio, revisaremos un proceso paso a paso para implementar la eliminación recursiva de características con validación cruzada (RFECV) utilizando scikit-learn. La RFECV se utiliza para la selección de características, que es el proceso de seleccionar un subconjunto de características relevantes para su uso en la construcción del modelo. Utilizaremos una tarea de clasificación con 15 características, de las cuales 3 son informativas, 2 son redundantes y 10 son no informativas.

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 a que Jupyter Notebook termine de cargar. 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.

Generación de datos

Generaremos una tarea de clasificación utilizando la función make_classification de scikit-learn. Generaremos 500 muestras con 15 características, de las cuales 3 son informativas, 2 son redundantes y 10 son no informativas.

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=500,
    n_features=15,
    n_informative=3,
    n_redundant=2,
    n_repeated=0,
    n_classes=8,
    n_clusters_per_class=1,
    class_sep=0.8,
    random_state=0,
)

Entrenamiento y selección del modelo

Crearemos el objeto RFECV y computaremos las puntuaciones validadas cruzadas. La estrategia de puntuación "accuracy" (exactitud) optimiza la proporción de muestras clasificadas correctamente. Usaremos la regresión logística como estimador y la validación cruzada estratificada con 5 divisiones (folds).

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## Mínimo número de características a considerar
clf = LogisticRegression()
cv = StratifiedKFold(5)

rfecv = RFECV(
    estimator=clf,
    step=1,
    cv=cv,
    scoring="accuracy",
    min_features_to_select=min_features_to_select,
    n_jobs=2,
)
rfecv.fit(X, y)

print(f"Número óptimo de características: {rfecv.n_features_}")

Graficar el número de características vs. puntuaciones de validación cruzada

Graficaremos el número de características seleccionadas en función de las puntuaciones de validación cruzada. Usaremos matplotlib para crear la gráfica.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Número de características seleccionadas")
plt.ylabel("Exactitud promedio en la prueba")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("Eliminación recursiva de características \ncon características correlacionadas")
plt.show()

Resumen

En este laboratorio, revisamos el proceso de implementar la eliminación recursiva de características con validación cruzada (RFECV) utilizando scikit-learn. Generamos una tarea de clasificación con 15 características, de las cuales 3 eran informativas, 2 eran redundantes y 10 eran no informativas. Usamos la regresión logística como estimador y la validación cruzada estratificada con 5 divisiones (folds). Graficamos el número de características seleccionadas en función de las puntuaciones de validación cruzada. Encontramos que el número óptimo de características era 3, lo cual correspondía al verdadero modelo generativo. También notamos una plataforma de puntuaciones equivalentes para 3 a 5 características seleccionadas debido a la introducción de características correlacionadas.