Skip to content

Randomized Search Verbose: Optimierung der Hyperparameterabstimmung in Scikit-learn

Updated on

Die Hyperparameterabstimmung ist ein entscheidender Aspekt des maschinellen Lernens, der die Leistung eines Modells erheblich beeinflussen kann. Der Prozess umfasst die Anpassung der Parameter eines Modells, um seine Vorhersagen zu optimieren. Eine beliebte Methode zur Hyperparameterabstimmung ist die randomisierte Suche, insbesondere in der Bibliothek scikit-learn. In diesem Artikel werden wir das Konzept der randomisierten Suche, wie man sie in scikit-learn verbose macht, und den Unterschied zwischen randomisierter Suche und Gittersuche untersuchen. Wir werden auch einige bewährte Verfahren für die Hyperparameterabstimmung mit der randomisierten Suche und die Interpretation ihrer Ausgabe erforschen.

Die randomisierte Suche in scikit-learn ist ein leistungsstarkes Werkzeug zur Hyperparameterabstimmung. Im Gegensatz zur Gittersuche, die alle möglichen Kombinationen von Parametern erschöpfend ausprobiert, wählt die randomisierte Suche zufällige Kombinationen von Parametern aus, was effizienter sein kann. Diese Methode kann besonders nützlich sein, wenn man mit einer großen Anzahl von Parametern arbeitet, da sie es ermöglicht, die Anzahl der ausprobierten Parameter-Einstellungen zu kontrollieren.

Was ist die randomisierte Suche in Scikit-learn?

Die randomisierte Suche in scikit-learn wird durch die Klasse RandomizedSearchCV implementiert. Diese Klasse führt eine Suche über angegebene Parameterwerte für einen Estimator durch, wählt jedoch nicht wie bei der Gittersuche jede einzelne Kombination von Parametern aus, sondern wählt eine bestimmte Anzahl von Kandidaten aus einem Parameterbereich mit einer angegebenen Verteilung aus. Dieser Ansatz kann effizienter sein als eine Gittersuche für die Hyperparameteroptimierung, insbesondere wenn man es mit einer großen Anzahl von Parametern zu tun hat oder wenn die Zeit, die für das Training eines Modells benötigt wird, lang ist.

Hier ist ein einfaches Beispiel, wie man RandomizedSearchCV verwendet:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint
 
## initialisiere den Klassifizierer
clf = RandomForestClassifier(n_jobs=-1)
 
