Hyperparameteroptimierung: Zufällige Suche vs Gitterverfahren

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

Beim maschinellen Lernen sind Hyperparameter Parameter, die nicht aus Daten gelernt werden, sondern vor dem Training festgelegt werden. Die Auswahl geeigneter Hyperparameter ist entscheidend für die Erreichung hoher Genauigkeiten in maschinellen Lernmodellen. Zwei gängige Methoden zur Hyperparameteroptimierung sind der zufällige Suchalgorithmus und das Gitterverfahren. In diesem Lab werden wir diese beiden Methoden zur Optimierung der Hyperparameter eines linearen Support Vector Machines (SVM) mit Stochastic Gradient Descent (SGD)-Training vergleichen.

Tipps für die VM

Nachdem der Start der VM abgeschlossen ist, klicken Sie in der linken oberen 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 der Einschränkungen von 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/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49256{{"Hyperparameteroptimierung: Zufällige Suche vs Gitterverfahren"}} sklearn/model_selection -.-> lab-49256{{"Hyperparameteroptimierung: Zufällige Suche vs Gitterverfahren"}} sklearn/datasets -.-> lab-49256{{"Hyperparameteroptimierung: Zufällige Suche vs Gitterverfahren"}} ml/sklearn -.-> lab-49256{{"Hyperparameteroptimierung: Zufällige Suche vs Gitterverfahren"}} end

Importieren von erforderlichen Bibliotheken und Laden von Daten

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken und dem Laden des Digits-Datensatzes aus scikit-learn.

import numpy as np
from time import time
import scipy.stats as stats
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from sklearn.datasets import load_digits
from sklearn.linear_model import SGDClassifier

## Laden des Digits-Datensatzes
X, y = load_digits(return_X_y=True, n_class=3)

Erstellen eines SVM-Modells

Wir werden ein lineares SVM-Modell mit SGD-Training erstellen.

## Erstellen eines SVM-Modells mit SGD-Training
clf = SGDClassifier(loss="hinge", penalty="elasticnet", fit_intercept=True)

Zufällige Suche zur Hyperparameteroptimierung

Wir werden die zufällige Suche verwenden, um den Hyperparameterspace zu erkunden und die besten Hyperparameter für unser SVM-Modell zu finden.

## Definieren Sie die Parameter und Verteilungen, aus denen zu ziehen
param_dist = {
    "average": [True, False],
    "l1_ratio": stats.uniform(0, 1),
    "alpha": stats.loguniform(1e-2, 1e0),
}

## Führen Sie die zufällige Suche durch
n_iter_search = 15
random_search = RandomizedSearchCV(
    clf, param_distributions=param_dist, n_iter=n_iter_search
)

start = time()
random_search.fit(X, y)
print(
    "RandomizedSearchCV hat %.2f Sekunden für %d Kandidatenparameter-Einstellungen benötigt."
    % ((time() - start), n_iter_search)
)

## Drucken Sie die Ergebnisse
report(random_search.cv_results_)

Gitterverfahren zur Hyperparameteroptimierung

Wir werden das Gitterverfahren verwenden, um den Hyperparameterspace zu erkunden und die besten Hyperparameter für unser SVM-Modell zu finden.

## Definieren Sie die Parameter, über die gesucht werden soll
param_grid = {
    "average": [True, False],
    "l1_ratio": np.linspace(0, 1, num=10),
    "alpha": np.power(10, np.arange(-2, 1, dtype=float)),
}

## Führen Sie das Gitterverfahren durch
grid_search = GridSearchCV(clf, param_grid=param_grid)

start = time()
grid_search.fit(X, y)

print(
    "GridSearchCV hat %.2f Sekunden für %d Kandidatenparameter-Einstellungen benötigt."
    % (time() - start, len(grid_search.cv_results_["params"]))
)

## Drucken Sie die Ergebnisse
report(grid_search.cv_results_)

Zusammenfassung

In diesem Lab haben wir die zufällige Suche und das Gitterverfahren für die Hyperparameteroptimierung eines linearen SVM-Modells mit SGD-Training verglichen. Wir haben festgestellt, dass beide Methoden denselben Hyperparameterspace erkundet haben, aber die zufällige Suche war erheblich schneller. Die besten Hyperparameter, die von jeder Methode gefunden wurden, ähnelten sich in der Leistung, aber die zufällige Suche kann aufgrund von Rauschen möglicherweise leicht schlechtere Leistung haben. Im praktischen Einsatz würden wir nicht so viele Hyperparameter gleichzeitig durchsuchen, sondern nur die wichtigsten.