In diesem Artikel werden die gängigsten Hyperparameter-Optimierungsmethoden zur Verbesserung der Ergebnisse des maschinellen Lernens ausführlich vorgestellt.
Übersetzer |. Zhu Xianzhong
Rezensent |. Zusätzliche Daten sind oft hilfreich (außer unter bestimmten Umständen), aber die Generierung hochwertiger Daten kann sehr teuer sein. Durch die Hyperparameteroptimierung sparen wir Zeit und Ressourcen, indem wir vorhandene Daten nutzen, um die beste Modellleistung zu erzielen.
In diesem Artikel werden wir die drei häufigsten Methoden zur Hyperparameteroptimierung konzeptionell vorstellen, nämlich Rastersuche, Zufallssuche und Bayes'sche Optimierung, und sie dann einzeln implementieren.
Ich werde am Anfang des Artikels eine allgemeine Vergleichstabelle als Referenz für den Leser bereitstellen und dann im weiteren Verlauf des Artikels jedes Element in der Vergleichstabelle weiter untersuchen, erklären und implementieren.
Tabelle 1: Vergleich der Hyperparameter-Optimierungsmethoden1. Rastersuche ist wahrscheinlich die einfachste und intuitivste Methode zur Hyperparameteroptimierung, bei der in einem definierten Suchraum gründlich gesucht wird die beste Kombination von Hyperparametern. Der „Suchraum“ ist in diesem Zusammenhang der gesamte Hyperparameter und die Werte solcher Hyperparameter, die bei der Optimierung berücksichtigt werden. Lassen Sie uns die Rastersuche anhand eines Beispiels besser verstehen.
Angenommen, wir haben ein maschinelles Lernmodell mit nur drei Parametern. Jeder Parameter kann den in der Tabelle angegebenen Wert annehmen:
Parameter_1 = [1, 2, 3]
Parameter_2 = [a, b, c ]parameter_3 = [x, y, z]
Wir wissen nicht, welche Kombination dieser Parameter die Optimierungsfunktion unseres Modells optimiert (d. h. die beste Ausgabe für unser maschinelles Lernmodell liefert). Bei der Rastersuche probieren wir einfach jede Kombination dieser Parameter aus, messen die Modellleistung für jeden Parameter und wählen einfach die Kombination aus, die die beste Leistung liefert! In diesem Beispiel kann Parameter 1 3 Werte annehmen (d. h. 1, 2 oder 3), Parameter 2 kann 3 Werte annehmen (d. h. a, b und c) und Parameter 3 kann 3 Werte annehmen (d. h. x, y und z). Mit anderen Worten: Insgesamt gibt es 3*3*3=27 Kombinationen. Die Rastersuche in diesem Beispiel umfasst 27 Runden zur Bewertung der Leistung des maschinellen Lernmodells, um die Kombination mit der besten Leistung zu finden.
Wie Sie sehen, ist diese Methode sehr einfach (ähnlich einer Trial-and-Error-Aufgabe), weist jedoch auch einige Einschränkungen auf. Fassen wir die Vor- und Nachteile dieser Methode zusammen.
Zu den Vorteilen gehören unter anderem:
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 5, 10]}Der obige Suchraum besteht aus 4*5*3*3= 180 Hyperparameter der Gesamtkombination. Wir werden die Rastersuche verwenden, um die Kombination zu finden, die die Zielfunktion wie folgt optimiert:# Bibliotheken importieren
aus sklearn.model_selection import GridSearchCV
aus sklearn.datasets import load_iris
aus sklearn.ensemble import RandomForestClassifier
aus sklearn.model_selection import cross_val_score
Importzeit
# Iris-Datensatz laden
iris = Load_Iris()
, 10, 25, 50, 100],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 5, 10]}
#Define Random Forest Classifier
clf = RandomForestClassifier (random_state=1234)
# Optimierungsobjekt generieren
optimizer = GridSearchCV(clf, search_space, cv=5, Scoring='accuracy')
#Speichern Sie die Startzeit, damit diese zur Berechnung des Gesamtverbrauchs verwendet werden kann Zeit
start_time = time.time()
# Optimierer für die Datenanpassung
optimizer.fit(X, y)
# Speichern Sie die Endzeit, damit sie zur Berechnung der Gesamtzeit verwendet werden kann
end_time = time .time ()
# Drucken Sie den optimalen Hyperparametersatz und die entsprechende Punktzahl
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print("")
print(f"best_score: {optimizer. best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
Die Ausgabe des obigen Codes ist wie folgt:
Hier können wir die Verwendung von sehen Die Netzwerk-Grid-Suche wählt Hyperparameterwerte aus. Darunter beschreibt best_score die Bewertungsergebnisse unter Verwendung des ausgewählten Satzes von Hyperparametern und elapsed_time beschreibt die Zeit, die mein lokaler Laptop benötigt hat, um diese Hyperparameter-Optimierungsstrategie auszuführen. Wenn Sie mit der nächsten Methode fortfahren, behalten Sie zum Vergleich die Bewertungsergebnisse und die verstrichene Zeit im Hinterkopf. Kommen wir nun zur Diskussion der Zufallssuche.
2. ZufallssuchalgorithmusWie der Name schon sagt, ist die Zufallssuche der Prozess der zufälligen Auswahl von Hyperparametern aus einem definierten Suchraum. Im Gegensatz zur Rastersuche wählt die Zufallssuche nur eine zufällige Teilmenge von Hyperparameterwerten für eine vordefinierte Anzahl von Iterationen aus (abhängig von den verfügbaren Ressourcen wie Zeit, Budget, Zielen usw.) und berechnet das maschinelle Lernmodell für die Leistung jedes Hyperparameters Wählen Sie dann die besten Hyperparameterwerte aus. Basierend auf dem oben genannten Ansatz können Sie sich vorstellen, dass die Zufallssuche kostengünstiger ist als eine vollständige Rastersuche, aber dennoch ihre eigenen Vor- und Nachteile hat, wie folgt:Vorteile:Einfach zu verstehen und umzusetzen
aus sklearn.model_selection import RandomizedSearchCV
aus scipy.stats import randint
# Erstellen Sie ein RandomizedSearchCV-Objekt
optimizer = RandomizedSearchCV(clf, param_distributinotallow=search_space,
n_iter=50, cv= 5, Scoring='accuracy',
random_state=1234)
# Speichern Sie die Startzeit, um die Gesamtlaufzeit zu berechnen
start_time = time.time()
# Passen Sie den Optimierer an die Daten an
Optimierer . fit(X, y)
# Speichern Sie die Endzeit, um die Gesamtlaufzeit zu berechnen :" )
print(optimizer.best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1) }" )
Die Ausgabe des obigen Codes ist wie folgt:
Zufällige Suchergebnisse
Diese Ergebnisse sind im Vergleich zu den Ergebnissen der Rastersuche sehr interessant. best_score bleibt gleich, aber elapsed_time verringert sich von 352,0 Sekunden auf 75,5 Sekunden! Wie beeindruckend! Mit anderen Worten, der Zufallssuchalgorithmus hat es geschafft, eine Reihe von Hyperparametern zu finden, die die gleiche Leistung wie die Rastersuche erbrachten, und zwar in etwa 21 % der für die Rastersuche erforderlichen Zeit! Allerdings ist der Wirkungsgrad hier deutlich höher.
Als nächstes fahren wir mit unserer nächsten Methode fort, der sogenannten Bayes’schen Optimierung, die aus jedem Versuch im Optimierungsprozess lernt.
Bayesianische Optimierung ist eine Hyperparameter-Optimierungsmethode, die ein Wahrscheinlichkeitsmodell verwendet, um aus früheren Versuchen zu „lernen“ und die Suche auf die beste Kombination von Hyperparametern im Suchraum zu lenken, wodurch die Zielfunktion des maschinellen Lernens optimiert wird Modell.
Die Bayes'sche Optimierungsmethode lässt sich in 4 Schritte unterteilen, die ich im Folgenden beschreibe. Ich empfehle Ihnen, diese Schritte durchzulesen, um den Prozess besser zu verstehen. Für die Verwendung dieser Methode sind jedoch keine Vorkenntnisse erforderlich.
Wenn Sie mehr Details zur Bayes'schen Optimierung erfahren möchten, können Sie sich den folgenden Beitrag ansehen:
" „Bayesian Optimization Algorithm in Machine Learning“, die Adresse lautet:
https://medium.com/@fmnobar/conceptual-overview-of-bayesian-optimization-for-parameter-tuning-in -machine-learning-a3b1b4b9339f.
Da wir nun verstanden haben, wie die Bayes'sche Optimierung funktioniert, schauen wir uns ihre Vor- und Nachteile an.
Vorteile:
search_spaces=search_space,
n_iter=10,random_state=1234)
# Speichern Sie die Startzeit, um die Gesamtlaufzeit zu berechnen
start_time = time.time()
optimizer.fit(X, y)
# Speichern Sie die Endzeit, um die Gesamtlaufzeit zu berechnen
end_time = time.time()
# Drucken Sie den besten Hyperparametersatz und die entsprechende Punktzahl aus
print(f"selected hyperparameters:")
print(optimizer.best_params_ )
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
Die Ausgabe der obiger Code Wie folgt:
Bayesianische Optimierungsergebnisse
Eine weitere Reihe interessanter Ergebnisse! Der best_score stimmt mit den Ergebnissen überein, die wir mit der Raster- und Zufallssuche erhalten haben, aber das Ergebnis dauerte nur 23,1 Sekunden im Vergleich zu 75,5 Sekunden bei der Zufallssuche und 352,0 Sekunden bei der Rastersuche! Mit anderen Worten: Die Verwendung der Bayes'schen Optimierung nimmt etwa 93 % weniger Zeit in Anspruch als die Rastersuche. Dies ist ein enormer Produktivitätsschub, der bei größeren, komplexeren Modellen und Suchräumen noch bedeutsamer wird.
Beachten Sie, dass die Bayes'sche Optimierung nur 10 Iterationen benötigte, um diese Ergebnisse zu erhalten, da sie aus früheren Iterationen lernen kann (im Gegensatz zur Zufalls- und Rastersuche).
Die folgende Tabelle vergleicht die Ergebnisse der drei bisher besprochenen Methoden. Die Spalte „Methodik“ beschreibt die verwendete Hyperparameter-Optimierungsmethode. Darauf folgen die mit jeder Methode ausgewählten Hyperparameter. „Beste Punktzahl“ ist die mit einer bestimmten Methode ermittelte Punktzahl, und „Verstrichene Zeit“ gibt an, wie lange es gedauert hat, bis die Optimierungsstrategie auf meinem lokalen Laptop ausgeführt wurde. In der letzten Spalte „Gewonnene Effizienz“ wird von der Rastersuche als Basislinie ausgegangen und dann die durch jede der beiden anderen Methoden im Vergleich zur Rastersuche gewonnene Effizienz berechnet (unter Verwendung der verstrichenen Zeit). Da die Zufallssuche beispielsweise 75,5 Sekunden und die Rastersuche 352,0 Sekunden dauert, wird die Effizienz der Zufallssuche im Verhältnis zur Rastersuchbasislinie zu 1–75,5/352,0=78,5 % berechnet.
Tabelle 2 – Vergleichstabelle zur Methodenleistung
Zwei Hauptschlussfolgerungen in der obigen Vergleichstabelle:
In diesem Artikel haben wir besprochen, was Hyperparameteroptimierung ist, und die drei am häufigsten verwendeten Methoden für diese Optimierungsübung vorgestellt. Anschließend stellen wir jede dieser drei Methoden im Detail vor und implementieren sie in einer Klassifizierungsübung. Abschließend vergleichen wir die Ergebnisse der Implementierung der drei Methoden. Wir stellen fest, dass Methoden wie die Bayes'sche Optimierung, die aus früheren Versuchen gelernt wurden, die Effizienz erheblich verbessern können, was ein wichtiger Faktor in großen komplexen Modellen wie tiefen neuronalen Netzen sein kann, bei denen die Effizienz ein entscheidender Faktor sein kann.
Zhu Xianzhong, 51CTO-Community-Redakteur, 51CTO-Expertenblogger, Dozent, Computerlehrer an einer Universität in Weifang und ein Veteran in der freiberuflichen Programmierbranche.
Originaltitel: Hyperparameter Optimization – Intro and Implementation of Grid Search, Random Search and Bayesian Optimization, Autor: Farzad Mahmoodinobar
Das obige ist der detaillierte Inhalt vonVergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!