[PYTHON] Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial

Einführung

Im Kaggle / Titanic-Tutorial lernen wir mit "RandomForestClassifier ()". Passen Sie diesen Parameter an, um festzustellen, ob sich die Lerngenauigkeit verbessert.

Datenaufbereitung

import numpy as np
import pandas as pd
import seaborn
import matplotlib.pyplot as plt

train_data = pd.read_csv("../train.csv")

from sklearn.model_selection import train_test_split

train_data_orig = train_data
train_data, cv_data = train_test_split(train_data_orig, test_size=0.3, random_state=1)

Teilen Sie die Daten mit train_test_split in train auf: cv = 7: 3 (cv; Kreuzvalidierung).

train_data.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 623 entries, 114 to 37
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  623 non-null    int64  
 1   Survived     623 non-null    int64  
 2   Pclass       623 non-null    int64  
 3   Name         623 non-null    object 
 4   Sex          623 non-null    object 
 5   Age          496 non-null    float64
 6   SibSp        623 non-null    int64  
 7   Parch        623 non-null    int64  
 8   Ticket       623 non-null    object 
 9   Fare         623 non-null    float64
 10  Cabin        135 non-null    object 
 11  Embarked     622 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 63.3+ KB
cv_data.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 268 entries, 862 to 92
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  268 non-null    int64  
 1   Survived     268 non-null    int64  
 2   Pclass       268 non-null    int64  
 3   Name         268 non-null    object 
 4   Sex          268 non-null    object 
 5   Age          218 non-null    float64
 6   SibSp        268 non-null    int64  
 7   Parch        268 non-null    int64  
 8   Ticket       268 non-null    object 
 9   Fare         268 non-null    float64
 10  Cabin        69 non-null     object 
 11  Embarked     267 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 27.2+ KB

Es gibt 623 Züge, 268 Lebensläufe und insgesamt 891.

Lernen Sie gemäß dem Tutorial

from sklearn.ensemble import RandomForestClassifier

features = ["Pclass", "Sex", "SibSp", "Parch"]

y = train_data["Survived"]
y_cv = cv_data["Survived"]
X = pd.get_dummies(train_data[features])
X_cv = pd.get_dummies(cv_data[features])

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1, max_features="auto")
model.fit(X, y)
predictions = model.predict(X_cv)

print('Train score: {}'.format(model.score(X, y)))
print('CV score: {}'.format(model.score(X_cv, y_cv)))
Train score: 0.8394863563402889
CV score: 0.753731343283582

Der Zug ist zu 84% korrekt, aber der Lebenslauf ist nur zu 75% korrekt. Ist es Überlernen?

Ändern Sie die Parameter von RandomForestClassifier manuell

n_estimator Versuchen Sie, den Wert von n_estimator zu ändern.

rfc_results = pd.DataFrame(columns=["train", "cv"])

for iter in [1, 10, 100]:
    model = RandomForestClassifier(n_estimators=iter, max_depth=5, random_state=1, max_features="auto")
    model.fit(X, y)
    predictions = model.predict(X_cv)
    rfc_results.loc[iter] = model.score(X, y), model.score(X_cv, y_cv)
train cv
1 0.826645 0.753731
10 0.833066 0.753731
100 0.839486 0.753731

Wenn die Anzahl der Entscheidungsbäume zunimmt, steigt die Zugpunktzahl leicht an, aber die Lebenslaufpunktzahl ändert sich nicht.

max_depth

Versuchen Sie, den Wert von "max_depth" zu ändern.

max_depth = 2

for iter in [1, 10, 100]:
    model = RandomForestClassifier(n_estimators=iter, max_depth=2, random_state=1, max_features="auto")
    model.fit(X, y)
    predictions = model.predict(X_cv)
    rfc_results.loc[iter] = model.score(X, y), model.score(X_cv, y_cv)
train cv
1 0.813804 0.731343
10 0.81862 0.753731
100 0.817014 0.761194

Ich habe einen Lebenslauf von 76%.

max_depth = 3

for iter in [1, 10, 100]:
    model = RandomForestClassifier(n_estimators=iter, max_depth=3, random_state=1, max_features="auto")
    model.fit(X, y)
    predictions = model.predict(X_cv)
    rfc_results.loc[iter] = model.score(X, y), model.score(X_cv, y_cv)
train cv
1 0.81862 0.753731
10 0.82504 0.776119
100 0.82504 0.768657

Ich habe einen Lebenslauf von 77,6%.

max_depth = 4

for iter in [1, 10, 100]:
    model = RandomForestClassifier(n_estimators=iter, max_depth=4, random_state=1, max_features="auto")
    model.fit(X, y)
    predictions = model.predict(X_cv)
    rfc_results.loc[iter] = model.score(X, y), model.score(X_cv, y_cv)
train cv
1 0.823435 0.764925
10 0.82825 0.761194
100 0.826645 0.764925

Die Punktzahl von cv liegt bei 76,5%.

Von oben hatten mit "max_depth = 3" "n_estimators = 10" die höchste Punktzahl.

Ändern Sie die RandomForestClassifier-Parameter automatisch

Verwenden Sie die Grid Search-Methode (GridSearchCV), um den besten Parameter zu finden. Dies ist eine Methode, um die aufgelisteten Parameterkombinationen auszuprobieren und den besten zu finden.

