[PYTHON] Annäherungserklärung für Anfänger, um in Kaggle Titanic_1 unter den besten 1,5% (0,83732) zu sein

1. Was ist Kaggle?

Eine Website, auf der Sie Ihre Fähigkeiten testen können, indem Sie mithilfe der Datenanalyse um die Lösung verschiedener Probleme konkurrieren. Sie können einen Datensatz abrufen und die Erklärungen anderer Personen (Kernel) anzeigen, um die Datenanalyse zu studieren.

2. Was ist Titanic?

Einer von Kaggles Wettbewerben. Es wird von vielen Anfängern als Tutorial verwendet. Sagen Sie voraus, welche Passagiere auf der Titanic überlebt haben. Das Thema ist, das Überleben der anderen 418 Personen aus den Passagierdaten für 891 Personen vorherzusagen.

3. 3. Was ist diesmal zu tun?

Wir werden Techniken für Anfänger bis zu einem Einreichungswert von 0,83732 (entspricht den besten 1,5%) unter Verwendung einer zufälligen Gesamtstruktur konsistent erklären. Dieses Mal werde ich erklären, bis die eingereichte Punktzahl 0,78468 erreicht. Nächstes Mal erhöhte die Punktzahl auf 0,81339, und Nächstes Mal entspricht dem oberen Wert von 1,5%. Die Einreichungspunktzahl beträgt 0,83732. Der gesamte verwendete Code wird auf [Github] veröffentlicht (https://github.com/shiroino11111/taitanic-0.83732-). Der diesmal verwendete Code ist titanisch (0,83732) _1.

4. Codedetails

Importieren Sie die erforderlichen Bibliotheken


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline,make_pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn import model_selection
from sklearn.model_selection import GridSearchCV
import warnings
warnings.filterwarnings('ignore')

Lesen Sie CSV und überprüfen Sie den Inhalt


#Lesen Sie CSV
train= pd.read_csv("train.csv")
test= pd.read_csv("test.csv")

#Datenintegration
dataset = pd.concat([train, test], ignore_index = True)

#Zur Einreichung
PassengerId = test['PassengerId']

#Überprüfen Sie bis zum dritten Inhalt des Zuges
train.head(3)

image.png

Eine kurze Beschreibung jeder Spalte lautet wie folgt.

· PassengerId - Eindeutige ID der Passagieridentifikation ・ Überlebt - Überlebensflagge (0 = Tod, 1 = Überleben) ・ Klasse - Ticketklasse · Name - Name des Passagiers ・ Geschlecht - Geschlecht (männlich = männlich, weiblich = weiblich) ・ Alter - Alter · SibSp - Anzahl der Geschwister / Ehepartner an Bord der Titanic · Parch - Anzahl der Eltern / Kinder auf der Titanic ・ Ticket - Ticketnummer ・ Tarif - Tarif ・ Kabine - Zimmernummer ・ Eingeschifft - Abfahrtsort (Hafen auf der Titanic)

Ich werde auch eine kurze Beschreibung jeder Variablen geben. pclass = Ticketklasse 1 = Oberschicht (reich) 2 = Zwischenklasse (allgemeine Klasse) 3 = Unterschicht (Arbeiterklasse)

Eingeschifft = Die Definition jeder Variablen lautet wie folgt C = Cherbourg Q = Queenstown S = Southampton NaN stellt einen Datenverlust dar. (In der obigen Tabelle sehen Sie zwei NaNs in der Kabine.) Lassen Sie uns die Gesamtzahl der fehlenden Daten überprüfen.


#Überprüfen Sie die Anzahl der fehlenden Daten
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()

Age 263 Cabin 1014 Embarked 2 Fare 1 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64

Mit Cabin können Sie sehen, dass bis zu 1014 Daten fehlen. Als nächstes überprüfen wir die statistischen Gesamtdaten.


#Überprüfen Sie die statistischen Daten
dataset.describe()

2020-01-08.png Überprüfen Sie zunächst die Genauigkeit, indem Sie die fehlenden Daten durch den Medianwert usw. ersetzen.


#Kabine ist vorübergehend ausgeschlossen
del dataset["Cabin"]

# Age(Alter)Und Fahrpreis(Gebühr)Ist der Medianwert von jedem, eingeschifft(Ausgangspunkt)Ist S.(Southampton)Ersatz
dataset["Age"].fillna(dataset.Age.mean(), inplace=True) 
dataset["Fare"].fillna(dataset.Fare.mean(), inplace=True) 
dataset["Embarked"].fillna("S", inplace=True)

#Überprüfen Sie die Gesamtzahl der fehlenden Daten
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()

Age 0 Embarked 0 Fare 0 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64

Es fehlen keine Daten. Die 418 von Survived stimmen mit den 418 in den Testdaten überein, daher sollte dies kein Problem sein. Organisieren Sie Ihre Daten für die Prognose. Verwenden Sie zuerst P-Klasse, Geschlecht, Alter, Tarif, Eingeschifft. Es konvertiert es auch in eine Dummy-Variable, damit die Maschine es vorhersagen kann. (Derzeit gibt es zwei Sex-Elemente, männlich und weiblich. Auf diese Weise werden sie jedoch in sex_male und sex_female konvertiert. Für männlich wird sex_male 1 zugewiesen, und wenn sie unterschiedlich sind, wird 0 zugewiesen.)

#Extrahieren Sie nur die zu verwendenden Variablen
dataset1 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked']]
#Erstellen Sie eine Dummy-Variable
dataset_dummies=pd.get_dummies(dataset1)
dataset_dummies.head(3)

2020-01-08 (1).png

Lass die Maschine lernen. Erstellen Sie das beste Vorhersagemodell, indem Sie die n_estimators und max_depth des RandomForestClassifier ändern.

#Zerlegen Sie Daten in Zug und Test
#( 'Survived'Existiert im Zug,Nicht testen)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]

#Trennen Sie Zugdaten in Variablen und korrigieren Sie die Antworten
X = train_set.as_matrix()[:, 1:] #Variablen nach Pclass
y = train_set.as_matrix()[:, 0] #Richtige Antwortdaten

#Erstellen eines Vorhersagemodells
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Versuchen Sie 20-30 in Schritten
              'classify__max_depth':list(range(3, 10, 1))} #Versuchen Sie 3-10 in Schritten
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")

