Mise en cache des plus proches voisins

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire montre comment pré-calculer les k plus proches voisins avant de les utiliser dans KNeighborsClassifier. KNeighborsClassifier peut calculer les plus proches voisins en interne, mais le fait de les pré-calculer peut présenter plusieurs avantages, tels qu'un contrôle plus fin des paramètres, la mise en cache pour une utilisation multiple ou des implémentations personnalisées. Ici, nous utilisons la propriété de mise en cache des pipelines pour mettre en cache le graphe des plus proches voisins entre plusieurs ajustements de KNeighborsClassifier.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour pratiquer.

Parfois, vous devrez attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


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{{"Mise en cache des plus proches voisins"}} sklearn/pipeline -.-> lab-49072{{"Mise en cache des plus proches voisins"}} sklearn/model_selection -.-> lab-49072{{"Mise en cache des plus proches voisins"}} sklearn/datasets -.-> lab-49072{{"Mise en cache des plus proches voisins"}} ml/sklearn -.-> lab-49072{{"Mise en cache des plus proches voisins"}} end

Importation des bibliothèques

Dans cette étape, nous allons importer toutes les bibliothèques nécessaires.

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

Chargement des données

Dans cette étape, nous allons charger l'ensemble de données des chiffres (digits dataset) de scikit-learn.

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

Calculer le graphe des plus proches voisins

Dans cette étape, nous allons calculer le graphe des plus proches voisins à l'aide de KNeighborsTransformer.

## Le transformateur calcule le graphe des plus proches voisins en utilisant
## le nombre maximum de voisins nécessaire dans la recherche en grille. Le modèle
## du classifieur filtre le graphe des plus proches voisins selon les
## exigences de son propre paramètre n_neighbors.
graph_model = KNeighborsTransformer(n_neighbors=max(n_neighbors_list), mode="distance")

Définir le modèle du classifieur

Dans cette étape, nous allons définir le modèle KNeighborsClassifier.

classifier_model = KNeighborsClassifier(metric="precomputed")

Mettre en cache le graphe des plus proches voisins

Dans cette étape, nous allons mettre en cache le graphe des plus proches voisins entre plusieurs ajustements de KNeighborsClassifier en utilisant la propriété de mise en cache des pipelines.

## Notez que nous donnons à `memory` un répertoire pour mettre en cache le calcul du graphe
## qui sera utilisé plusieurs fois lors de la réglage des hyperparamètres du
## classifieur.
with TemporaryDirectory(prefix="sklearn_graph_cache_") as tmpdir:
    full_model = Pipeline(
        steps=[("graph", graph_model), ("classifier", classifier_model)], memory=tmpdir
    )

Ajuster les hyperparamètres

Dans cette étape, nous allons ajuster les hyperparamètres du classifieur à l'aide de GridSearchCV.

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

Visualiser les résultats

Dans cette étape, nous allons visualiser les résultats de la recherche en grille.

## Tracez les résultats de la recherche en grille.
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="Précision de classification")
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="Temps d'ajustement (avec mise en cache)")
fig.tight_layout()
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à pré-calculer les k plus proches voisins avant de les utiliser dans KNeighborsClassifier en utilisant la propriété de mise en cache des pipelines. Nous avons également appris à ajuster les hyperparamètres du classifieur à l'aide de GridSearchCV et à visualiser les résultats.