[PYTHON] [Maschinelles Lernen] Zufällige Gesamtstruktur verstehen

1. Zweck

Wenn Sie maschinelles Lernen ausprobieren möchten, kann jeder Scicit-Learn usw. verwenden, um es relativ einfach zu implementieren. Um jedoch Ergebnisse bei der Arbeit zu erzielen oder Ihr Niveau zu verbessern ** Sie können sehen, dass es in der Erklärung von "Ich kenne den Hintergrund nicht, aber ich habe dieses Ergebnis" deutlich schwach ist **.

Im vorherigen Beitrag [Maschinelles Lernen] Verstehen von Entscheidungsbäumen aus Scikit-Learn und Mathematik habe ich die Details von Entscheidungsbäumen beschrieben. Dieses Mal werde ich den zufälligen Wald zusammenfassen, der auch in praktischeren und Wettbewerben wie Kaggle verwendet wird.

Ich spreche diesmal nicht wie üblich über Mathematik, aber ** irgendwie konnte ich nur verstehen, dass "die Kombination von Entscheidungsbäumen ein zufälliger Wald ist" **, also habe ich es selbst organisiert und * * Der Zweck dieser Zeit ist es, Ihnen zu helfen, zu verstehen, "was eine zufällige Gesamtstruktur ist" und "was für die Parameteroptimierung getan werden sollte", wobei der Hintergrund im Auge behalten wird **.

Auch diesmal O'Reillys [Maschinelles Lernen beginnend mit Python](https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81] % E3% 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E2% 80% 95scikit-learn% E3% 81% A7% E5% AD% A6% E3% 81% B6% E7% 89% B9% E5% BE% B4% E9% 87% 8F% E3% 82% A8% E3% 83% B3% E3% 82% B8% E3% 83% 8B% E3% 82% A2% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E5% 9F% BA% E7% A4% 8E-Andreas-C-Muller / dp / 4873117984 / ref = sr_1_4? adgrpid = 79259353864 & dchild = 1 & gclid = Cj0KCQjw3qzzBRDnARIsAECmrypfSaVgzur1vjdrANcvYmfbh5o4vqR0LY6sH-cKX14mFgJ95QpG5sQaAkdAEALw_wcB & hvadid = 358.533.815.035 & hvdev = c & hvlocphy = 1009318 & hvnetw = g & hvqmt = e & hvrand = 15282066364140801380 & hvtargid = kwd-475056195101 & hydadcr = 27269_11561183 & jp-ad-ap = 0 & keywords = python% E3% 81% A7% E3% 81% AF% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92 & qid = 1584146942 & sr = 8-4).

2. Ensemble-Lernen und zufälliger Wald

Um Random Forest zu verstehen, werden wir das Lernen von Ensembles ansprechen.

(1) Was ist Ensemble-Lernen?

Ensemble-Lernen ist ** eine Möglichkeit, ein leistungsfähigeres Modell zu erstellen, indem mehrere Modelle für maschinelles Lernen kombiniert werden **.

Es gibt viele Modelle für maschinelles Lernen wie "logistische Regression", "SVM" und "Entscheidungsbaum", aber jedes dieser Modelle macht Vorhersagen für Daten unabhängig.

Im Allgemeinen denke ich jedoch, dass es viele Fälle gibt, in denen eine Art ** Mehrheitsentscheidung **, in der mehrere Personen zusammenkommen, um eine Antwort zu finden, bessere Ergebnisse liefert als eine Person, die nach eigenem Ermessen eine Antwort gibt.

Ensemble-Lernen ist genau diese Denkweise und eine Lernmethode, die eine endgültige Entscheidung auf der Grundlage der Beurteilungsergebnisse mehrerer Modelle für maschinelles Lernen trifft. Das Bild ist unten.

キャプチャ1.PNG

(2) Arten des Ensemble-Lernens

Es gibt zwei Haupttypen von Ensemble-Lernmethoden: "Absacken" und "Boosten". Zufälliger Wald macht Vorhersagen basierend auf diesem "Absacken".

◆ Was ist Absacken?

