Otimização de Hiperparâmetros de Modelos com GridSearchCV

Beginner

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

Introdução

Neste tutorial, aprenderemos sobre a função GridSearchCV no Scikit-Learn. GridSearchCV é uma função usada para procurar os melhores hiperparâmetros para um determinado modelo. É uma busca exaustiva sobre valores de parâmetros especificados para um estimador. Os parâmetros do estimador usados para aplicar esses métodos são otimizados por busca em grade cruzada validada por meio de uma grade de parâmetros.

Dicas de Máquina Virtual

Após o início da VM, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação de operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você encontrar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para você.

Importando bibliotecas

Vamos começar importando as bibliotecas necessárias.

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

Carregando o conjunto de dados

Nesta etapa, carregaremos um conjunto de dados usando a função make_hastie_10_2 do Scikit-Learn. Esta função gera um conjunto de dados sintético para classificação binária.

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

Definindo os hiperparâmetros e métricas de avaliação

Nesta etapa, definiremos os hiperparâmetros para o modelo DecisionTreeClassifier e as métricas de avaliação que usaremos. Usaremos as métricas AUC (Área Sob a Curva ROC) e Precisão.

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

Realizar a busca em grade

Nesta etapa, usaremos a função GridSearchCV para realizar a busca em grade. Iremos procurar os melhores hiperparâmetros para o parâmetro min_samples_split do 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 os resultados

Nesta etapa, visualizaremos os resultados da busca em grade usando um gráfico. Iremos plotar as pontuações AUC e Precisão para os conjuntos de treinamento e teste.

plt.figure(figsize=(13, 13))
plt.title("GridSearchCV avaliando usando vários avaliadores simultaneamente", fontsize=16)

plt.xlabel("min_samples_split")
plt.ylabel("Pontuação")

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

## Obter o array numpy regular do 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]

    ## Plotar uma linha vertical tracejada no melhor resultado para aquele avaliador marcado por x
    ax.plot(
        [
            X_axis[best_index],
        ]
        * 2,
        [0, best_score],
        linestyle="-.",
        color=color,
        marker="x",
        markeredgewidth=3,
        ms=8,
    )

    ## Anotar a melhor pontuação para aquele avaliador
    ax.annotate("%0.2f" % best_score, (X_axis[best_index], best_score + 0.005))

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

Resumo

Neste tutorial, aprendemos sobre a função GridSearchCV no Scikit-Learn. Vimos como carregar um conjunto de dados, definir hiperparâmetros e métricas de avaliação, realizar a busca em grade e visualizar os resultados usando um gráfico. GridSearchCV é uma função importante a ser usada ao procurar os melhores hiperparâmetros para um determinado modelo.