[PYTHON] Probieren Sie Kaggles Titanic-Tutorial aus

Ich habe Kaggles Titanic-Tutorial ausprobiert. Notieren Sie hier den Code auf dem Jupyter NoteBook, um zu erfahren, wie Sie Pandas und Scikit-Learn verwenden.

Kaggle ist eine Website, die durch maschinelles Lernen basierend auf tatsächlichen Daten um die Punktzahl konkurriert.

Es ist eine großartige Möglichkeit, maschinelles Lernen zu lernen, da es einige Tutorials gibt, die Sie für maschinelles Lernen verwenden können, ohne am Wettbewerb teilnehmen zu müssen.

Weitere Informationen zur Verwendung von Kaggle und zum Titanic-Tutorial [Einführung in Kaggle-Anfänger] Wer wird die Titanic überleben? Ich bezog mich auf.

Mein Code wurde geändert, um mir das Verständnis zu erleichtern, und verweise auf den obigen Artikel.

Wenn Sie sich als Benutzer bei Kaggle registrieren Titanic: Machine Learning from Disaster | Kaggle Sie können die Daten von herunterladen.

Der Algorithmus ist ein Entscheidungsbaum.

Danach, Einfache Installation und Inbetriebnahme von Jupyter Notebook mit Docker (unterstützt auch nbextensions und Scala) --Qiita Ich versuche es in der Umgebung von Jupyter Notebook vorbereitet nach.

In dieser Jupyter-Umgebung können Sie mit einem Browser auf Port 8888 zugreifen und das Jupyter-Notizbuch verwenden. Sie können eine neue Notiz öffnen, indem Sie oben rechts auf Neu> Python 3 klicken.

Datenaufbereitung

import numpy as np
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

train und test sind DataFrame-Objekte.

image.png

Verketten Sie die Daten einmal, um die Daten gemeinsam mit "Zug" und "Test" vorzuverarbeiten. Ich werde eine Flagge setzen, damit ich sie später wieder teilen kann. Außerdem ist die Spalte "Überlebt" nur in "Zug" enthalten. Löschen Sie sie daher einmal.

train["is_train"] = 1
test["is_train"] = 0
data = pd.concat([train.drop(columns=["Survived"]), test])

train.drop (column = [" Survived "]) gibt ein neues DataFrame-Objekt mit entfernten Spalten zurück. Es gibt ein neues Objekt zurück, sodass die Spalte im ursprünglichen "Zug" verbleibt. Dies ist auch dann der Fall, wenn Sie "train.drop ([" Survived "], axis = 1)" schreiben. axis = 1 ist ein Flag zum Löschen von Spalten anstelle von Zeilen. Ersteres ist jedoch leichter zu verstehen.

pd.concat gibt einen neuen DataFrame zurück, der eine Verkettung mehrerer DataFrames darstellt. Übrigens, wenn Sie "axis = 1" an "pd.concat" übergeben, wird es horizontal verbunden.

Infolge der Verkettung werden die Daten so sein. 1309 Datenzeilen.

image.png

Unterstützt fehlende Daten

Überprüfen Sie den Status fehlender Daten. Der im obigen Bildschirm als "NaN" angezeigte Teil fehlt in dem Teil, der in der ursprünglichen CSV-Datei leer war.

data.isnull().sum()

image.png

Mit dem folgenden Code können Sie sehen, über welche Daten Sie verfügen und welchen Medianwert Sie haben.

data["Age"].unique()
data["Age"].median()

Ich werde den Medianwert in den fehlenden Teil des Elements "Alter" setzen.

data["Age"] = data["Age"].fillna(data["Age"].median())

Überprüfen Sie, welche Daten in "Eingeschifft" sind. Sie können die Anzahl der Datensätze für jede Daten überprüfen.

data["Embarked"].value_counts()

image.png

Es scheint, dass "S" den größten Teil von "Eingeschifft" einnimmt, also werde ich "S" in den fehlenden Teil setzen.

data["Embarked"] = data["Embarked"].fillna("S")
data.isnull().sum()

Konvertieren Sie Zeichenfolgendaten in Zahlen

Als nächstes konvertieren Sie die Elemente "Sex" und "Eingeschifft", die Zeichenfolgen sind, in Zahlen.

Es gab nur 3 Muster von S, C und Q in "Eingeschifft", daher würde ich es gerne so konvertieren. Dies wird als One-Hot-Codierung bezeichnet.