Es ist eine Methode, um mehrere Modelle parallel mit der Methode ** Boot Lap ** zu trainieren. → Wenn neue Daten eingehen, treffen wir eine Mehrheitsentscheidung für die Klassifizierung und eine durchschnittliche Vorhersage für die Regression.


Was ist ein Bootstrap?

Eine Methode zum Abtasten einiger Daten aus den Originaldaten durch ** Wiederherstellungsextraktion **. Bei der Wiederherstellungsextraktion werden die einmal aufgenommenen Daten ebenfalls zu den Originaldaten zurückgeführt und abgetastet, sodass dieselben Daten viele Male ausgewählt werden können.

◆ Was steigert?

So bereiten Sie mehrere Modelle vor und lernen in Serien. Wir werden das nächste Modell erstellen und dabei auf die Ergebnisse des zuvor erstellten Modells verweisen.

Modelle, die auf Boosting basieren, haben Adaboost (diesmal nicht erwähnt).

(3) Was ist Random Forest?

Random Forest ist eine Sammlung vieler leicht unterschiedlicher Entscheidungsbäume, die auf dem Absacken des Ensemble-Lernens basieren **.

Zufällige Wälder sind eine Möglichkeit, dieses Problem zu lösen, da der Entscheidungsbaum allein den Nachteil hat, dass er überlernt.

Wie im Absacken erwähnt, wird jeder Entscheidungsbaum mit übertrainierten Daten erstellt, da mehrere Gruppen zufällig aus den Originaldaten ausgewählt werden.

** Die Idee ist, dass Sie, wenn Sie viele Entscheidungsbäume erstellen, die in verschiedene Richtungen überlernt sind, den Grad des Überlernens reduzieren können, indem Sie die Ergebnisse mitteln **.

Lassen Sie uns diese Idee veranschaulichen. SCHRITT 1: Stichproben aus den Originaldaten mit Boost-Runde zufällig abtasten und Datengruppen für N Gruppen erstellen

SCHRITT 2: Erstellen Sie ein Entscheidungsbaummodell für jede der N Gruppen.

SCHRITT 3: Machen Sie einmal eine Vorhersage mit dem Entscheidungsbaummodell jeder N-Gruppe.

SCHRITT 4: Nehmen Sie eine Mehrheit der Stimmen von N Gruppen (Rendite ist durchschnittlich) und machen Sie eine endgültige Vorhersage. キャプチャ2.PNG

(4) Parameter zum Implementieren einer zufälligen Gesamtstruktur mit scicit-learn

Die spezifische Implementierung mit scicit-learn wird ab dem nächsten durchgeführt, aber ich werde erklären, wie jeder Parameter zuerst eingestellt wird.

Als Voraussetzung ist jedoch bekannt, dass Random Forest in der Lage ist, ohne viel Parametereinstellung eine einigermaßen gute Genauigkeit zu erzielen (es ist nicht erforderlich, die Skala wie die Datenstandardisierung zu konvertieren). Daher werden wir es dieses Mal nur vorstellen und in der nächsten Implementierung das Modell mit den Standardeinstellungen erstellen.

Hier wurde am Anfang [Maschinelles Lernen beginnend mit Python] vorgestellt (https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82% 81% E3% 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E2% 80% 95scikit-learn% E3% 81% A7% E5% AD % A6% E3% 81% B6% E7% 89% B9% E5% BE% B4% E9% 87% 8F% E3% 82% A8% E3% 83% B3% E3% 82% B8% E3% 83% 8B % E3% 82% A2% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7 % BF% 92% E3% 81% AE% E5% 9F% BA% E7% A4% 8E-Andreas-C-Muller / dp / 4873117984 / ref = sr_1_4? adgrpid = 79259353864 & dchild = 1 & gclid = Cj0KCQjw3qzzBRDnARIsAECmrypfSaVgzur1vjdrANcvYmfbh5o4vqR0LY6sH-cKX14mFgJ95QpG5sQaAkdAEALw_wcB & hvadid = 358.533.815.035 & hvdev = c & hvlocphy = 100009318 & hvnetw = g & hvqmt = e & hvrand = 152802066364140801380 & hvtargid = kwd-475056195101 & hydadcr = 27269_11561183 & jp-ad-ap = 0 & keywords = python% E3% 81% A7% E3% 81% A % 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92 & qid = 1584146942 & sr = 8-4) erwähnt "wichtige Parameter zum Anpassen" auf Seite 87 Einführung in n_estimators, max_features.

