Tag 30 ist erreicht! Die vergangenen Wochen waren eine spannende Reise durch die Welt des maschinellen Lernens mit scikit-learn. Die heutige Aufgabe ist es, möglichst viel von dem gelernten in einem eigenen Projekt zu bündeln. Für das Projekt greife ich auf einen alten Datensatz zurück. Dabei handelt es sich um die IMU-Daten (Inertial Measurement Unit) eines Projektes das leider nicht erfolgreich beendet wurde. Gemeinsam mit zwei Freunden haben wir versucht, mittels des 6-Achsen-Sensors von Google Wear-OS Watches verschiedene Fitnessübungen (Liegestützen, Bizeps Curls, etc.) in Echtzeit auf dem Handy zu erkennen, Wiederholungen zu zählen und Nutzern Tipps zur Erreichung der Trainingsziele zu geben. Auch wenn das Projekt leider nicht den erhofften Erfolg hatte, leben die Daten und die Idee weiter. Für das…
Kommentare sind geschlossenAutor: Michael Jentsch
TODO für Tag 29 Einführung in Multi-Output Methoden Beim Maschine Learning ist es oft die Aufgaben, eine einzelne Zielvariable vorherzusagen. Es gibt jedoch Szenarien, in denen es notwendig ist, mehrere Zielvariablen gleichzeitig aus denselben Eingabemerkmalen zu prognostizieren. Diese Art von Problemstellung wird als Multi-Output-Vorhersage bezeichnet und kann sowohl Regressions- als auch Klassifikationsaufgaben umfassen. Anstatt für jede Multi-Output-Aufgabe völlig neue Algorithmen zu implementieren, verfolgt scikit-learn einen flexiblen Ansatz. In scikit-learn kann man dies mit den Meta-Estimators oder Wrappern ermöglichen. Einige der Single-Output-Estimators kann man für Multi-Output-Szenarien anpassen. Ein simple Alternative besteht darin, für jede Zielvariable ein eigenes, unabhängiges Modell zu trainieren und die Vorhersagen dann zu aggregieren. Darüber hinaus unterstützen einige Algorithmen in scikit-learn von Hause aus die Vorhersage mehrerer Ausgaben.…
Kommentare sind geschlossenTODO für Tag 28 Komplexere Pipelines mit Preprocessing-Schritten Das Preprocessing in scikit-learn habe ich in den vorherigen Übungen (Tag 13, Tag 15, Tag 19, Tag 21, etc.) schon ausreichend behandelt und das Prinzip sollte klar sein. Aber die Datenvorbereitung kann vielfältige Formen annehmen. Neben den üblichen Verdächtigen wie Imputationsstrategien zum Umgang mit fehlenden Daten, dem TfidfVectorizer zum Extrahieren gewichteter Textmerkmale oder der Skalierung Numerische Features um sicherzustellen, dass Modelle nicht durch unterschiedliche Wertebereiche beeinflusst werden, gibt es noch viele andere Preprocessing-Schritte die man anwenden kann. Für kategorische Daten ist z.B. eine Umwandlung in ein numerisches Format notwendig (One-Hot-Encoding). Hierfür wird für jede Kategorie eine neue binäre Spalte erstellt. Ein Thema, dass ich aber im Zusammenhang mit dem Preprocessing in einer…
Kommentare sind geschlossenTODO für Tag 27 ROC-Kurve plotten und AUC berechnen (roc_auc_score) Die ROC Kurve (Receiver Operating Characteristic Kurve), ist ein grafisches Werkzeug, das die Leistungsfähigkeit eines binären Klassifikationsmodells über verschiedene Schwellenwerte hinweg visualisiert. Auf der y Achse wird die Sensitivität oder Trefferquote abgetragen, während die x Achse die False-Positiv-Rate darstellt. Eine Diagonale von links unten nach rechts oben repräsentiert die Leistung eines Zufallsklassifikators. Die Fläche unter dieser Kurve, bekannt als AUC (Area Under the Curve), dient als zusammenfassendes Maß für die Modellgüte über alle Schwellenwerte hinweg; ein höherer AUC Wert, idealerweise nahe 1, deutet auf eine bessere Unterscheidungsfähigkeit des Modells hin. Um eine solche Kurve mit der Python Bibliothek scikit learn zu erstellen, benötigt man zunächst die wahren Zielwerte und die…
Kommentare sind geschlossenDie Entwicklung von Webapplikationen mit Spring Boot und Thymeleaf in IntelliJ kann zu einer frustrierenden Erfahrung werden, wenn man bei jeder kleinen Änderung an den Templates oder statischen Ressourcen wie CSS- und JavaScript-Dateien die Anwendung neu starten muss. Dieser Prozess verlangsamt die Entwicklung erheblich. Daher habe ich mich mal nach einer Lösung für das Problem umgesehen und glücklicherweise gibt es eine Reihe von Konfigurationseinstellungen in der application.properties-Datei, die dieses Problem lösen und einen nahtlosen Live-Reload der statischen Ressourcen und Templates ermöglichen. Standardmäßig ist Spring Boot für die Produktionsumgebung optimiert. Das bedeutet, dass Thymeleaf-Templates und statische Ressourcen aus Effizienzgründen zwischengespeichert werden. Während dies in der Produktion die Performance verbessert, führt es in der Entwicklung dazu, dass Änderungen an den Dateien nicht sofort…
Kommentare sind geschlossenTODO für Tag 26 Umgang mit unbalancierten Klassen (class_weight) In scikit-learn wird der Parameter class_weight in vielen Klassifikationsalgorithmen (wie z.B. LogisticRegression, SVC, DecisionTreeClassifier, RandomForestClassifier) verwendet, um mit unbalancierten Klassen umzugehen. Die Grundidee ist, den Loss beim Training des Modells für die unterrepräsentierte(n) Klasse(n) höher zu gewichten. Wenn z.B. eine Klasse deutlich mehr Instanzen hat als andere (z.B. 90% Klasse A, 10% Klasse B), neigen viele Algorithmen dazu, die Mehrheitsklasse übermäßig gut zu lernen und die Minderheitsklasse zu ignorieren. Das liegt daran, dass der Standard-Loss-Funktion jeder Fehler gleich viel „kostet“. Ein Modell, das einfach immer die Mehrheitsklasse vorhersagt, hätte bereits eine hohe Accuracy, aber eine schlechte Leistung für die Minderheitsklasse. Um dem Problem zu begegnen, gibt es den Parameter class_weight. Er…
Kommentare sind geschlossenTODO für Tag 25 Stratifikation bei Klassifikationsproblemen anwenden Stratified K-Fold Cross-Validation ist eine Variante der K-Fold Cross-Validation, die besonders nützlich ist, wenn man mit imbalancierten Datensätzen in Klassifikationsproblemen arbeiten. Ziel ist es, eine robustere Schätzung der Leistungsfähigkeit eines Modells auf unbekannten Daten zu erhalten und Overfitting zu vermeiden. Standard K-Fold teilt den Datensatz in K gleiche Teile (Folds). Mit den Daten wird das Modell dann K-mal trainiert. Jedes Mal wird ein anderer Fold als Testset verwendet und die restlichen K-1 Folds als Trainingsset. Die Genauigkeit der K Durchläufe werden dann gemittelt. Standard K-Fold hat aber ein Problem mit imbalancierten Daten. Das ist der Fall, wenn die verschiedenen Klassen nicht annähernd gleich häufig vorkommen (z.B. 90% Klasse A, 10% Klasse B). Bei einer zufälligen…
Kommentare sind geschlossenTODO für Tag 24 California Housing Dataset Das California Housing Dataset in scikit-learn ist ein populärer Datensatz, der häufig für Regressionsaufgaben im maschinellen Lernen herangezogen wird. Sein Ziel ist die Vorhersage des Haus-Werts in Kalifornien. Was diesen Datensatz besonders kennzeichnet und für die Praxis relevant macht, ist seine Natur als Mehrfeature-Datensatz. Das bedeutet, dass die Vorhersage des Hauspreises nicht auf einer einzelnen Eigenschaft basiert, sondern auf einer Kombination verschiedener Merkmale, die jeden geografischen Block beschreiben. Zu diesen Merkmalen gehören beispielsweise das Einkommen der Haushalte in einem Block, das Durchschnittsalter der Häuser, die durchschnittliche Anzahl der Zimmer und Schlafzimmer pro Haushalt, die Bevölkerungsdichte sowie die geografische Lage, ausgedrückt durch Längen- und Breitengrade. Jedes dieser Attribute liefert eine andere Facette an Information,…
Kommentare sind geschlossenTODO für Tag 23 Unterschied zu einfacher LinearRegression Die einfache LinearRegression in scikit-learn versucht, eine Gerade oder Hyperebene zu finden, die die Summe der quadrierten Abweichungen zwischen den vorhergesagten und den tatsächlichen Werten minimiert. Sie ist anfällig für Overfitting, besonders bei vielen Features oder wenn Features stark miteinander korrelieren, was zu instabilen Koeffizienten führen kann. Ridge-Regression fügt der Kostenfunktion der einfachen linearen Regression einen zusätzlichen Term hinzu. Dieser Term ist die Summe der quadrierten Werte aller Koeffizienten, multipliziert mit einem Regularisierungsparameter namens alpha. Durch diese sogenannte L2-Regularisierung werden die Koeffizienten dazu gezwungen, kleiner zu werden. Sie werden zwar in Richtung 0 geschrumpft, erreichen aber selten exakt 0. Das Ergebnis ist ein Modell, das robuster gegenüber kleinen Änderungen in den Trainingsdaten ist und eine…
Kommentare sind geschlossenTODO für Tag 22 joblib zum Speichern und Laden von Modellen verwenden Joblib ist eine Python-Bibliothek, die eine Reihe von Werkzeugen bereitstellt, um häufige Aufgaben in der wissenschaftlichen Datenverarbeitung und im maschinellen Lernen zu vereinfachen und zu beschleunigen. Eine der bekanntesten Funktionen ist die Serialisierung und Deserialisierung von Python-Objekten, insbesondere solcher, die große NumPy-Arrays enthalten, wie es bei trainierten scikit-learn-Modellen der Fall ist. Dies bedeutet, dass joblib beliebige Python-Objekte in Dateien auf der Festplatte speichern kann, sodass sie später wieder geladen und verwendet werden können, ohne dass ein erneutes Training oder eine Neuberechnung erforderlich ist. Die Installation von joblib ist unkompliziert und erfolgt üblicherweise über den Python-Paketmanager pip mit dem Befehl pip install joblib. In den meisten fällen ist das aber nicht nötig, da…
Kommentare sind geschlossen