[PYTHON] Wählen Sie Modelle von Kaggles Titanic (kaggle ④)

Einführung

Dies ist die Geschichte der erstmaligen Teilnahme am Kaggle </ b> -Wettbewerb. Im vorherigen "Überprüfen der Korrelation mit Kaggles Titanic" (https://qiita.com/sudominoru/items/840e87cc77de29f10ca2) haben wir die Korrelation überprüft und Pclass (Ticketklasse), Geschlecht (Geschlecht), Tarif untersucht. Ich entschied mich für drei Eingabedaten von (Tarif). Dieses Mal möchte ich einige Modelle ausprobieren.

Inhaltsverzeichnis

  1. Ergebnis
  2. Über das zu verwendende Modell
  3. Wie wird das Modell bewertet?
  4. Probieren Sie das Modell aus
  5. Parametereinstellung
  6. Bei Kaggle einreichen
  7. Zusammenfassung

Geschichte

1. Ergebnis

Aus dem Ergebnis stieg die Punktzahl ein wenig auf "0,77511". Das Ergebnis sind die besten 58% (Stand 29. Dezember 2019). Ich möchte den Fluss bis zur erneuten Einreichung sehen.

2. Über das zu verwendende Modell

Das letzte Mal habe ich "Linear SVC" gemäß scikit-learn algorithm sheet verwendet. Ich habe zuerst maschinelles Lernen gelernt [dieses Buch](https://www.amazon.co.jp/Python-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF % 92% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0-% E9% 81% 94% E4% BA% BA% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 82% B5% E3% 82% A4% E3% 82% A8% E3% 83% B3% E3% 83% 86% E3% 82% A3% E3% 82% B9% E3% 83% 88% E3% 81% AB% E3% 82% 88% E3% 82% 8B% E7% 90% 86% E8% AB% 96% E3% 81% A8% E5% AE% 9F% E8% B7% B5-Impress-Gear / dp / 4295003379 / ref = dp_ob_title_bk) greift das folgende Modell von Scikit-Learn zum Klassifizierungsproblem auf. Ich bin. ・ Sklearn.svm.LinearSVC ・ Sklearn.svm.SVC ・ Sklearn.ensemble.RandomForestClassifier ・ Sklearn.linear_model.LogisticRegression ・ Sklearn.linear_model.SGDClassifier

Dieses Mal möchte ich das obige Modell ausprobieren.

3. Wie wird das Modell bewertet?

Das Verfahren zur Bewertung des Modells ist wie folgt.

  1. Lernen Sie mit Trainingsdaten
  2. Vorhersage anhand von Testdaten
  3. Überprüfen Sie, ob das vorhergesagte Ergebnis korrekt ist

In Kaggles Titanic gibt es Trainingsdaten [train.csv](Daten, die das Ergebnis anzeigen) und Testdaten [test.csv](Daten, die das Ergebnis nicht kennen). Wenn Sie test.csv für 2 "Vorhersagen" und 3 "Bestätigen" verwenden, ist dies ineffizient, da Sie das Ergebnis jedes Mal festschreiben und senden müssen. Trainingsdaten [train.csv] mit bekannten Ergebnissen können effizient ausgewertet werden, indem sie in Trainingsdaten und Testdaten unterteilt werden. scikit-learn bietet eine Funktion "train_test_split", die Trainingsdaten und Testdaten unterteilt.

from sklearn.model_selection import train_test_split

######################################
#Trainingsdaten und Testdaten trennen
# Split training data and test data
######################################
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1, shuffle=True)

Das Bild ist wie folgt. Wenn test_size = 0,3 ist, werden die Trainingsdaten und die Testdaten durch "7: 3" geteilt.

〇Daten vor der Teilung

yx
SurvivedPclassSexFare
103male7.25
211female71.2833
313female7.925
411female53.1
503male8.05
603male8.4583
701male51.8625
803male21.075
913female11.1333
1012female30.0708

〇 Trainingsdaten nach der Teilung

y_trainx_train
SurvivedPclassSexFare
103male7.25
211female71.2833
411female53.1
503male8.05
603male8.4583
803male21.075
1012female30.0708

〇 Testdaten nach der Teilung

y_testx_test
SurvivedPclassSexFare
313female7.925
701male51.8625
913female11.1333

Als nächstes kommt Lernen und Vorhersage.

Das Scikit-Lernmodell bietet eine Methode "fit" für das Lernen und eine Methode "Score" für die Bewertung von Vorhersagen. Sie sind "fit" und "Punktzahl".

from sklearn.svm import LinearSVC
model = LinearSVC(random_state=1)

######################################
#lernen
# training
######################################
model.fit(x_train, y_train)

######################################
#Bewerten Sie die vorhergesagten Ergebnisse
# Evaluate predicted results
######################################
score = model.score(x_test, y_test)

"Fit" lernt. "Score" sagt das Ergebnis mit "x_test" voraus, stimmt das Ergebnis mit "y_test" überein und gibt die richtige Antwortrate zurück. Im obigen Fall wäre die Punktzahl "0,753731343283582". Das Ergebnis ist eine zu 75% korrekte Antwortrate.

4. Probieren Sie das Modell aus

Sie können die Leistung eines Modells bewerten, indem Sie verschiedene Modelle ausprobieren und deren Ergebnisse vergleichen. Probieren Sie das Modell unter "2. Über das zu verwendende Modell" aus.

Der Gesamtcode ist unten.

Vorbereitung


import numpy 
import pandas

# train.Laden Sie csv
# Load train.csv
df = pandas.read_csv('/kaggle/input/titanic/train.csv')

##############################
#Datenvorverarbeitung
#Extrahieren Sie die erforderlichen Elemente
# Data preprocessing 
# Extract necessary items
##############################
# 'Survived', 'Pclass', 'Sex', 'Fare'Extrahieren
# Extract 'Survived', 'Pclass', 'Age', 'Fare'
df = df[['Survived', 'Pclass', 'Sex', 'Fare']]

##############################
#Datenvorverarbeitung
#Quantifizieren Sie das Etikett (Name)
# Data preprocessing 
# Digitize labels
##############################
from sklearn.preprocessing import LabelEncoder
#Quantifizieren Sie das Geschlecht mit dem Label Encoder
# Digitize gender using LabelEncoder
encoder_sex = LabelEncoder()
df['Sex'] = encoder_sex.fit_transform(df['Sex'].values)

##############################
#Datenvorverarbeitung
#Zahlen standardisieren
# Data preprocessing
# Standardize numbers
##############################
from sklearn.preprocessing import StandardScaler

#Standardisierung
# Standardize numbers
standard = StandardScaler()
df_std = pandas.DataFrame(standard.fit_transform(df[['Pclass', 'Fare']]), columns=['Pclass', 'Fare'])

#Tarif standardisieren
# Standardize Fare
df['Pclass'] = df_std['Pclass']
df['Fare'] = df_std['Fare']

from sklearn.model_selection import train_test_split

x = df.drop(columns='Survived')
y = df[['Survived']]

Trainingsdaten, Testdatenerstellung


#######################################
#Trainingsdaten und Testdaten trennen
# Split training data and test data
#######################################
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1, shuffle=True)
y_train = numpy.ravel(y_train)
y_test = numpy.ravel(y_test)