Embarked
S
S
C
Q

Embarked_C Embarked_Q Embarked_S
0 0 1
0 0 1
1 0 0
0 1 0

One-Hot-Codierung kann mit einer Funktion namens "pd.get_dummies" durchgeführt werden. Der Code "pd.get_dummies (data [" Embarked "], prefix =" Embarked ")]" erzeugt einen dreispaltigen DataFrame mit den Namen "Embarked_S", "Embarked_C" und "Embarked_Q". Eine der drei Spalten ist 1 und die anderen sind 0. Verketten Sie dies horizontal mit den Originaldaten und entfernen Sie die ursprüngliche Spalte "Eingeschifft".

data = pd.concat([data, pd.get_dummies(data["Embarked"], prefix="Embarked")], axis=1).drop(columns=["Embarked"])

Da "Sex" nur "männlich" und "weiblich" hatte, ist es nicht erforderlich, zwei Spalten zu haben, nur eine Spalte mit 0, 1 ist ausreichend.

Sex
male
female
female

Sex
1
0
0

Es scheint, dass durch Hinzufügen der Option drop_first = True zu pd.get_dummies die erste Spalte entfernt wird und nur eine Spalte übrig bleibt.

data["Sex"] = pd.get_dummies(data["Sex"], drop_first=True)

Von den beiden von pd.get_dummies erzeugten Spalten war die erste Spalte zufällig weiblich, also war männlich 1 und weiblich 0. Ich denke es ist egal welches.

Das Ergebnis sind solche Daten.

image.png

Teilen Sie die vorverarbeiteten "Daten" erneut in Trainingsdaten und Verifizierungsdaten und beschränken Sie sich auf die diesmal verwendeten Spalten.

feature_columns =["Pclass", "Sex", "Age", "Embarked_C", "Embarked_Q", "Embarked_S"]
feature_train = data[data["is_train"] == 1].drop(columns=["is_train"])[feature_columns]
feature_test = data[data["is_train"] == 0].drop(columns=["is_train"])[feature_columns]

Die Zielvariable war nicht in "Daten" enthalten, extrahieren Sie sie also aus dem ersten "Zug".

target_train = train["Survived"]

Lernen

Lerne das Modell.

from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(feature_train, target_train)

Referenz sklearn.tree.DecisionTreeClassifier — scikit-learn 0.21.3 documentation

Lassen Sie uns die richtige Antwortrate mit den Trainingsdaten sehen.

from sklearn import metrics
pred_train = model.predict(feature_train)
metrics.accuracy_score(target_train, pred_train)

Ich habe "0.9001122334455668". 90% scheinen die richtige Antwort zu sein.

Auswertung

Registrieren wir das Inferenzergebnis in Kaggle und werten es aus.

Speichern Sie zunächst das Schätzergebnis mit den Überprüfungsdaten in "my_prediction.csv".

pred_test = model.predict(feature_test)
my_prediction = pd.DataFrame(pred_test, test["PassengerId"], columns=["Survived"])
my_prediction.to_csv("my_prediction.csv", index_label=["PassengerId"])

Die erste Zeile der CSV-Datei ist die Kopfzeile "PassengerId, Survived".

Wenn Sie diese Datei auf die Website von Kaggle hochladen, erhalten Sie eine Punktzahl.

image.png

Es war "0,74641".

Recommended Posts

Probieren Sie Kaggles Titanic-Tutorial aus
Probieren Sie alle Modelle des Scikit-Lernens mit Kaggles Titanic (kaggle ⑤) aus.
Kaggle Tutorial Titanic Genauigkeit 80,9% (Top 7% 0,80861)
Wählen Sie Modelle von Kaggles Titanic (kaggle ④)
Vorhersage der Titanic von Kaggle mit Keras (kaggle ⑦)
Probieren Sie das offizielle Django-Tutorial von Anfang an aus
Überlebensvorhersage unter Verwendung des titanischen neuronalen Netzes von Kaggle [80,8%]
Überprüfen Sie die Rohdaten mit Kaggles Titanic (kaggle ⑥)
Überlebensvorhersage mit Kaggles Titanic XG Boost [80,1%]
Überprüfen Sie die Korrelation mit Kaggles Titanic (kaggle③)
Datenanalyse vor der Erzeugung der Titanic-Features von Kaggle