Rastersuche mit MLflow

Rastersuche Mit Mlflow



Hyperparameter in Modellen des maschinellen Lernens werden mithilfe des Rastersuchansatzes optimiert. Ein Benutzer kann schnell mehrere Hyperparametereinstellungen vergleichen und herausfinden, welche die beste Leistung erbringen, da MLflow die Ergebnisse von Rastersuchexperimenten verfolgt. In MLflow kann das Rastersuchexperiment schnell mit anderen Teammitgliedern geteilt werden. Mit MLflow kann das effektivste Modell aus einem Rastersuchexperiment bereitgestellt werden.

Vorteile der Rastersuche

  • Automatisiertes Hyperparameter-Tuning: Die Rastersuche automatisiert die Optimierung von Hyperparametern und ermöglicht so eine systematische Untersuchung ohne manuelles Ausprobieren.
  • Reproduzierbarkeit: Die Rastersuche stellt die Testvalidität sicher, indem sie reproduzierbare Ergebnisse reproduzierbar erhält, was die Kommunikation und Zuverlässigkeit verbessert.
  • Erschöpfende Suche: GS findet effizient optimale Hyperparameter für ein Modell durch umfassende Suche nach Kombinationen.
  • Robustheit: Die Rastersuche ist eine robuste Technik, die resistent gegen Datenrauschen ist und so eine Überanpassung reduziert.
  • Einfach zu benutzen: Die Rastersuche ist einfach zu verwenden und zu verstehen, was sie zu einer praktikablen Methode für die Optimierung von Hyperparametern macht.
  • Modellvergleiche: Die Rastersuche vereinfacht den Modellvergleich und die Auswahl der Bewertungsmetriken.

Nachteile der Rastersuche

  • Rechenaufwand: Die Rastersuche ist für die Optimierung einer großen Anzahl von Hyperparametern rechenintensiv.
  • Zeitaufwendig: Komplexe Hyperparameteranpassungen sind zeitaufwändig.
  • Nicht immer notwendig: Es ist jetzt immer erforderlich; Die Zufallssuche ist die beste Alternative dazu.

Beispiel: Finden der besten Modelleinstellungen für das Hochschulzulassungssystem

Schauen wir uns ein Beispiel für eine Rastersuche zur Optimierung von Hyperparametern im Rahmen eines Online-Zulassungssystems für Universitäten an. In diesem Beispiel verwenden wir scikit-learn und einen einfachen GBC-Klassifikator (Gradient Boosting Classifier), um die Wahrscheinlichkeit eines Studenten, an einer Universität angenommen zu werden, basierend auf Faktoren wie GPA-Punkten, SAT-Ergebnissen, ACT-Ergebnissen und außerschulischen Aktivitäten vorherzusagen. Für die Rastersuche stehen anstelle von GBC mehrere Optionen zur Verfügung, darunter Logistic Regression (LR), SVM (Support Vector Machine) usw.

Generieren Sie Zufallsdaten für das Online-Zulassungssystem mithilfe von MLflow für die Rastersuche

Mithilfe von Pythons Pandas und Zufallspaketen kann ein fiktiver Datensatz für das Zulassungssystem erstellt werden. Mit Zufallswerten für die Spalten APP_NO, GPA, SAT-Score, ACT-Score, außerschulische Aktivitäten und Zulassungsstatus generiert dieser Code einen synthetischen Zulassungsdatensatz. Die Variable num_students steuert, wie viele Zeilen im Datensatz vorhanden sind.







Der Zulassungsstatus wird basierend auf einer Akzeptanzrate von 70 % zufällig festgelegt, und das Zufallsmodul wird verwendet, um Zufallswerte für mehrere Spalten zu erzeugen. Zu Demonstrationszwecken erstellt der folgende Codeteil einen gefälschten Zulassungsdatensatz mit Zufallswerten und wird in der Datei std_admission_dataset.csv gespeichert:



Code-Auszug:



# Importieren Sie die Bibliotheken Panda und Random
Pandas als panda_obj importieren
importiere random als random_obj

# Legen Sie die Anzahl der Datensätze fest, die der Schülerdatensatz generieren soll
Students_records = 1000

# Erstellen Sie Listen zum Speichern von Daten
std_application_numbers = [ 'APP-' + str(random_obj.randint( 1000 , 9999 )) für _ im Bereich(students_records)]
std_gpa = [round(random_obj.uniform( 2.5 , 4,0 ), 2 ) für _ im Bereich(students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) für _ im Bereich(students_records)]
std_act_scores = [random_obj.randint( zwanzig , 36 ) für _ im Bereich(students_records)]
std_extra_curriculars = [random_obj.choice([ 'Ja' , 'NEIN' ]) für _ im Bereich(students_records)]

# Berechnen Sie den Zulassungsstatus basierend auf der zufälligen Akzeptanzrate
std_admission_status = [ 1 if random_obj.random() < 0,7 anders 0 für _ im Bereich(students_records)]