Modellbewertung


#######################################
#Bewerten Sie das Modell
# Evaluate the model
#######################################
from sklearn.svm import LinearSVC
model = LinearSVC(random_state=1)
model.fit(x_train, y_train)
score = model.score(x_test, y_test)
score

Durch Ersetzen des Modelldefinitionsteils der "Modellbewertung" können Sie mit verschiedenen Modellen bewerten. Probieren Sie das unter "2. Über das zu verwendende Modell" beschriebene Modell aus. Das Ergebnis ist wie folgt.

Modell- score
sklearn.svm.LinearSVC 0.753
sklearn.svm.SVC 0.783
sklearn.ensemble.RandomForestClassifier 0.805
sklearn.linear_model.LogisticRegression 0.753
sklearn.linear_model.SGDClassifier 0.753

Das Ergebnis ist, dass der zufällige Wald der beste ist. Als nächstes passen wir die Parameter des zufälligen Gesamtstrukturmodells an.

5. Parametereinstellung

Verwenden Sie die Rastersuche (GridSearchCV) in scikit-learn, um die Parameter anzupassen. Die Rastersuche wertet die angegebenen Parameter in allen Mustern aus und findet die optimale Kombination von Parametern. Da jedoch alle Muster ausgewertet werden, dauert der Vorgang umso länger, je mehr Parameter Sie haben. Überprüfen Sie die Random Forest-Dokumentation (https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) und passen Sie die folgenden Parameter an:

Parameter Muster
criterion gini / entropy
n_estimators 25 / 100 / 500 / 1000 / 2000
min_samples_split 0.5 / 2 / 4 / 10
min_samples_leaf 1 / 2 / 4 / 10
bootstrap Ture / False

Sie können eine Rastersuche durchführen, indem Sie "Modellbewertung" durch die folgende "Rastersuche" ersetzen.

Rastersuche


from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
###############################################
#Probieren Sie LogisticRegression-Parameter mit der Rastersuche aus
# Tuning LogisticRegression parameters with grid search
###############################################
pipe_svc = RandomForestClassifier(random_state=1)

param_grid = {'criterion':['gini','entropy'],
			  'n_estimators':[25, 100, 500, 1000, 2000],
			  'min_samples_split':[0.5, 2,4,10],
			  'min_samples_leaf':[1,2,4,10],
			  'bootstrap':[True, False]
			  }

grid = GridSearchCV(estimator=RandomForestClassifier(random_state=1), param_grid=param_grid)
grid = grid.fit(x_train, y_train)