from sklearn.model_selection import GridSearchCV

param_grid = {"max_depth": [2, 3, 4, 5, None],
              "n_estimators":[1, 3, 10, 30, 100],
              "max_features":["auto", None]}

model_grid = GridSearchCV(estimator=RandomForestClassifier(random_state=1),
                 param_grid = param_grid,   
                 scoring="accuracy",  # metrics
                 cv = 3,              # cross-validation
                 n_jobs = 1)          # number of core

model_grid.fit(X, y) #fit

model_grid_best = model_grid.best_estimator_ # best estimator
print("Best Model Parameter: ", model_grid.best_params_)

Beachten Sie die Zeile "von". Als ich im Internet gesucht habe, gab es eine Möglichkeit, "von sklearn.grid_search import GridSearchCV" zu schreiben, aber in meinem Fall war dies NG.

Best Model Parameter:  {'max_depth': 3, 'max_features': 'auto', 'n_estimators': 10}

Als ich es manuell versuchte, waren "max_depth = 3" und "n_estimators = 10" die besten. Ich habe auch zwei Arten von "max_features" ausprobiert, aber "auto" war gut.

print('Train score: {}'.format(model.score(X, y)))
print('CV score: {}'.format(model.score(X_cv, y_cv)))

Train score: 0.826645264847512
CV score: 0.7649253731343284

Senden Sie an Kaggle / Titanic

Ich habe das Ergebnis unter Verwendung dieses Parameters vorhergesagt und an Kaggle gesendet. Die Genauigkeit betrug jedoch 0,77751 und *** war dieselbe wie der Parameter wie im Tutorial ***. Bien.

abschließend

Bevor wir versuchten, die Merkmalsmenge zu verbessern, konnten wir sie ein wenig verbessern, indem wir die Hyperparameter des Lernens anpassten. Als nächstes möchten wir die Merkmalsmenge betrachten.

Referenz

Recommended Posts

Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial
Kaggle Tutorial Titanic Know-how, um in den Top 2% zu sein
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
Annäherungserklärung für Anfänger, um in Kaggle Titanic_3 unter den besten 1,5% (0,83732) zu sein
Annäherungserklärung für Anfänger, um in Kaggle Titanic_1 unter den besten 1,5% (0,83732) zu sein
Annäherungserklärung für Anfänger, um in Kaggle Titanic_2 unter den besten 1,5% (0,83732) zu sein
Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
Kaggle Tutorial Titanic Genauigkeit 80,9% (Top 7% 0,80861)
Untersuchen Sie den Fehlerbereich bei der Anzahl der Todesfälle aufgrund einer Lungenentzündung
[Kaggle] Teilnahme am Melanomwettbewerb
Die Geschichte der Teilnahme an AtCoder
MySQL-automatische Escape-Funktion von Parametern in Python
Die Geschichte des "Lochs" in der Akte
Untersuchen Sie die Klasse eines Objekts mit Python
(Kaggle) Titanic Survivor Prediction Model Beurteilte Auswirkung der Anpassung zufälliger Waldparameter
[Verständnis in 3 Minuten] Der Beginn von Linux
Überprüfen Sie das Verhalten des Zerstörers in Python
Herausforderungen des Titanic-Wettbewerbs für Kaggle-Anfänger
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Visualisierung des Zündzustands der verborgenen Schicht des Modells, die im TensorFlow MNIST-Lernprogramm gelernt wurde
Geben Sie die Anzahl der CPU-Kerne in Python aus
Bedeutung von {Versionsnummer} im MySQL-RPM-Paket
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Der Inhalt des Python-Tutorials (Kapitel 5) ist in einem Aufzählungszeichen zusammengefasst.
Ändern Sie die Schriftgröße der Legende in df.plot
Der Inhalt des Python-Tutorials (Kapitel 4) ist in einem Aufzählungszeichen zusammengefasst.
Der Inhalt des Python-Tutorials (Kapitel 2) ist in einem Aufzählungszeichen zusammengefasst.
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Der Inhalt des Python-Tutorials (Kapitel 8) ist in einem Aufzählungszeichen zusammengefasst.
Der Inhalt des Python-Tutorials (Kapitel 1) ist in einem Aufzählungszeichen zusammengefasst.
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Der Inhalt des Python-Tutorials (Kapitel 10) ist in einem Aufzählungszeichen zusammengefasst.
Lesen Sie die Ausgabe von subprocess.Popen in Echtzeit
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Die Geschichte, das optimale n in N Faust zu finden
Korrigieren Sie die Argumente der in map verwendeten Funktion
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Visualisierte den Nutzungsstatus der Spüle im Unternehmen
Ausgabe in Form eines Python-Arrays
Die Geschichte der Anzeige von Mediendateien in Django
Suchen Sie nach dem Wert der Instanz in der Liste
Der Inhalt des Python-Tutorials (Kapitel 6) ist in einem Aufzählungszeichen zusammengefasst.
Machen Sie den Fortschritt von dd in der Fortschrittsanzeige sichtbar
Der Inhalt des Python-Tutorials (Kapitel 3) ist in einem Aufzählungszeichen zusammengefasst.
Tag 66 [Einführung in Kaggle] Die einfachste Titanic-Vorhersage
[Statistik] Lassen Sie uns die Ausführung der logistischen Regression in Stan im Detail erklären (mit Titanic-Datensatz).