Zum Inhalt springen →

Autor: Michael Jentsch

30 Tage scikit-learn – Tag 25: Advanced Cross-Validation: Stratified KFold

TODO 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 geschlossen

30 Tage scikit-learn – Tag 24: Mehrfeature-Datensätze verwenden

TODO 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 geschlossen

30 Tage scikit-learn – Tag 23: Regression: Ridge und Lasso

TODO 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 geschlossen

30 Tage scikit-learn – Tag 22: Modell speichern und laden

TODO 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

30 Tage scikit-learn – Tag 21: Textdaten mit scikit-learn

TODO für Tag 21 Einfaches Bag-of-Words Modell mit CountVectorizer Ein Bag-of-Words Modell stellt eine Methode dar, um Text in ein numerisches Format umzuwandeln, das von Computeralgorithmen verarbeitet werden kann. Bei diesem Modell wird ein Textdokument als eine ungeordnete Sammlung seiner Wörter betrachtet, wobei die Grammatik und die Reihenfolge der Wörter vollständig ignoriert werden. Der Fokus liegt einzig auf der Häufigkeit, mit der jedes Wort im Dokument vorkommt. In scikit-learn implementiert der CountVectorizer dieses Bag-of-Words Konzept auf eine einfache und effiziente Weise. Seine Hauptaufgabe ist es, eine Sammlung von Textdokumenten, zu nehmen und daraus eine Matrix von Wort-Zählungen zu erstellen. Zunächst analysiert der CountVectorizer den gesamten Korpus, um ein Vokabular aller einzigartigen Wörter zu erstellen, die im Text vorkommen. Dieses Vokabular bildet die Grundlage für…

Kommentare sind geschlossen

30 Tage scikit-learn – Tag 20: Dimensionalitätsreduktion mit PCA

TODO für Tag 20 Prinzipielle Einführung in PCA Die Hauptkomponentenanalyse, als PCA abgekürzt, ist eine Technik zur Dimensionalitätsreduktion. Ihr Hauptziel besteht darin, die Anzahl der Dimensionen eines Datensatzes zu verringern, während gleichzeitig so viel wie möglich von der ursprünglichen Varianz, also der Information, in den Daten erhalten bleibt. Dies ist besonders nützlich bei hochdimensionalen Datensätzen, wo viele Merkmale redundant sein können. Die grundlegende Idee hinter PCA ist es, einen neuen Satz von Features zu finden, die sogenannten Hauptkomponenten. Diese Hauptkomponenten sind Kombinationen der ursprünglichen Merkmale. Die erste Hauptkomponente ist die Richtung im Merkmalsraum, entlang derer die Daten die größte Varianz aufweisen. Jede nachfolgende Hauptkomponente wird so gewählt, dass sie die nächstgrößte verbleibende Varianz erklärt, unter der Bedingung, dass sie unkorreliert…

Kommentare sind geschlossen

30 Tage scikit-learn – Tag 19: Pipeline + Cross-Validation kombinieren

TODO für Tag 18 Cross-Validation innerhalb einer Pipeline durchführen Die Durchführung von Kreuzvalidierung innerhalb einer Pipeline ist ein Ansatz, der dabei hilft, robuste und verlässliche Modelle zu entwickeln. Das Prinzip ist, sicherzustellen, dass alle Schritte der Datenvorverarbeitung, wie Skalierung, Imputation fehlender Werte oder Merkmalsextraktion, korrekt innerhalb jedes einzelnen Kreuzvalidierungs-Splits angewendet werden. Dies verhindert ein sogenanntes „Data Leakage“, bei dem Informationen aus den Testdaten (oder Validierungsdaten innerhalb eines Folds) unbeabsichtigt in den Trainingsprozess der Vorverarbeitungsschritte einfließen und so zu optimistischen und unrealistischen Leistungsschätzungen führen. Eine Pipeline führt eine Sequenz von Datentransformatoren und einem finalen Schätzer (dem eigentlichen Modell) zu einem einzigen Objekt zusammen. Wenn dieses Pipeline-Objekt dann einer Kreuzvalidierungsfunktion wie GridSearchCV übergeben wird, behandelt die Kreuzvalidierungslogik die gesamte Pipeline als eine Einheit. Die…

Kommentare sind geschlossen

30 Tage scikit-learn – Tag 18: Mehr Klassifikatoren vergleichen

TODO für Tag 18 Erst mal eine kurze Vorstellung der 3 Algorithmen, auch wenn sie schon in den vorherigen Tagen der 30 Tage scikit-learn Challenge verwendet wurden. Logistic Regression Die Logistische Regression ist ein Algorithmus der hauptsächlich für Klassifikationsaufgaben verwendet wird, insbesondere für binäre Klassifikationsprobleme (d.h. Probleme mit zwei möglichen Ergebnissen, z.B. Ja/Nein, 0/1, Spam/Kein Spam). Trotz des Namens „Regression“ im Titel ist das primäre Ziel die Klassifikation. Ähnlich wie die lineare Regression berechnet sie eine gewichtete Summe der Eingabemerkmale (plus einem Bias-Term). Das Ergebnis dieser linearen Kombination wird dann durch die Sigmoid-Funktion geleitet. Diese Funktion „quetscht“ jeden beliebigen reellen Eingabewert in einen Ausgabewert zwischen 0 und 1. Der Ausgabewert der Sigmoid-Funktion wird als Wahrscheinlichkeit interpretiert, dass die gegebene Eingabe zur positiven Klasse gehört…

Kommentare sind geschlossen

30 Tage scikit-learn – Tag 17: Bewertungskriterien für Klassifikation

TODO für Tag 17 Confusion Matrix Beim Training eines Klassifikationsmodells, das zum Beispiel E-Mails als Spam oder Nicht-Spam einordnet, möchte man visualisieren, wie gut es funktioniert. Eine einfache Prozentzahl der korrekt zugeordneten E-Mails (die Gesamtgenauigkeit) reicht dabei oft nicht aus, denn es gibt verschiedene Arten von Fehlern und richtigen Vorhersagen. Dabei kann die Confusion Matrix helfen. Die Confusion Matrix ist in den letzten Tagen schon öfter zum Einsatz gekommen. Sie zeigt, wie oft ein Modell eine positive Klasse (z. B. Spam) korrekt als positiv identifiziert hat (True Positives), wie oft es eine negative Klasse (z. B. Nicht-Spam) korrekt als negativ erkannt hat (True Negatives). Aber sie zeigt auch, wie oft das Modell etwas als positiv vorhergesagt hat, obwohl es tatsächlich negativ…

Kommentare sind geschlossen

30 Tage scikit-learn – Tag 16: Clustering-Grundlagen – KMeans

TODO für Tag 16 KMeans Der KMeans-Algorithmus für eine Aufteilung in 3 Gruppen funktioniert in etwa so: Zuerst wählt er 3 zufällige Stellen aus, die als erste Schätzungen für die Mittelpunkte einer Gruppen dienen. Dann schaut er sich jeden einzelnen Punkt an und packt ihn in die Gruppe, deren Mittelpunkt ihm am nächsten ist. Wenn alle Punkte einer Gruppe zugeordnet sind, berechnet der Algorithmus für jede Gruppe neu, wo genau die Mitte aller Punkte in dieser Gruppe liegt. Diese neuen Mitten sind dann die verbesserten Schätzungen für die Gruppenmittelpunkte. Diesen Vorgang wiederholt der Algorithmus immer wieder. Das macht er so lange, bis sich die Mittelpunkte der Gruppen kaum noch bewegen. Am Ende hat man dann die Punkte so in 3…

Kommentare sind geschlossen