# Erstellen Sie ein Wörterbuch zur Speicherung der Schülerdaten
std_data = {

'APPLICATION_NO' : std_application_numbers,

„GPA“ : std_gpa,

'SAT_Score' : std_sat_scores,

'ACT_Score' : std_act_scores,

'Außerschulische Aktivitäten' : std_extra_curriculars,

'Admission_Status' : std_admission_status

}

# Erstellen Sie einen DataFrame DataFrame_Student aus dem Wörterbuch
DataFrame_Student = panda_obj.DataFrame(std_data)

# Speichern Sie den DataFrame DataFrame_Student in einer CSV-Datei mit dem Namen std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , index=False)
drucken( „Studentendaten erfolgreich in CSV-Datei exportieren!“ )

Codeausführung:

Verwenden Sie den Python-Befehl, um den Code zu kompilieren, und verwenden Sie dann den Befehl pip, um ein bestimmtes Modul zu installieren, wenn ein Modulfehler auftritt. Verwenden Sie den Befehl pip3 install, um die angegebene Bibliothek zu installieren, wenn Python Version 3.X oder höher ist.





Erfolgreiche Ausführung:



Beispieldaten-Screenshot:

Schritt 1: Importieren Sie die Bibliotheken

  • Die MLflow-Bibliothek zur Verfolgung von Machine-Learning-Experimenten
  • Die Pandas-Bibliothek zur Abwicklung der Datenverarbeitung und -analyse sowie das Paket mlflow.sklearn zur Integration der Scikit-Learn-Modelle
  • Die vierte Zeile importiert die „Warnungen“-Bibliothek, um die Fehler zu unterdrücken
  • Die ParameterGrid-Klasse für die Rastersuche im Modul sklearn.model_selection
  • GridSearchCV und GradientBoostingClassifier von sklearn.model_selection bzw. ensemble für Rastersuch- und Gradient-Boosting-Klassifikatormodelle
  • Die Funktionen „precision_score“ und „classification_report“ aus dem Modul „sklearn.metrics“ berechnen die Modellgenauigkeit und generieren Klassifizierungsberichte
  • Der Code importiert das Betriebssystemmodul und setzt die Umgebungsvariable GIT_PYTHON_REFRESH auf quiet.

Code-Auszug:

# Schritt-I Importieren Sie die erforderlichen Bibliotheken
mlflow importieren
Importieren Sie mlflow.sklearn
Warnungen als Warnung importieren
Pandas als panda_obj importieren
aus sklearn.model_selection import train_test_split als tts, ParameterGrid als pg, GridSearchCV als gscv
Importieren Sie uns
aus sklearn.ensemble GradientBoostingClassifier als GBC importieren
aus sklearn.metrics Import Accuracy_score als ACS, Classification_Report als CR
os.environ[ „GIT_PYTHON_REFRESH“ ] = 'ruhig'

Schritt 2: Legen Sie den Tracking-URI fest

Der Tracking-URI des MLflow-Servers wird mit der Funktion mlflow.set_tracking_uri() festgelegt, wodurch ein lokaler Computer auf Port 5000 für Experimente und Modelle sichergestellt wird.

mlflow.set_tracking_uri( „http://localhost:5000“ )

Schritt 3: Laden Sie den Zulassungsdatensatz und bereiten Sie ihn vor

Importieren Sie die Pandas-Bibliothek als panda_obj zur Datenbearbeitung und -analyse. Zum Laden des Zulassungsdatensatzes wird die Funktion read_csv() angewendet. Der Pfad zum Datensatz ist das einzige Argument, das für die Funktion read_csv() erforderlich ist. Der Pfad zum Datensatz lautet in diesem Fall std_admission_dataset.csv. Durch den Einsatz der Funktion read_csv() wird der Datensatz in einen Pandas DataFrame geladen.

Die Spalte „Admission_Status“ aus dem Datenrahmen „std_admissions_data“ wird zunächst durch den Code entfernt. Da diese Spalte die Zielvariable enthält, ist eine Vorverarbeitung nicht erforderlich.

Anschließend erstellt der Code zwei neue Variablen: „F“ und „t“. Die Merkmale sind in der Variablen „F“ enthalten, während die Zielvariable in der Variablen „t“ enthalten ist.

Die Daten werden dann in Test- und Trainingssätze verteilt. Dies wird mit der Funktion tts() aus dem Paket sklearn.model_selection erreicht. Die Features, die Zielvariable, die Testgröße und der Zufallszustand sind die vier Argumente, die für die Funktion tts() erforderlich sind. Der Parameter test_size legt den Anteil der Daten fest, der für Testzwecke verwendet wird. Da die Testgröße in diesem Fall auf 0,2 festgelegt ist, werden 20 % der Daten für den Test verwendet.

Die Option random_state gibt den Startwert des Zufallszahlengenerators an. Dadurch wird sichergestellt, dass die Daten nach dem Zufallsprinzip getrennt werden. Die Trainings- und Testsätze werden jetzt in den Variablen F_training, F_testing, t_training und t_testing gespeichert. Mit diesen Sets können die Machine-Learning-Modelle evaluiert und trainiert werden.

Code-Auszug:

# Schritt 3: Laden Sie den Zulassungsdatensatz
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Verarbeiten Sie die Daten vor und teilen Sie sie in Features (F) und Ziel (t) auf.
F = std_admissions_data.drop([ 'Admission_Status' ], Achse= 1 )
t = std_admissions_data[ 'Admission_Status' ]

# Konvertieren Sie kategoriale Variablen mithilfe der One-Hot-Codierung in numerische
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , random_state= 42 )