◆n_estimators Legen Sie fest, wie viele Entscheidungsbäume vorbereitet werden sollen. Es ist, wie viele N von "N Daten" in der Figur gezeigt sind. Je größer dies ist, desto besser (das Bild ist, dass Sie von vielen Menschen eine Mehrheit erhalten können), aber wenn Sie es zu stark erhöhen, wird es Zeit und Gedächtnis brauchen, also denke ich, dass es ein Gleichgewicht mit diesem Bereich sein wird.

◆max_features Dies ist das erste Mal, dass ich es hier beschreibe, aber es gibt noch eine weitere Sache, die beim Abtasten der Daten in STEP1 ausgeführt wird. Es ist "Auswahl der Merkmalsmenge". Nicht alle Features werden zum Erstellen des Modells verwendet, und Features werden auch zufällig beim Erstellen des Entscheidungsbaums in jeder Gruppe zugewiesen. Legen Sie mit max_features die Anzahl der Features in jeder Gruppe fest.

Wenn Sie max_features erhöhen, sollte jedes Entscheidungsbaummodell ähnlich sein, während das Verringern zu erheblich unterschiedlichen Entscheidungsbaummodellen führt. Wenn Sie jedoch zu klein sind, werden Entscheidungsbäume erstellt, die nicht zu den Daten passen. Ich werde am Ende.

In "Maschinelles Lernen beginnend mit Python" wird allgemein angegeben, dass max_features den Standardwert verwenden sollte.

3. Implementieren Sie eine zufällige Gesamtstruktur mit scicit-learn

Lassen Sie uns nun tatsächlich eine zufällige Gesamtstruktur mit scicit-learn implementieren.

(1) Datensatz

Verwenden Sie den Kickstarter Projects-Datensatz von kaggle. https://www.kaggle.com/kemical/kickstarter-projects

(2) Importieren Sie die erforderlichen Elemente und lesen Sie die Daten

(I) Importieren

import pandas as pd#Pandas importieren
import datetime#Import zur Datumsverarbeitung von Originaldaten
from sklearn.model_selection import train_test_split#Zur Datenaufteilung
from sklearn.ensemble import RandomForestClassifier#Zufälliger Wald

(Ii) Daten lesen


df = pd.read_csv(r"C:~~\ks-projects-201801.csv")

(Iii) Datenerscheinung

Aus dem Folgenden können Sie ersehen, dass es sich um den Datensatz von (378661, 15) handelt.

df.shape

Schauen wir uns auch die Daten in .head kurz an.

df.head()

(3) Datenformung

(I) Anzahl der Rekrutierungstage

Da wir uns diesmal auf die zufällige Gesamtstruktur konzentrieren werden, werden wir die Details weglassen. Da jedoch die Startzeit und die Endzeit für die Rekrutierung der Cloud-Finanzierung in den Daten enthalten sind, werden wir diese in "Rekrutierungstage" umwandeln.

df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days

(Ii) Über die Zielvariable

Ich werde die Details auch hier weglassen, aber es gibt andere Kategorien als Erfolg ("erfolgreich") und Misserfolg ("fehlgeschlagen") für die Zielvariable "state", aber dieses Mal werde ich nur Daten für Erfolg und Misserfolg verwenden.

df = df[(df["state"] == "successful") | (df["state"] == "failed")]

Ersetzen Sie dann Erfolg durch 1 und Misserfolg durch 0.

df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)

(Iii) Löschen Sie unnötige Zeilen

Löschen Sie vor dem Erstellen des Modells die ID und den Namen, die Sie Ihrer Meinung nach nicht benötigen (dies sollte beibehalten werden, diesmal wird es jedoch entfernt), sowie die Variablen, die Sie erst nach der Cloud-Finanzierung kennen. ..

df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)

(Iv) Verarbeitung von Kategorievariablen

