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).
Um Random Forest zu verstehen, werden wir das Lernen von Ensembles ansprechen.
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.
Es gibt zwei Haupttypen von Ensemble-Lernmethoden: "Absacken" und "Boosten". Zufälliger Wald macht Vorhersagen basierend auf diesem "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.
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.
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).
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.
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.
Lassen Sie uns nun tatsächlich eine zufällige Gesamtstruktur mit scicit-learn implementieren.
Verwenden Sie den Kickstarter Projects-Datensatz von kaggle. https://www.kaggle.com/kemical/kickstarter-projects
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
df = pd.read_csv(r"C:~~\ks-projects-201801.csv")
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()
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
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)
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)
Führen Sie die Verarbeitung kategorialer Variablen mit pd.get_dummies durch.
df = pd.get_dummies(df,drop_first = True)
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)
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!
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