Schritt 4: Legen Sie den MLflow-Experimentnamen fest

adm_experiment_name = „Universitätszulassung_Experiment“
mlflow.set_experiment(adm_experiment_name)

Schritt 5: Definieren Sie den Gradient Boosting Classifier

Das Gradient Boosting Classifier-Modell wird jetzt in der Variablen gbc_obj gespeichert. Der Zulassungsdatensatz kann zum Testen und Trainieren dieses Modells verwendet werden. Der Wert des Arguments „random_state“ ist 42. Dies garantiert, dass das Modell mit genau demselben Zufallszahlengenerator-Seed trainiert wird, was die Ergebnisse wiederholbar macht.

gbc_obj = GBC(random_state= 42 )

Schritt 6: Definieren Sie das Hyperparameter-Raster

Der Code erstellt zunächst das param_grid-Wörterbuch. Die Hyperparameter, die über die Rastersuche angepasst werden, sind in diesem Wörterbuch enthalten. Drei Schlüssel bilden das param_grid-Wörterbuch: n_estimators, learning_rate und max_ Depth. Dies sind die Hyperparameter des Gradienten-verstärkenden Klassifikatormodells. Die Anzahl der Bäume im Modell wird durch den Hyperparameter n_estimators angegeben. Die Lernrate des Modells wird über den Hyperparameter learning_rate angegeben. Der Hyperparameter max_ Depth definiert die höchstmögliche Tiefe der Modellbäume.

Code-Auszug:

param_grid = {

'n_schätzer' :[ 100 , 150 , 200 ],

'Lernrate' :[ 0,01 , 0,1 , 0,2 ],

'maximale Tiefe' :[ 4 , 5 , 6 ]

}

Schritt 7: Führen Sie die Rastersuche mit MLflow-Tracking durch

Der Code durchläuft dann das Wörterbuch param_grid. Für jeden Satz von Hyperparametern im Wörterbuch führt der Code Folgendes aus:

  • Startet einen neuen MLflow-Lauf
  • Konvertiert die Hyperparameter in eine Liste, wenn sie nicht bereits eine Liste sind
  • Protokolliert die Hyperparameter in MLflow
  • Trainiert ein Rastersuchmodell mit den angegebenen Hyperparametern
  • Ruft das beste Modell aus der Rastersuche ab
  • Trifft Vorhersagen anhand der Testdaten, indem das beste Modell verwendet wird
  • Berechnet die Genauigkeit des Modells
  • Druckt den Hyperparameter-, Genauigkeits- und Klassifizierungsbericht
  • Protokolliert die Genauigkeit und das Modell in MLflow

Code-Auszug:

mit warn.catch_warnings():
warn.filterwarnings( 'ignorieren' , Kategorie=UserWarning, Modul= '.*distutil.*' )
für Parameter in pg(param_grid):
mit mlflow.start_run(run_name= „Admissions_Status Run“ ):
# Einzelwerte in Listen umwandeln
params = {key: [value] if not isinstance(value, list) else value for key, value in params.items()}
mlflow.log_params(params)
grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
grid_search.fit(F_training, t_training)
std_best_model = grid_search.best_estimator_
model_predictions = std_best_model.predict(F_testing)
model_accuracy_score = acs(t_testing, model_predictions)
drucken( „Hyperparameter:“ , Parameter)
drucken( 'Genauigkeit:' , model_accuracy_score)
# Ignorieren Sie explizit die UndefinedMetricWarning
mit warn.catch_warnings():
warn.filterwarnings( 'ignorieren' , Kategorie=Warnung)
drucken( „Klassifizierungsbericht:“ )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'Genauigkeit' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, „gb_classifier_model“ )

Schritt 8: Führen Sie das Programm mit Python aus

Hier ist die Ausgabe auf dem MLflow-Server:

Abschluss

Das Rastersuchtool von MLflow automatisiert die Optimierung, Verfolgung der Ergebnisse und Änderung der Hyperparameter in Modellen für maschinelles Lernen. Es hilft bei der Bestimmung der idealen Hyperparameter und gewährleistet zuverlässige Ergebnisse, kann jedoch bei umfangreichen Hyperparameterexperimenten rechenintensiv sein.