Führen Sie die Verarbeitung kategorialer Variablen mit pd.get_dummies durch.

df = pd.get_dummies(df,drop_first = True)

(4) Schließlich die Hauptaufteilung der Subjektdaten und zufällige Wald-

(I) Datenaufteilung

Teilen Sie es zunächst in Trainingsdaten und Testdaten auf.

train_data = df.drop("state", axis=1)
y = df["state"].values
X = train_data.values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)

(Ii) Zufälliger Wald

clf = RandomForestClassifier(random_state=1234)
clf.fit(X_train, y_train)
print("score=", clf.score(X_test, y_test))

Wenn Sie dies tun, sollten Sie eine Genauigkeit von ca. 0,638 erhalten. Wenn es ein Basismodell ist, ist es das!

4. Fazit

Wie war es? Mein Gedanke ist: "Ich kann nicht interpretieren, selbst wenn mir von Anfang an ein sehr komplizierter Code angezeigt wird. Daher ist mir die Genauigkeit kein einziges Mal wichtig. Deshalb werde ich versuchen, eine grundlegende Reihe von Flows mit Scicit-Learn usw. zu implementieren." Ich finde es sehr wichtig.

Sobald ich mich daran gewöhnt habe, halte ich es jedoch für sehr wichtig, aus dem Hintergrund zu verstehen, wie sie hinter den Kulissen funktionieren. Wenn ich mehr erfahre, möchte ich diesen zufälligen Wald auf eine tiefere Ebene aktualisieren.

Ich denke, es gibt viele Inhalte, die schwer zu verstehen sind, aber ich hoffe, es hilft, mein Verständnis zu vertiefen.

Recommended Posts

[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Maschinelles Lernen: Überwacht - Zufälliger Wald
[Maschinelles Lernen] Versuchen Sie, zufällige Wälder zu studieren
Zufälliger Wald (2)
Zufälliger Wald
Maschinelles Lernen
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
Random Seed Research im maschinellen Lernen
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Zusammenfassung des Lernprogramms für maschinelles Lernen
Maschinelles Lernen Über Overlearning
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Logistische Regression beim maschinellen Lernen
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen studieren ~ matplotlib ~
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
Lerne irgendwie maschinelles Lernen
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung
Einführung in das maschinelle Lernen
Maschinelles Lernen: k-Nächste Nachbarn
Was ist maschinelles Lernen?
[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen
Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Maschinelles Lernen mit Pokemon gelernt
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Balanced Random Forest in Python
Maschinelles Lernen in Delemas (Praxis)
Eine Einführung in das maschinelle Lernen
Techniken im Zusammenhang mit maschinellem Lernen / Klassifizierung
Grundlagen des maschinellen Lernens (Denkmal)
Anfänger des maschinellen Lernens versuchten RBM
[Maschinelles Lernen] Entscheidungsbäume aus Scikit-Lernen und Mathematik verstehen
Ich habe versucht, RandomForest zu verwenden
Maschinelles Lernen mit Python! Vorbereitung
Entscheidungsbaum und zufälliger Wald
Lernressourcen-Lernblock für maschinelles Lernen
Maschinelles Lernen ② Naive Bayes Zusammenfassung
Verwenden Sie Random Forest mit Python
Verstehe maschinelles Lernen ~ Ridge Regression ~.
Zusammenfassung der Artikel zum maschinellen Lernen (selbst verfasst)
Über maschinelles Lernen gemischte Matrix
Praktisches Memo zum maschinellen Lernsystem
Maschinelles Lernen Minesweeper mit PyTorch
Erstellen Sie eine maschinelle Lernumgebung
Python Machine Learning Programming> Schlüsselwörter
Algorithmus für maschinelles Lernen (einfaches Perzeptron)
Wird in EDA für maschinelles Lernen verwendet
Bedeutung von Datensätzen für maschinelles Lernen
Maschinelles Lernen und mathematische Optimierung
Maschinelles Lernen: Überwacht - Support Vector Machine
Überwachtes maschinelles Lernen (Klassifikation / Regression)
Ich habe versucht, die Extreme-Lernmaschine zu implementieren