Das Caching von Nachbarn

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird gezeigt, wie man die k nächsten Nachbarn im Voraus berechnet, bevor man sie in KNeighborsClassifier verwendet. KNeighborsClassifier kann die nächsten Nachbarn intern berechnen, aber das Vorher-Berechnen kann mehrere Vorteile haben, wie eine feinere Parametersteuerung, das Cachen für mehrfaches Verwenden oder benutzerdefinierte Implementierungen. Hier verwenden wir die Caching-Eigenschaft von Pipelines, um den Nachbargraphen zwischen mehreren Anpassungen von KNeighborsClassifier zu cachen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


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{{"Das Caching von Nachbarn"}} sklearn/pipeline -.-> lab-49072{{"Das Caching von Nachbarn"}} sklearn/model_selection -.-> lab-49072{{"Das Caching von Nachbarn"}} sklearn/datasets -.-> lab-49072{{"Das Caching von Nachbarn"}} ml/sklearn -.-> lab-49072{{"Das Caching von Nachbarn"}} end

Bibliotheken importieren

In diesem Schritt werden wir alle erforderlichen Bibliotheken importieren.

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

Daten laden

In diesem Schritt werden wir den Ziffern-Datensatz aus scikit-learn laden.

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

Berechne den Nachbargraphen

In diesem Schritt werden wir den Nachbargraphen mit KNeighborsTransformer berechnen.

## Der Transformator berechnet den Nachbargraphen mit der maximalen Anzahl
## von Nachbarn, die im Grid-Search erforderlich ist. Das Klassifizierungsmodell
## filtert den Nachbargraphen je nach Bedarf gemäß seinem eigenen n_neighbors-Parameter.
graph_model = KNeighborsTransformer(n_neighbors=max(n_neighbors_list), mode="distance")

Definiere das Klassifizierungsmodell

In diesem Schritt werden wir das KNeighborsClassifier-Modell definieren.

classifier_model = KNeighborsClassifier(metric="precomputed")

Caching des Nachbargraphen

In diesem Schritt werden wir den Nachbargraphen zwischen mehreren Anpassungen von KNeighborsClassifier mithilfe der Caching-Eigenschaft von Pipelines cachen.

## Beachten Sie, dass wir `memory` ein Verzeichnis geben, um die Graphberechnung zu cachen,
## die mehrmals verwendet wird, wenn die Hyperparameter des Klassifiziers optimiert werden.
with TemporaryDirectory(prefix="sklearn_graph_cache_") as tmpdir:
    full_model = Pipeline(
        steps=[("graph", graph_model), ("classifier", classifier_model)], memory=tmpdir
    )

Hyperparameter optimieren

In diesem Schritt werden wir die Hyperparameter des Klassifiziers mit GridSearchCV optimieren.

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

Ergebnisse visualisieren

In diesem Schritt werden wir die Ergebnisse der Grid-Suche visualisieren.

## Zeichnen Sie die Ergebnisse der Grid-Suche.
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="Klassifikationsgenauigkeit")
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="Anpassungszeit (mit Caching)")
fig.tight_layout()
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie wir die k nächsten Nachbarn vor der Verwendung in KNeighborsClassifier mithilfe der Caching-Eigenschaft von Pipelines vorberechnen können. Wir haben auch gelernt, wie wir die Hyperparameter des Klassifiziers mit GridSearchCV optimieren und die Ergebnisse visualisieren können.