Optimizar los hiperparámetros del modelo con GridSearchCV

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 tutorial, aprenderemos sobre la función GridSearchCV en Scikit-Learn. GridSearchCV es una función que se utiliza para buscar los mejores hiperparámetros para un modelo dado. Es una búsqueda exhaustiva sobre valores de parámetros especificados para un estimador. Los parámetros del estimador utilizado para aplicar estos métodos se optimizan mediante una búsqueda en cuadrícula validada cruzada sobre una cuadrícula de parámetros.

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 cargarse. La validación de 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/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49219{{"Optimizar los hiperparámetros del modelo con GridSearchCV"}} sklearn/model_selection -.-> lab-49219{{"Optimizar los hiperparámetros del modelo con GridSearchCV"}} sklearn/metrics -.-> lab-49219{{"Optimizar los hiperparámetros del modelo con GridSearchCV"}} sklearn/datasets -.-> lab-49219{{"Optimizar los hiperparámetros del modelo con GridSearchCV"}} ml/sklearn -.-> lab-49219{{"Optimizar los hiperparámetros del modelo con GridSearchCV"}} end

Importar bibliotecas

Comencemos importando las bibliotecas necesarias.

import numpy as np
from matplotlib import pyplot as plt

from sklearn.datasets import make_hastie_10_2
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier

Cargar el conjunto de datos

En este paso, cargaremos un conjunto de datos utilizando la función make_hastie_10_2 de Scikit-Learn. Esta función genera un conjunto de datos sintético para la clasificación binaria.

X, y = make_hastie_10_2(n_samples=8000, random_state=42)

Definir los hiperparámetros y las métricas de evaluación

En este paso, definiremos los hiperparámetros para el modelo DecisionTreeClassifier y las métricas de evaluación que utilizaremos. Utilizaremos las métricas AUC (Área Bajo la Curva) y Precisión.

scoring = {"AUC": "roc_auc", "Accuracy": make_scorer(accuracy_score)}

Realizar la búsqueda en cuadrícula

En este paso, utilizaremos la función GridSearchCV para realizar la búsqueda en cuadrícula. Estaremos buscando los mejores hiperparámetros para el parámetro min_samples_split del modelo DecisionTreeClassifier.

gs = GridSearchCV(
    DecisionTreeClassifier(random_state=42),
    param_grid={"min_samples_split": range(2, 403, 20)},
    scoring=scoring,
    refit="AUC",
    n_jobs=2,
    return_train_score=True,
)
gs.fit(X, y)
results = gs.cv_results_

Visualizar los resultados

En este paso, visualizaremos los resultados de la búsqueda en cuadrícula utilizando un gráfico. Graficaremos las puntuaciones AUC y Precisión para ambos conjuntos de entrenamiento y prueba.

plt.figure(figsize=(13, 13))
plt.title("GridSearchCV evaluando utilizando múltiples clasificadores simultáneamente", fontsize=16)

plt.xlabel("min_samples_split")
plt.ylabel("Puntuación")

ax = plt.gca()
ax.set_xlim(0, 402)
ax.set_ylim(0.73, 1)

## Obtener la matriz numpy regular a partir de la MaskedArray
X_axis = np.array(results["param_min_samples_split"].data, dtype=float)

for scorer, color in zip(sorted(scoring), ["g", "k"]):
    for sample, style in (("train", "--"), ("test", "-")):
        sample_score_mean = results["mean_%s_%s" % (sample, scorer)]
        sample_score_std = results["std_%s_%s" % (sample, scorer)]
        ax.fill_between(
            X_axis,
            sample_score_mean - sample_score_std,
            sample_score_mean + sample_score_std,
            alpha=0.1 if sample == "test" else 0,
            color=color,
        )
        ax.plot(
            X_axis,
            sample_score_mean,
            style,
            color=color,
            alpha=1 if sample == "test" else 0.7,
            label="%s (%s)" % (scorer, sample),
        )

    best_index = np.nonzero(results["rank_test_%s" % scorer] == 1)[0][0]
    best_score = results["mean_test_%s" % scorer][best_index]

    ## Graficar una línea vertical discontinua en la mejor puntuación para ese clasificador marcada por x
    ax.plot(
        [
            X_axis[best_index],
        ]
        * 2,
        [0, best_score],
        linestyle="-.",
        color=color,
        marker="x",
        markeredgewidth=3,
        ms=8,
    )

    ## Anotar la mejor puntuación para ese clasificador
    ax.annotate("%0.2f" % best_score, (X_axis[best_index], best_score + 0.005))

plt.legend(loc="best")
plt.grid(False)
plt.show()

Resumen

En este tutorial, aprendimos sobre la función GridSearchCV en Scikit-Learn. Vimos cómo cargar un conjunto de datos, definir hiperparámetros y métricas de evaluación, realizar la búsqueda en cuadrícula y visualizar los resultados utilizando un gráfico. GridSearchCV es una función importante para utilizar cuando se busca los mejores hiperparámetros para un modelo dado.