## spezifiziere Parameter und Verteilungen, aus denen gezogen werden soll
param_dist = {"max_depth": [3, None],
              "max_features": sp_randint(1, 11),
              "min_samples_split": sp_randint(2, 11),
              "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}
 
## führe die randomisierte Suche aus
n_iter_search = 20
random_search = RandomizedSearchCV(clf, param_distributions=param_dist,
                                   n_iter=n_iter_search, cv=5)
 
random_search.fit(X, y)

In diesem Beispiel wird RandomizedSearchCV 20 Kandidaten aus dem Parameterbereich auswählen und jeweils eine 5-fache Kreuzvalidierung durchführen.

Randomisierte Suche verbose machen

Die Verbose-Einstellung der randomisierten Suche in scikit-learn kann mit dem Parameter verbose gesteuert werden. Je höher der Wert, desto mehr Nachrichten werden während des Anpassungsprozesses gedruckt. Zum Beispiel wird durch das Setzen von verbose=10 die maximale Anzahl von Nachrichten gedruckt, die detaillierte Einblicke in den Anpassungsprozess geben. Dies kann besonders nützlich sein, wenn man große Jobs ausführt, da es ermöglicht, den Fortschritt der Operation zu überwachen.

So wird die randomisierte Suche verbose gemacht:

random_search = RandomizedSearchCV(clf, param_distributions=param_dist,
                                   n_iter=n_iter_search, cv=5, verbose=10)

Mit verbose=10 druckt scikit-learn Nachrichten für jeden gestarteten und abgeschlossenen Job aus.

Randomisierte Suche vs Gittersuche in Scikit-learn

Sowohl die randomisierte Suche als auch die Gittersuche sind Methoden zur Hyperparameteroptimierung in scikit-learn. Obwohl sie denselben Parameterbereich erkunden, unterscheiden sie sich in der Art und Weise, wie sie arbeiten.

Die Gittersuche, implementiert in scikit-learn als GridSearchCV, probiert erschöpfend alle möglichen Kombinationen von Parametern aus. Das bedeutet, dass wenn Sie eine Liste von 10 Werten für einen Parameter und 10 für einen anderen haben, die Gittersuche alle 100 Kombinationen ausprobieren wird. Dies kann rechenaufwändig und zeitaufwändig sein, insbesondere wenn man es mit einer großen Anzahl von Parametern zu tun hat oder wenn das Modell lange zum Trainieren benötigt. Auf der anderen Seite wählt die Randomized Search, implementiert als RandomizedSearchCV, eine bestimmte Anzahl von Kandidaten aus dem Parameterraum zufällig aus. Dies ermöglicht es Ihnen, die Anzahl der ausprobierten Parametereinstellungen zu kontrollieren, was viel effizienter sein kann als das Ausprobieren aller Kombinationen, insbesondere wenn es um eine große Anzahl von Parametern geht.

Die Ergebnisse bei den Parametereinstellungen zwischen der Randomized Search und der Grid Search sind ziemlich ähnlich, aber die Laufzeit der Randomized Search ist drastisch kürzer. Dies macht die Randomized Search zur bevorzugten Wahl, wenn es um eine große Anzahl von Parametern und begrenzte Rechenressourcen geht.

Hier ist ein Beispiel, wie man die GridSearchCV zur Vergleich verwenden kann:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
 
## Initialisiere den Klassifizierer
clf = RandomForestClassifier(n_jobs=-1)
 
## Definiere Parameter und Verteilungen, aus denen ausprobiert werden soll
param_grid = {"max_depth": [3, None],
              "max_features": [1, 3, 10],
              "min_samples_split": [2, 3, 10],
              "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}
 
## Führe die Grid Search durch
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=5)
 
grid_search.fit(X, y)

In diesem Beispiel versucht GridSearchCV jede Parameterkombination und führt auf jeder eine 5-fache Kreuzvalidierung durch.

Obwohl beide Methoden ihre Vorteile haben, hängt die Wahl zwischen Randomized Search und Grid Search von Ihren spezifischen Bedürfnissen und Ressourcen ab. Wenn Sie über ausreichend Rechenressourcen und Zeit verfügen und sicherstellen möchten, dass Sie die optimalen Parameter finden, könnte die Grid Search die bessere Wahl sein. Wenn Sie jedoch Zeit und Ressourcen sparen möchten und es Ihnen nichts ausmacht, einen Satz von Parametern zu finden, der gut genug ist, ist die Randomized Search möglicherweise die bessere Wahl.

Best Practices für die Hyperparameter-Optimierung mit der Randomized Search

Bei der Verwendung der Randomized Search für die Hyperparameter-Optimierung gibt es einige bewährte Methoden, mit denen Sie das Beste aus dieser Methode herausholen können.

Zunächst ist es wichtig, ein gutes Verständnis für die Hyperparameter des Modells, mit dem Sie arbeiten, und den Wertebereich, den sie annehmen können, zu haben. Dadurch können Sie einen sinnvollen Parameterraum für die Randomized Search definieren.

Zweitens sollten Sie in Betracht ziehen, anstelle eines einfachen Trainings-Test-Splits eine stratifizierte k-fache Kreuzvalidierung zu verwenden. Dadurch wird sichergestellt, dass jede Falte der Daten den gleichen Anteil an Proben aus jeder Klasse enthält, was zu zuverlässigeren Ergebnissen führen kann, insbesondere bei unbalancierten Datensätzen.

Drittens sollten Sie daran denken, einen Zufallszustand für die Randomized Search festzulegen, um sicherzustellen, dass Ihre Ergebnisse reproduzierbar sind. Dies kann besonders nützlich sein, wenn Sie die Leistung verschiedener Modelle oder verschiedener Satze von Hyperparametern vergleichen möchten.

Schließlich sollten Sie nicht vergessen, den verbose-Parameter zu verwenden, um den Fortschritt der Suche zu überwachen. Dies kann besonders hilfreich sein, wenn Sie große Jobs ausführen, da Sie den Ablauf verfolgen und mögliche Probleme diagnostizieren können.

Interpretation der Ausgabe der Randomized Search in Scikit-learn

Die Ausgabe einer Randomized Search in scikit-learn ist ein angepasstes RandomizedSearchCV-Objekt. Dieses Objekt enthält Informationen über die besten während der Suche gefundenen Parameter, die Ergebnisse der Kreuzvalidierung für jede Parameterkombination und das mit den besten Parametern angepasste Modell.

Sie können auf die besten Parameter über das Attribut best_params_ zugreifen, wie folgt:

best_params = random_search.best_params_

Dies liefert ein Wörterbuch mit den Parameternamen als Schlüssel und den besten Werten als Werten.

Die Ergebnisse der Kreuzvalidierung können über das Attribut cv_results_ abgerufen werden. Dies liefert ein Wörterbuch mit verschiedenen Schlüsseln, die mit dem Kreuzvalidierungsprozess zusammenhängen, wie zum Beispiel dem Mittelwert und der Standardabweichung der Testergebnisse für jede Parameterkombination.

Das mit den besten Parametern angepasste Modell kann über das Attribut best_estimator_ abgerufen werden. Sie können dieses Modell verwenden, um Vorhersagen für neue Daten zu treffen.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Randomized Search und Grid Search in Scikit-learn?

Randomized Search und Grid Search sind beide Methoden zur Hyperparameter-Optimierung in Scikit-learn. Der Hauptunterschied besteht darin, dass die Grid Search alle möglichen Kombinationen von Parametern systematisch ausprobiert, während die Randomized Search zufällig eine bestimmte Anzahl von Kandidaten aus dem Parameterraum auswählt. Dadurch ist die Randomized Search effizienter als die Grid Search, wenn es um eine große Anzahl von Parametern oder um ein Modell geht, das lange Trainingszeiten hat.

Wie kann ich die Randomized Search in Scikit-learn detailliert anzeigen lassen?

Die Detailgenauigkeit der Randomized Search in scikit-learn kann mit dem verbose-Parameter gesteuert werden. Je höher der Wert, desto mehr Meldungen werden während des Anpassungsprozesses gedruckt. Wenn Sie beispielsweise verbose=10 setzen, werden die maximalen Meldungen gedruckt, die detaillierte Einblicke in den Anpassungsprozess geben.

Was sind einige bewährte Methoden zur Hyperparameter-Optimierung mit der Randomized Search?

Einige bewährte Methoden zur Hyperparameter-Optimierung mit der Randomized Search umfassen ein gutes Verständnis der Hyperparameter und ihres Wertebereichs, die Verwendung einer stratifizierten k-fachen Kreuzvalidierung, das Festlegen eines Zufallszustands zur Reproduzierbarkeit und die Verwendung des verbose-Parameters zur Überwachung des Fortschritts der Suche.