Dieser Artikel ist der 17. Tag von Akatsuki Adventskalender 2016.
Freut mich, dich kennenzulernen. Mein Name ist @chosty und ich bin Serveringenieur bei Akatsuki Co., Ltd. Kürzlich habe ich gesagt, dass "Arbeit schlecht für meine Gesundheit ist" bei der Arbeit.
Persönlich interessiere ich mich für maschinelles Lernen und Datenanalyse und arbeite von Zeit zu Zeit daran. Bis jetzt habe ich diesen Bereich mit R gemacht, aber es gab einen Ort, an dem ich Python berühren wollte, also werde ich einen Artikel schreiben, der besagt, dass ich ein kurzes Tutorial mit Kaggle ausprobiert habe.
Dies ist eine Website für Datenanalyse-Wettbewerbe. Die offizielle Website ist hier. Datensätze und Themen (Zwecke) werden von Unternehmen und Forschern präsentiert und konkurrieren um Punktzahlen. Es scheint, dass Sie, wenn Sie eine gute Punktzahl geben, einen Preis erhalten und über die Rekrutierung sprechen. Das ist eine gute Geschichte. Im vergangenen Jahr sprach Recruit über den ersten Wettbewerb eines japanischen Unternehmens. Es scheint, dass zu diesem Zeitpunkt etwa 340.000 Datenanalysten bei Kaggle registriert waren.
Es ist ein solcher Service, aber zusätzlich zu den von Unternehmen und Forschern angebotenen Wettbewerben gibt es auch Lernwettbewerbe von Kaggle. Dieses Mal werde ich einen von ihnen ausprobieren und das Problem der Überlebensvorhersage der Titanic angehen. https://www.kaggle.com/c/titanic
Das Titanic Survivor Prediction Problem sagt das Leben oder den Tod einer Person an Bord der Titanic anhand vorgegebener Daten voraus, und das war's.
Laden Sie train.csv
und test.csv
von der oben genannten Website herunter und sehen Sie, welche Funktionen angeboten werden.
Funktionswert | Bedeutung |
---|---|
PassengerID | Nur ein Ausweis von Kaggle |
Survived | Hast du überlebt?(0 = NO, 1 = Yes) |
Pclass | Raumklasse |
Name | Name |
Sex | Sex |
Age | Alter |
SibSp | Anzahl der Brüder und Ehepartner, die zusammen reiten |
Parch | Anzahl der Eltern und Kinder, die zusammen fahren |
Ticket | Ticketnummer |
Fare | Passagiertarif |
Cabin | Kabine |
Embarked | Einstiegsort |
Aus den obigen Merkmalsgrößen scheint es ein Fluss zu sein, nach einem zu suchen, der für die Vorhersage effektiv zu sein scheint, und daraus ein Vorhersagemodell zu erstellen. Wenn Sie ein Modell erstellen, ist es gut, eine Hypothese zu erstellen und zu untersuchen. Zum Beispiel kann es gut sein zu glauben, dass Menschen, die sich in erstklassigen Zimmern befanden, eine hohe Überlebensrate haben oder dass viele Familien zusammen fahren und dass Männer eine niedrige Überlebensrate haben. Darüber hinaus halte ich es diesmal für sinnvoller, die nicht funktionierenden Funktionen zu entfernen und etwas hinzuzufügen, das anscheinend von Ihnen selbst funktioniert. Diesmal geht es jedoch darum, es schnell zu machen, also werde ich es seitwärts legen. "Survived" ist übrigens natürlich nur in "train.csv" verfügbar.
Von hier aus nehmen wir die Daten mit Python auf und sehen, welche Werte gespeichert sind.
##Vorbereitung
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
train = pd.read_csv("train.csv")
train.head() #Geben Sie die ersten 5 Datenzeilen aus
train.info() #Datentypbestätigung
train.isnull().sum() #Bestätigung fehlender Werte
train.describe() #Zusammenfassung
Ein solches Ergebnis wird zurückgegeben.
jupyter bequem, das beste.
Da die Bedeutung von Survived 0,38 ist, ist ersichtlich, dass etwa 60% der Menschen gestorben sind. Auch wenn vorerst nicht jeder hilft, wird die Genauigkeit so bleiben, wie sie ist.
Ich möchte die fehlenden altersbedingten Werte ausgleichen. Es gibt verschiedene ergänzende Methoden, und es wäre besser, aus der Ähnlichkeit mit anderen Datensätzen zu entscheiden oder aus anderen Merkmalsgrößen zu schätzen, diese jedoch vorerst durch den Medianwert zu ersetzen. Ich dachte darüber nach, das Geschlecht und den Einstiegsort in einen Dummy zu ändern und die Kabine fallen zu lassen, weil zu viele Werte fehlen, also werde ich es tun. Ich würde gerne mit dem Namen umgehen, aber es ist problematisch, also werde ich ihn vorerst fallen lassen. Tickets sind auch ein Hindernis, also lassen Sie sie fallen. Löschen Sie den Datensatz mit dem fehlenden Wert am Ende. Wenn die Genauigkeit schlecht ist, ist es gut, nützliche Funktionen aus den hier abgelegten Informationen zu erstellen.
##Datenformung
train.Age = train.Age.fillna(train.Age.mean())
train = train.replace("male",0).replace("female",1).replace("C",0).replace("Q",1).replace("S",2)
train = train.drop(["Name", "Ticket", "Cabin", "PassengerID"], axis=1)
train = train.dropna()
train_data = train.values
Betrachtet man den Korrelationskoeffizienten in diesem Zustand, so ist er wie folgt.
Das Geschlecht hat die höchste Korrelation mit Survived, gefolgt von der Verpflegung, der Anzahl der Eltern und Kinder und der Klasse der Gästezimmer. Ist der Boarding-Tarif positiv korreliert, aber die Gästezimmerklasse negativ korreliert? (Raumklassen sind 1 = 1., 2 = 2., 3 = 3 ..) Ich dachte, dass die Anzahl der Features zu gering war, aber es gab einige Features, die korreliert waren. Deshalb werde ich ein Modell mit den formatierten Daten erstellen, wie sie sind.
Dieses Mal werde ich ein Modell mit Random Forest erstellen und das Leben und den Tod der Person in den Testdaten vorhersagen. Ich denke, es ist einfach, Random Forest zu verstehen, wenn man sich Mr. Hamadas Materialien ansieht. http://www.slideshare.net/hamadakoichi/randomforest-web Es ist gut, die ursprüngliche Arbeit zu treffen, aber es gibt ziemlich viel und ich möchte es implementieren! Ich möchte mehr wissen! Wenn Sie keine Person sind, müssen Sie es nicht lesen. Wie auch immer, wenn Sie verärgert sind, sollten Sie viele Entscheidungsbäume treffen und eine Mehrheitsentscheidung treffen, oder so ähnlich.
##Modellbau
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100)
forest = forest.fit(train_data[0::,1::],train_data[0::,0])
##Prognose
test = pd.read_csv("test.csv")
ids = test["PassengerId"].values
test.Age = test.Age.fillna(test.Age.mean())
test.Fare = test.Fare.fillna(test.Fare.mean())
test = test.replace("male",0).replace("female",1).replace("C",0).replace("Q",1).replace("S",2)
test = test.drop(["Name", "Ticket", "Cabin", "PassengerId"], axis=1)
test_data = test.values
output = forest.predict(test_data)
##Export
import csv
output_file = open("output.csv", "w")
file = csv.writer(output_file)
file.writerow(["PassengerId","Survived"])
file.writerows(zip(ids, output.astype(np.int64)))
output_file.close()
Wenn Sie die exportierte CSV an kaggle senden, wird die Punktzahl ausgegeben. So was.
Dies war ungefähr 75% genau. Es ist genauer als die Vorhersage, dass jeder gestorben ist, aber es ist nicht so hoch und es scheint vernünftig zu sein, selbst wenn Sie es richtig machen. Sie können sehen, dass ich auf die Leiter schaue, aber ich schätze alle Top 14 Leute. Wie kann ich das machen ...
Es ist ziemlich einfach einzureichen, und natürlich können Sie Ihre eigene Punktzahl sehen, und es ist schön, sie mit den Punktzahlen anderer Leute vergleichen zu können. Es gibt unzählige Beiträge in den Foren. Schauen Sie sich also meine Vorhersagemethode an! !! !! Es macht Spaß und ist lehrreich zu sehen. Dieses Mal war es mein Ziel, schnell ein Modell zu erstellen, es vorherzusagen und einzureichen, aber ich wünschte, ich hätte etwas mehr Zeit gebraucht. Vielleicht sollten Sie für jede Funktion etwas planen oder tun. Mein Eindruck ist also, dass ich weiterhin Zeit finden und ein bisschen mehr versuchen werde. Es scheint gut, andere Herausforderungen auszuprobieren.
Nachdem ich die Daten für dieses Tutorial etwas detaillierter analysiert hatte, dachte ich, dass sich die Genauigkeit verbessern würde, wenn die folgenden Punkte berücksichtigt würden. Ich werde versuchen, Zeit zu finden.
Das Ende