Bevor ein Machine-Learning-Modell in Produktion gehen kann, muss zunächst das am besten geeignete Modell bestimmt werden, die optimalen Parameter ausgewählt werden usw. Dies sind redundante Vorgänge, die auf verschiedene Projekte angewendet werden. Wäre es nicht einfacher, diese Prozesse zu automatisieren? Hier kommt TPOT ins Spiel.
Was ist TPOT ?
TPOT ist eine Open-Source-Bibliothek, die für die Automatisierung von Machine Learning verwendet wird. Basierend auf der Scikit-learn-Bibliothek, die genetische Programmierung verwendet, untersucht TPOT tausende verschiedener Pipelines und findet diejenige, die für ein bestimmtes Dataset am besten geeignet ist.
Angenommen, du hast einen Datensatz, für den die Anwendung eines Machine-Learning-Modells relevant ist. Deine ersten Schritte werden sich um die Erforschung der Daten und ihre Vorbereitung drehen.
Der nächste Schritt besteht darin, das beste Machine-Learning-Modell auszuwählen, indem du deine Daten an verschiedene Modelle anpasst und nach dem besten Satz von Hyperparametern suchst.
Technisch gesehen wirst du die gleichen Bibliotheken in verschiedenen Projekten verwenden. Das wird dich viel Zeit kosten und nicht unbedingt deine Fähigkeiten verbessern, da du immer wieder denselben Code schreibst.
Warum sollte man TPOT verwenden ?
Automatische Machine-Learning-Tools (AutoML) sind die Antwort auf eine einfache Frage: Wie kann man die Erstellung und das Training von Modellen weniger zeitaufwendig gestalten?
AutoML ermöglicht es, wie der Name schon sagt, einen Großteil des Prozesses der Modellerstellung zu automatisieren, ohne dabei an Qualität einzubüßen, sodass sich der Data Scientist auf die Analyse konzentrieren kann.
Seine Pipeline besteht aus mehreren Prozessen, die es ermöglichen werden, ein leistungsfähiges Machine-Learning-Modell zu erstellen (Feature Engineering, Modellgenerierung, Optimierung der Hyperparameter).
Zur Erinnerung: Bei Machine Learning kodifiziert und automatisiert eine Pipeline den Workflow, der es ermöglicht, dass Daten in ein Modell umgewandelt und korreliert werden, das dann analysiert werden kann. Das Laden der Daten in das Modell ist dann vollständig automatisiert.
Eine Pipeline kann auch verwendet werden, um den Workflow unseres Modells in unabhängige, wiederverwendbare Teile zu unterteilen, wodurch die Erstellung vereinfacht und Doppelarbeit vermieden wird.
Eine gute Pipeline wird die Erstellung und Produktion von Machine-Learning-Modellen effizienter und skalierbarer (skalierbar) machen.
Darüber hinaus ist TPOT sehr flexibel, da du es mit PyTorch an Modelle für neuronale Netze anpassen kannst. TPOT unterstützt insbesondere die Verwendung von Dask, um parallele Trainings zu realisieren.
Wie funktioniert TPOT ?
TPOT, oder Tree-based Pipeline Optimization, verwendet eine auf binären Entscheidungsbäumen basierende Struktur, um ein Pipeline-Modell darzustellen.
Dies beinhaltet die Vorbereitung von Daten, die Modellierung von Algorithmen, die Einstellung von Hyperparametern und die Auswahl des Modells.
Nachfolgend ein Beispiel für eine Pipeline, das die von TPOT automatisierten Elemente zeigt:
Durch die Kombination von stochastischen Suchalgorithmen wie der genetischen Programmierung und einer flexiblen Darstellung von Trees wird TPOT automatisch die Funktionen, das Machine-Learning-Modell und die Hyperparameter entwerfen und optimieren. Das Ziel ist es, die Wirksamkeit der überwachten Klassifizierung in unserem Datensatz zu maximieren.
Es ist wichtig zu beachten, dass du TPOT eine Zeit lang arbeiten lassen musst, um die optimierteste Pipeline zu finden. Du kannst sie natürlich auch ein paar Minuten laufen lassen, aber das wird nicht ausreichen, um das beste Modell für deinen Datensatz zu finden.
Abhängig von der Größe deines Datenbestands kann es mehrere Stunden oder sogar Tage dauern, bis TPOT läuft. Es wird empfohlen, mehrere Instanzen gleichzeitig für mehrere Stunden laufen zu lassen, um eine gründliche und effiziente Suche durchzuführen.
Da der Optimierungsalgorithmus von TPOT stochastischer Natur ist, was eine partielle Randomisierung bedeutet, kann es vorkommen, dass bei zwei Läufen unterschiedliche Pipelines für denselben Datensatz empfohlen werden. Wenn dies der Fall ist, werden die Pipelines entweder wegen mangelnder Ausführungszeit nicht übereinstimmen, oder sie werden sehr ähnliche Leistungswerte haben.
💡Auch interessant:
Gradient Boosting Algorithmen |
Dijkstra Algorithmus |
t-sne-Algorithmus |
CAH Algorithmus ML Clustering |
3 ML Algorithmen die du kennen solltest |
Die beste Pipeline finden mit TPOT
Nachdem wir nun verstanden haben, was TPOT ist und warum es nützlich ist, werden wir uns ansehen, wie man es einrichtet und benutzt.
💡Zur Erinnerung: TPOT basiert auf scikit-learn, was den Code vertraut macht, wenn du diese Bibliothek schon einmal benutzt hast.
- Beginne mit dem Importieren der TPOT-Module und anderer Module, die du brauchst, um dein Modell zu definieren: ‚pip install tpot‘.
Während des Schrittes der Datenumwandlung musst du die Zielvariable unbedingt umbenennen und ihr den Namen ‚class‘ geben. - Da TPOT nur Daten im numerischen Format berücksichtigt, ist es notwendig, die notwendigen Transformationen auf die erklärenden Variablen anzuwenden.
- Nachdem du deinen Datensatz in einen Trainings- und einen Testsatz aufgeteilt hast, kannst du deinen TPOT-Klassifikator und seine Parameter definieren.
- Um TPOT auf deinen Datensatz anzuwenden, musst du nur die Methode .fit() verwenden.
Sobald die Berechnung abgeschlossen ist, siehst du als Output die beste Pipeline für deinen Datensatz. - Du kannst dann die Methode .score() verwenden, um die Leistung des Modells zu messen, das TPOT ausgewählt hat.
Im Folgenden findest du ein Beispiel für die Erstellung einer Pipeline mithilfe von TPOT :
# Für die Klassifizierung
from tpot import TPOTClassifier.
# Für die Regression
from tpot import TPOTRegressor
from sklearn.model_selection import train_test_split
# Stellt den TPOTClassifier ein.
tpot_classification = TPOTClassifier(verbosity=2, max_time_mins=2, max_eval_time_mins=0.04, population_size=40).
# Einrichten des TPOTRegressors.
tpot_regression = TPOTRegressor(generations=5, population_size=50, scoring=’neg_mean_absolute_error‘, cv=cv, verbosity=2, random_state=1, n_jobs=-1)
# Anwendung von TPOT auf unseren Zugdatensatz.
tpot_classification.fit(X_train, y_train)
tpot_regression.fit(X_train, y_train)
# Berechnet die Rate der guten Vorhersagen.
tpot.score(X_test,y_test)
# Extrahiere den von TPOT erzeugten Code, um die erstellte Pipeline zu verändern.
tpot.export(‚tpot_titanic_pipeline.py‘)
Fazit
TPOT ist ein sehr nützliches Werkzeug, um ein erstes optimiertes Modell zu finden. Die resultierende Pipeline muss sicherlich noch einmal überarbeitet werden, bevor sie in Produktion gehen kann. Um erste Ergebnisse zu erzielen, ist dieses Tool jedoch mehr als ausreichend und wird dir viel Zeit sparen.