Almacenamiento en caché de los vecinos más cercanos

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

Esta práctica demuestra cómo precomputar los k vecinos más cercanos antes de utilizarlos en KNeighborsClassifier. KNeighborsClassifier puede calcular internamente los vecinos más cercanos, pero precomputarlos puede tener varios beneficios, como un control más fino de los parámetros, el almacenamiento en caché para su uso múltiple o implementaciones personalizadas. Aquí utilizamos la propiedad de almacenamiento en caché de las tuberías para almacenar en caché el gráfico de vecinos más cercanos entre múltiples ajustes de KNeighborsClassifier.

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/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/CoreModelsandAlgorithmsGroup -.-> sklearn/neighbors("Nearest Neighbors") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/neighbors -.-> lab-49072{{"Almacenamiento en caché de los vecinos más cercanos"}} sklearn/pipeline -.-> lab-49072{{"Almacenamiento en caché de los vecinos más cercanos"}} sklearn/model_selection -.-> lab-49072{{"Almacenamiento en caché de los vecinos más cercanos"}} sklearn/datasets -.-> lab-49072{{"Almacenamiento en caché de los vecinos más cercanos"}} ml/sklearn -.-> lab-49072{{"Almacenamiento en caché de los vecinos más cercanos"}} end

Importar bibliotecas

En este paso, importaremos todas las bibliotecas necesarias.

from tempfile import TemporaryDirectory
import matplotlib.pyplot as plt

from sklearn.neighbors import KNeighborsTransformer, KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_digits
from sklearn.pipeline import Pipeline

Cargar datos

En este paso, cargaremos el conjunto de datos de dígitos de scikit-learn.

X, y = load_digits(return_X_y=True)
n_neighbors_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

Calcular el gráfico de vecinos más cercanos

En este paso, calcularemos el gráfico de vecinos más cercanos utilizando KNeighborsTransformer.

## El transformador calcula el gráfico de vecinos más cercanos utilizando el número máximo
## de vecinos necesarios en la búsqueda de cuadrícula. El modelo del clasificador filtra el
## gráfico de vecinos más cercanos según lo requerido por su propio parámetro n_neighbors.
graph_model = KNeighborsTransformer(n_neighbors=max(n_neighbors_list), mode="distance")

Definir el modelo del clasificador

En este paso, definiremos el modelo KNeighborsClassifier.

classifier_model = KNeighborsClassifier(metric="precomputed")

Almacenar en caché el gráfico de vecinos más cercanos

En este paso, almacenaremos en caché el gráfico de vecinos más cercanos entre múltiples ajustes de KNeighborsClassifier utilizando la propiedad de almacenamiento en caché de las tuberías.

## Tenga en cuenta que le damos a `memory` un directorio para almacenar en caché el cálculo del gráfico
## que se utilizará varias veces al ajustar los hiperparámetros del
## clasificador.
with TemporaryDirectory(prefix="sklearn_graph_cache_") as tmpdir:
    full_model = Pipeline(
        steps=[("graph", graph_model), ("classifier", classifier_model)], memory=tmpdir
    )

Ajustar hiperparámetros

En este paso, ajustaremos los hiperparámetros del clasificador utilizando GridSearchCV.

    param_grid = {"classifier__n_neighbors": n_neighbors_list}
    grid_model = GridSearchCV(full_model, param_grid)
    grid_model.fit(X, y)

Visualizar los resultados

En este paso, visualizaremos los resultados de la búsqueda de cuadrícula.

## Grafique los resultados de la búsqueda de cuadrícula.
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
axes[0].errorbar(
    x=n_neighbors_list,
    y=grid_model.cv_results_["mean_test_score"],
    yerr=grid_model.cv_results_["std_test_score"],
)
axes[0].set(xlabel="n_neighbors", title="Precisión de clasificación")
axes[1].errorbar(
    x=n_neighbors_list,
    y=grid_model.cv_results_["mean_fit_time"],
    yerr=grid_model.cv_results_["std_fit_time"],
    color="r",
)
axes[1].set(xlabel="n_neighbors", title="Tiempo de ajuste (con almacenamiento en caché)")
fig.tight_layout()
plt.show()

Resumen

En este laboratorio, hemos aprendido cómo precomputar los k vecinos más cercanos antes de utilizarlos en KNeighborsClassifier utilizando la propiedad de almacenamiento en caché de las tuberías. También hemos aprendido cómo ajustar los hiperparámetros del clasificador utilizando GridSearchCV y visualizar los resultados.