{'classify__max_depth': 8, 'classify__n_estimators': 23} 0.8316498316498316 Wenn max_depth 8 und n_estimators 23 ist, stellt sich heraus, dass es das beste Modell mit einer Vorhersagegenauigkeit von 83% für Trainingsdaten ist. Dieses Modell sagt Testdaten voraus und erstellt eine Übermittlungsdatei (submit1.csv).

#Vorhersage von Testdaten
pred = grid.predict(test_set)

#Erstellen einer CSV-Datei für die Kaggle-Übermittlung
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission1.csv", index=False)

Als ich es tatsächlich einreichte, war die Punktzahl 0,78468. Plötzlich kam eine hohe Vorhersage heraus.

Fügen Sie diesmal Parch (Anzahl der Eltern / Kinder an Bord) und SibSp (Anzahl der Geschwister / Ehepartner an Bord) hinzu, um eine Vorhersage zu treffen.

#Extrahieren Sie die zu verwendenden Variablen
dataset2 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked', 'Parch', 'SibSp']]

#Erstellen Sie eine Dummy-Variable
dataset_dummies = pd.get_dummies(dataset2)
dataset_dummies.head(3)

2020-01-08 (3).png

#Zerlegen Sie Daten in Zug und Test
#( 'Survived'Existiert im Zug,Nicht testen)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]

#Trennen Sie Zugdaten in Variablen und korrigieren Sie die Antworten
X = train_set.as_matrix()[:, 1:] #Variablen nach Pclass
y = train_set.as_matrix()[:, 0] #Richtige Antwortdaten

#Erstellen eines Vorhersagemodells
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Versuchen Sie 20-30 in Schritten
              'classify__max_depth':list(range(3, 10, 1))} #Versuchen Sie 3-10 in Schritten
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")

#Vorhersage von Testdaten
pred = grid.predict(test_set)

#Erstellen einer CSV-Datei für die Kaggle-Übermittlung
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission2.csv", index=False)

