Iteraciones por mitades sucesivas

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, aprenderá a usar el método de búsqueda por mitades sucesivas para elegir iterativamente la mejor combinación de parámetros entre múltiples candidatos. Este método se implementa en las clases HalvingGridSearchCV y HalvingRandomSearchCV de la biblioteca Scikit-learn. En este laboratorio se usará la clase HalvingRandomSearchCV.

Consejos sobre la VM

Una vez finalizada la inicialización de 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 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/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/ensemble("Ensemble Methods") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/experimental("Experimental") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49305{{"Iteraciones por mitades sucesivas"}} sklearn/model_selection -.-> lab-49305{{"Iteraciones por mitades sucesivas"}} sklearn/datasets -.-> lab-49305{{"Iteraciones por mitades sucesivas"}} sklearn/experimental -.-> lab-49305{{"Iteraciones por mitades sucesivas"}} ml/sklearn -.-> lab-49305{{"Iteraciones por mitades sucesivas"}} end

Importando las bibliotecas necesarias

En este laboratorio se usarán las siguientes bibliotecas: pandas, numpy, matplotlib, sklearn.datasets, RandomForestClassifier, randint y HalvingRandomSearchCV. Importelas con el siguiente código:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint
from sklearn.experimental import enable_halving_search_cv
from sklearn.model_selection import HalvingRandomSearchCV

Cargando el conjunto de datos

La función make_classification del módulo sklearn.datasets se utiliza para generar un conjunto de datos de clasificación. El conjunto de datos contiene 400 muestras con 12 características. El código para cargar el conjunto de datos es el siguiente:

rng = np.random.RandomState(0)
X, y = datasets.make_classification(n_samples=400, n_features=12, random_state=rng)

Definiendo el espacio de parámetros

Define un diccionario param_dist que contiene los hiperparámetros y sus respectivos valores para buscar. Los hiperparámetros son max_depth, max_features, min_samples_split, bootstrap y criterion. El rango de búsqueda para max_features y min_samples_split se define usando la función randint del módulo scipy.stats. El código para definir el espacio de parámetros es el siguiente:

param_dist = {
    "max_depth": [3, None],
    "max_features": randint(1, 6),
    "min_samples_split": randint(2, 11),
    "bootstrap": [True, False],
    "criterion": ["gini", "entropy"],
}

Creando un objeto de búsqueda aleatoria por mitades

Crea un objeto HalvingRandomSearchCV para buscar en el espacio de parámetros. El objeto toma los siguientes argumentos:

  • estimator: el estimador a optimizar
  • param_distributions: el espacio de parámetros para buscar
  • factor: el factor por el cual se reduce el número de candidatos en cada iteración
  • random_state: el estado aleatorio utilizado para la búsqueda

El código para crear el objeto es el siguiente:

clf = RandomForestClassifier(n_estimators=20, random_state=rng)
rsh = HalvingRandomSearchCV(
    estimator=clf, param_distributions=param_dist, factor=2, random_state=rng
)

Ajustando el objeto de búsqueda aleatoria por mitades

Ajusta el objeto HalvingRandomSearchCV al conjunto de datos utilizando el método fit. El código para ajustar el objeto es el siguiente:

rsh.fit(X, y)

Analizando los resultados

El atributo cv_results_ del objeto de búsqueda contiene los resultados de la búsqueda. Conviértelo a un dataframe de pandas utilizando el siguiente código:

results = pd.DataFrame(rsh.cv_results_)

La columna params_str se crea convirtiendo la columna params a una cadena. Elimina las filas duplicadas que tienen los mismos valores de params_str e iter:

results["params_str"] = results.params.apply(str)
results.drop_duplicates(subset=("params_str", "iter"), inplace=True)

Luego, las puntuaciones de prueba promedio se pivotean con respecto al número de iteración y la combinación de parámetros utilizando el método pivot:

mean_scores = results.pivot(
    index="iter", columns="params_str", values="mean_test_score"
)

Finalmente, grafica las puntuaciones de prueba promedio a lo largo de las iteraciones utilizando el siguiente código:

ax = mean_scores.plot(legend=False, alpha=0.6)

labels = [
    f"iter={i}\nn_samples={rsh.n_resources_[i]}\nn_candidates={rsh.n_candidates_[i]}"
    for i in range(rsh.n_iterations_)
]

ax.set_xticks(range(rsh.n_iterations_))
ax.set_xticklabels(labels, rotation=45, multialignment="left")
ax.set_title("Scores of candidates over iterations")
ax.set_ylabel("mean test score", fontsize=15)
ax.set_xlabel("iterations", fontsize=15)
plt.tight_layout()
plt.show()

Interpretación de los resultados

La gráfica muestra las puntuaciones de prueba promedio de los candidatos a lo largo de las iteraciones. En la primera iteración, todos los candidatos se evalúan con una cantidad pequeña de recursos. En la segunda iteración, solo la mejor mitad de los candidatos se evalúa con el doble de recursos. Este proceso se repite hasta la última iteración, donde solo quedan 2 candidatos. El mejor candidato es el que tiene la puntuación de prueba promedio más alta en la última iteración.

Resumen

En este laboratorio, aprendiste cómo usar el método de búsqueda por mitades sucesivas para elegir iterativamente la mejor combinación de parámetros entre múltiples candidatos. La clase HalvingRandomSearchCV de la biblioteca Scikit-learn se utilizó para implementar el método de búsqueda. Los resultados de la búsqueda se analizaron e interpretaron utilizando una gráfica de las puntuaciones de prueba promedio a lo largo de las iteraciones.