print(grid.best_score_)
print(grid.best_params_)

Das Ergebnis ist wie folgt. In meiner Umgebung dauerte die Ausführung der Rastersuche ungefähr 10 Minuten.

Raster-Suchergebnisse


0.8105939004815409
{'bootstrap': False, 'criterion': 'entropy', 'min_samples_leaf': 10, 'min_samples_split': 2, 'n_estimators': 100}

6. Bei Kaggle einreichen

Lassen Sie uns die Parameter angeben, die durch Rastersuche, Lernen und Vorhersagen eingestellt wurden. Schreiben Sie den Code "Trainingsdaten, Testdatenerstellung" und "Rastersuche" wie folgt um, um das Lernen und die Vorhersage durchzuführen.

Lernen, Vorfreude


##############################
#Ein Modell bauen
# Model building
##############################
from sklearn.ensemble import RandomForestClassifier

#Generieren Sie ein Modell
# Generate a model
model = RandomForestClassifier(n_estimators=100, \
                               criterion='entropy', \
                               min_samples_split=2, \
                               min_samples_leaf=10, \
                               bootstrap=False, \
                               random_state=1)

##############################
#Lernen
# Trainig
##############################
y = numpy.ravel(y)
model.fit(x, y)

# test.CSV konvertieren
# convert test.csv
##############################
# test.Laden Sie csv
# Load test.csv
df_test = pandas.read_csv('/kaggle/input/titanic/test.csv')

#Tarif Nan umrechnen
# Convert Fare Nan to 0 
df_test = df_test.fillna({'Fare':0})

# 'PassengerId'Extrahieren(Mit dem Ergebnis kombinieren)
# Extract 'PassengerId'(To combine with the result)
df_test_index = df_test[['PassengerId']]

# 'Pclass', 'Sex', 'Fare'Extrahieren
# Extract 'Pclass', 'Sex', 'Fare'
df_test = df_test[['Pclass', 'Sex', 'Fare']]

#Standardisierung
# Standardize
df_test_std = pandas.DataFrame(standard.transform(df_test[['Pclass', 'Fare']]), columns=['Pclass', 'Fare'])
df_test['Pclass'] = df_test_std['Pclass']
df_test['Fare'] = df_test_std['Fare']

#Etikettencodierung
# Label Encoding
df_test ['Sex'] = encoder_sex.transform(df_test ['Sex'].values)

##############################
#Ergebnisse vorhersagen
# Predict results
##############################
x_test = df_test.values
y_test = model.predict(x_test)

#Kombinieren Sie das Ergebnis mit dem DataFrame der PassengerId
# Combine the data frame of PassengerId and the result
df_output = pandas.concat([df_test_index, pandas.DataFrame(y_test, columns=['Survived'])], axis=1)

# result.Schreiben Sie csv in das aktuelle Verzeichnis
# Write result.csv to the current directory
df_output.to_csv('result.csv', index=False)

Beschreiben Sie die obigen Informationen in der Kaggle-Umgebung. Führen Sie "Alle ausführen" aus und überprüfen Sie, ob result.csv erstellt wurde.

Senden Sie mit "Commit" ⇒ "Open Version" ⇒ "Submit to Competition". 20191229_01.png

Die Punktzahl ist jetzt "0,77511".

7. Zusammenfassung

Dieses Mal konnte ich die Punktzahl ein wenig erhöhen, indem ich 5 Modelltypen verglich und die Parameter abstimmte. Nächstes Mal möchte ein geeigneteres Modell aus verschiedenen Modellen von Scikit-Learn finden.

Geschichte

29.12.2019 Erstausgabe veröffentlicht 2020/01/01 Nächsten Link hinzufügen 2020/01/03 Kommentare zur Quelle korrigiert

Recommended Posts

Wählen Sie Modelle von Kaggles Titanic (kaggle ④)
Vorhersage der Titanic von Kaggle mit Keras (kaggle ⑦)
Überprüfen Sie die Rohdaten mit Kaggles Titanic (kaggle ⑥)
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
Überprüfen Sie die Korrelation mit Kaggles Titanic (kaggle③)
Probieren Sie alle Modelle des Scikit-Lernens mit Kaggles Titanic (kaggle ⑤) aus.
Fordern Sie die Kaggle Titanic heraus
Probieren Sie Kaggles Titanic-Tutorial aus
Lassen Sie uns die Überlebenden von Kaggles Hello World, Titanic, durch logistische Regression vorhersagen.
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Lassen Sie uns die Überlebenden von Kaggles Hello World, Titanic durch logistische Regression vorhersagen - Vorhersage / Bewertung
Kaggle Tutorial Titanic Genauigkeit 80,9% (Top 7% 0,80861)
[Für Kaggle-Anfänger] Titanic (LightGBM)
Versuchen Sie es mit Kaggle leicht maschinell