{'classify__max_depth': 7, 'classify__n_estimators': 25} 0.8417508417508418 Wenn max_depth 7 und n_estimators 25 ist, stellt sich heraus, dass es das beste Modell mit einer Vorhersagegenauigkeit von 84% für Trainingsdaten ist. Obwohl es genauer ist als zuvor, fiel die Punktzahl auf 0,76076, als ich die Testdatenvorhersage (Submission2.csv) für dieses Modell einreichte. Es scheint, dass es zu Überlernen geführt hat. Es scheint besser, Parch (Anzahl der Eltern / Kinder an Bord) und SibSp (Anzahl der Geschwister / Ehepartner an Bord) nicht zu verwenden.

5. Zusammenfassung

Ich habe eine Vorhersage für Kaggles Tutorial-Wettbewerb Titanic gemacht. Die höchste eingereichte Punktzahl war 0,78468. Nächstes Mal visualisiert die Daten und erklärt den Vorgang dem Einreichungswert 0,83732.

Recommended Posts

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
Kaggle Tutorial Titanic Know-how, um in den Top 2% zu sein
Herausforderungen des Titanic-Wettbewerbs für Kaggle-Anfänger
Es ist okay, über die Titanic zu stolpern! Einführung in die Kaggle-Strategie für Super-Anfänger
Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial
[Für Kaggle-Anfänger] Titanic (LightGBM)
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
Kaggle Tutorial Titanic Know-how, um in den Top 2% zu sein
Fordern Sie die Kaggle Titanic heraus
Probieren Sie Kaggles Titanic-Tutorial aus
Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
[Für Kaggle-Anfänger] Titanic (LightGBM)
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
Wählen Sie Modelle von Kaggles Titanic (kaggle ④)
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
[Kaggle für Super-Anfänger] Titanic (Logistic Return)
Wechseln Sie das zu ladende Modul für jede Ausführungsumgebung in Python
Der schnellste Weg für Anfänger, um Python zu beherrschen
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Grundlegende Geschichte der Vererbung in Python (für Anfänger)
Tag 66 [Einführung in Kaggle] Die einfachste Titanic-Vorhersage
So beschränken Sie die API, die in der gemeinsam genutzten Linux-Bibliothek in C-Sprache veröffentlicht werden soll
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen
Geben Sie für jede Datei die angegebene Tabelle der Oracle-Datenbank in Python in Excel aus
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
So ermitteln Sie die Anzahl der Stellen in Python
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
[Für Anfänger] Installieren Sie das Paket in der Anaconda-Umgebung (Janome)
Überprüfen Sie, ob in Java BigQuery-Tabellen vorhanden sind
[Für Anfänger] Quantifizieren Sie die Ähnlichkeit von Sätzen mit TF-IDF
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Alles für Anfänger, um maschinelles Lernen zu können
[Für Anfänger von Wettkampfprofis] Drei Eingabemethoden, die Sie beim Starten der Wettkampfprogrammierung mit Python beachten sollten
Was scheint eine Vorlage für den Standardeingabe-Teil des Competition Pro in Python3 zu sein
So finden Sie die optimale Anzahl von Clustern für k-means
Testcode, um auf der Seite nach defekten Links zu suchen
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
■ Kaggle-Übung für Anfänger - Einführung von Python - von Google Colaboratory
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
[Erklärung für Anfänger] Einführung in die Pooling-Verarbeitung (erklärt in TensorFlow)
Ermitteln Sie die Anzahl der Vorkommen für jedes Element in der Liste
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden
[Python] Die größten Schwächen und Nachteile von Google Colaboratory [Für Anfänger]
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Aktivieren Sie die Schaltfläche Überprüfen in Tkinter, damit der Eintrag bearbeitet werden kann
So entfernen Sie die "Tags müssen ein Array von Hashes sein." Fehler in Qiita API
[Für IT-Anfänger] Was tun, wenn der Befehl rev nicht mit Git Bash verwendet werden kann?
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
Erster Kaggle (Kaggle ①)
[Für Anfänger] Kaggle-Übung (Merucari)
Übersicht über Docker (für Anfänger)
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Anfänger] So implementieren Sie O'reilly-Beispielcode in Google Colab
So ändern Sie die Protokollstufe von Azure SDK für Python
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Machen Sie sich mit der Pipeline von spaCy vertraut (wollen Sie es sein)
Wie Sie die interne Struktur eines Objekts in Python kennen
django kann nicht in der Entwicklungsumgebung von pipenv + pyenv installiert werden