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

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49268{{"Eliminación recursiva de características con validación cruzada"}} sklearn/feature_selection -.-> lab-49268{{"Eliminación recursiva de características con validación cruzada"}} sklearn/model_selection -.-> lab-49268{{"Eliminación recursiva de características con validación cruzada"}} sklearn/datasets -.-> lab-49268{{"Eliminación recursiva de características con validación cruzada"}} ml/sklearn -.-> lab-49268{{"Eliminación recursiva de características con validación cruzada"}} end

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.