In diesem Artikel wird erläutert, wie und wann die Random Forest Klassifizierung mit scikit-learn verwendet wird. Der Schwerpunkt liegt auf Konzepten, Arbeitsabläufen und Beispielen. Wir behandeln auch die Verwendung der Konfusionsmatrix und der Merkmalswichtigkeiten.
In diesem Tutorial wird erklärt, wie man Random Forests zur Klassifizierung in Python verwendet. Wir behandeln:
- So funktionieren Random Forests
- So verwenden Sie sie zur Klassifizierung
- So bewerten Sie ihre Leistung
Um diesen Artikel optimal nutzen zu können, sollten Sie über Grundkenntnisse in Python, Pandas und Scikit-Learn verfügen. Es ist hilfreich zu verstehen, wie Entscheidungsbäume zur Klassifizierung verwendet werden. Lesen Sie daher zunächst das Tutorial „Entscheidungsbaumklassifizierung in Python“ . Wenn Sie gerade erst mit der Verwendung von Scikit-Learn beginnen, lesen Sie das Kaggle-Tutorial: Ihr erstes Modell für maschinelles Lernen .
Während Random Forests sowohl für die Klassifizierung als auch für die Regression verwendet werden können, konzentriert sich dieser Artikel auf den Aufbau eines Klassifizierungsmodells. Um einfach mit dem Code in diesem Tutorial zu experimentieren, besuchen Sie die begleitende DataLab-Arbeitsmappe .
Ein Überblick über Random Forests
Random Forests sind ein beliebter überwachter maschineller Lernalgorithmus.
- Zufallswälder dienen dem überwachten maschinellen Lernen, bei dem eine gekennzeichnete Zielvariable vorhanden ist.
- Zufallswälder können zur Lösung von Regressionsproblemen (numerische Zielvariable) und Klassifikationsproblemen (kategoriale Zielvariable) verwendet werden.
- Random Forests sind Ensemblemethoden, das heißt, sie kombinieren Vorhersagen aus anderen Modellen.
- Jedes der kleineren Modelle im Random Forest-Ensemble ist ein Entscheidungsbaum.
Funktionsweise der Random Forest-Klassifizierung
Stellen Sie sich vor, Sie müssen ein komplexes Problem lösen und versammeln eine Gruppe von Experten aus verschiedenen Bereichen, die ihre Meinung abgeben. Jeder Experte gibt seine Meinung auf Grundlage seines Fachwissens und seiner Erfahrung ab. Anschließend stimmen die Experten ab, um zu einer endgültigen Entscheidung zu gelangen.
Bei einer Random Forest-Klassifizierung werden mehrere Entscheidungsbäume unter Verwendung verschiedener zufälliger Teilmengen der Daten und Merkmale erstellt. Jeder Entscheidungsbaum ist wie ein Experte, der seine Meinung zur Klassifizierung der Daten abgibt. Vorhersagen werden getroffen, indem die Vorhersage für jeden Entscheidungsbaum berechnet und dann das beliebteste Ergebnis verwendet wird. (Bei der Regression wird für Vorhersagen stattdessen eine Durchschnittsmethode verwendet.)
Im folgenden Diagramm haben wir einen Zufallswald mit n Entscheidungsbäumen und wir haben die ersten 5 zusammen mit ihren Vorhersagen (entweder „Hund“ oder „Katze“) angezeigt. Jeder Baum ist einer anderen Anzahl von Merkmalen und einer anderen Stichprobe des ursprünglichen Datensatzes ausgesetzt, und daher kann jeder Baum anders sein. Jeder Baum macht eine Vorhersage. Wenn wir uns die ersten 5 Bäume ansehen, können wir sehen, dass 4/5 vorhergesagt haben, dass die Stichprobe eine Katze war. Die grünen Kreise zeigen einen hypothetischen Pfad an, den der Baum genommen hat, um zu seiner Entscheidung zu gelangen. Der Zufallswald würde die Anzahl der Vorhersagen aus Entscheidungsbäumen für Katze und Hund zählen und die beliebteste Vorhersage auswählen.
Der Datensatz
Dieser Datensatz besteht aus Direktmarketingkampagnen eines portugiesischen Bankinstituts per Telefon. Ziel der Kampagnen war der Verkauf von Abonnements für ein Banktermingeld. Wir werden diesen Datensatz in einer Variable namens speichern bank_data.
Die Spalten, die wir verwenden werden, sind:
- age: Das Alter der Person, die den Anruf erhalten hat
- default: Ob die Person mit Krediten im Rückstand ist
- cons.price.idx: Verbraucherpreisindexstand zum Zeitpunkt des Anrufs
- cons.conf.idx:Wert des Verbrauchervertrauensindex zum Zeitpunkt des Anrufs
- y: Ob die Person abonniert hat (das ist, was wir vorhersagen möchten)
Pakete importieren
In diesem Tutorial werden die folgenden Pakete und Funktionen verwendet:
Arbeitsablauf bei Random Forests
Um dieses Modell anzupassen und zu trainieren, folgen wir der Infografik „Machine Learning Workflow“ . Da unsere Daten jedoch ziemlich sauber sind, werden wir nicht jeden Schritt durchführen. Wir werden Folgendes tun:
- Funktionsentwicklung
- Aufteilen der Daten
- Trainieren des Modells
- Hyperparameter-Optimierung
- Bewerten der Modellleistung
Vorverarbeitung von Daten für Random Forests
Baumbasierte Modelle sind gegenüber Ausreißern wesentlich robuster als lineare Modelle und benötigen keine normalisierten Variablen, um zu funktionieren. Daher müssen wir unsere Daten nur sehr wenig vorverarbeiten.
- Wir werden unsere Spalte „Standard“, die nound enthält yes, jeweils 0s und 1s zuordnen. Wir werden unknowndie Werte wie noin diesem Beispiel behandeln.
- Wir werden unser Ziel auch yauf 1s und 0s abbilden.
Aufteilen der Daten
Beim Trainieren eines überwachten Lernmodells ist es wichtig, die Daten in Trainings- und Testdaten aufzuteilen. Die Trainingsdaten werden verwendet, um das Modell anzupassen. Der Algorithmus verwendet die Trainingsdaten, um die Beziehung zwischen den Merkmalen und dem Ziel zu lernen. Die Testdaten werden verwendet, um die Leistung des Modells zu bewerten.
Der folgende Code teilt die Daten in separate Variablen für die Features und das Ziel auf und teilt sie dann in Trainings- und Testdaten auf.
Anpassen und Auswerten des Modells
Wir erstellen zunächst eine Instanz des Random Forest-Modells mit den Standardparametern. Anschließend passen wir diese an unsere Trainingsdaten an. Wir übergeben sowohl die Features als auch die Zielvariable, damit das Modell lernen kann.
An diesem Punkt verfügen wir über ein trainiertes Random Forest-Modell, müssen aber herausfinden, ob es genaue Vorhersagen macht.
Die einfachste Möglichkeit, dieses Modell zu bewerten, ist die Genauigkeit. Wir überprüfen die Vorhersagen anhand der tatsächlichen Werte im Testsatz und zählen, wie viele davon richtig waren.
Ausgabe:
Das ist ein ziemlich gutes Ergebnis! Durch die Optimierung unserer Hyperparameter können wir es jedoch möglicherweise noch besser machen apache kafka.
Visualisierung der Ergebnisse
Wir können den folgenden Code verwenden, um unsere ersten drei Bäume zu visualisieren.
Jedes Baumbild zeigt nur die ersten paar Knoten. Diese Bäume können sehr groß und schwer zu visualisieren werden. Die Farben repräsentieren die Mehrheitsklasse jedes Knotens (Box, wobei Rot Mehrheit 0 (kein Abonnement) und Blau Mehrheit 1 (Abonnement) anzeigt. Die Farben werden dunkler, je näher der Knoten dem Wert 0 oder 1 kommt. Jeder Knoten enthält außerdem die folgenden Informationen:
- Der Variablenname und der Wert, die zum Aufteilen verwendet werden
- Der Prozentsatz der Gesamtproben in jedem Split
- Die prozentuale Aufteilung zwischen den Klassen in jedem Split
Hyperparameter-Tuning
Der folgende Code verwendet Scikit-Learns RandomizedSearchCV, das nach dem Zufallsprinzip nach Parametern innerhalb eines Bereichs pro Hyperparameter sucht. Wir definieren die zu verwendenden Hyperparameter und ihre Bereiche im param_dist-Wörterbuch. In unserem Fall verwenden wir:
- n_estimators : die Anzahl der Entscheidungsbäume im Wald. Das Erhöhen dieses Hyperparameters verbessert im Allgemeinen die Leistung des Modells, erhöht jedoch auch den Rechenaufwand für Training und Vorhersage.
- max_depth : die maximale Tiefe jedes Entscheidungsbaums im Wald. Wenn Sie für max_depth einen höheren Wert festlegen, kann dies zu einer Überanpassung führen, während ein zu niedriger Wert zu einer Unteranpassung führen kann.
RandomizedSearchCVtrainiert viele Modelle (definiert durch n_iter_) und speichert jedes als Variable. Der folgende Code erstellt eine Variable für das beste Modell und druckt die Hyperparameter. In diesem Fall haben wir der Funktion kein Bewertungssystem übergeben, daher wird standardmäßig „Genauigkeit“ verwendet. Diese Funktion verwendet auch eine Kreuzvalidierung, was bedeutet, dass sie die Daten in fünf gleich große Gruppen aufteilt und 4 zum Trainieren und 1 zum Testen des Ergebnisses verwendet. Sie durchläuft jede Gruppe und gibt einen Genauigkeitswert aus, der gemittelt wird, um das beste Modell zu finden.
Ausgabe:
Weitere Bewertungsmetriken
Schauen wir uns die Konfusionsmatrix an. Sie stellt dar, was das Modell vorhergesagt hat und was die richtige Vorhersage war. Wir können dies verwenden, um den Kompromiss zwischen falsch positiven (oben rechts) und falsch negativen (unten links) Ergebnissen zu verstehen. Wir können die Konfusionsmatrix mit diesem Code darstellen:
Ausgabe:
Wir sollten auch das beste Modell hinsichtlich Genauigkeit, Präzision und Rückruf bewerten (beachten Sie, dass Ihre Ergebnisse aufgrund der Randomisierung abweichen können).
Ausgabe:
Der folgende Code stellt die Wichtigkeit jedes Merkmals dar und verwendet dabei die interne Bewertung des Modells, um die beste Möglichkeit zum Aufteilen der Daten innerhalb jedes Entscheidungsbaums zu finden.
Daraus lässt sich schließen, dass der Verbrauchervertrauensindex zum Zeitpunkt des Anrufs der wichtigste Indikator dafür war, ob die Person ein Abonnement abgeschlossen hat.
Es auf die nächste Stufe bringen
- Um mit überwachtem maschinellem Lernen in Python zu beginnen, probieren Sie „Überwachtes Lernen mit scikit-learn“ aus .
- Um mehr zu erfahren, wird die Verwendung von Random Forests (und anderen baumbasierten Modellen maschinellen Lernens) ausführlicher in Maschinelles Lernen mit baumbasierten Modellen in Python und Ensemble-Methoden in Python behandelt .
- Laden Sie den Spickzettel zu scikit-learn herunter , um eine praktische Referenz für den in diesem Tutorial behandelten Code zu erhalten.