--Background: Ich habe mich endlich bei Kaggle registriert, also habe ich es vorerst versucht. (langsam)
Holen Sie sich Titanic Überlebensdaten
Sobald Sie Kaggle starten, erhalten Sie die Daten aus dem Beispielwettbewerb. --Erstellen Sie ein Notizbuch mit Kaggle Kernal --Klicken Sie auf der Wettbewerbsseite auf "Neues Notizbuch".
Daten lesen
Wenn Sie auf der Wettbewerbsseite ein Notizbuch erstellen, sollte das erste Feld folgendermaßen aussehen. Führen Sie es einfach aus.
Lesen Sie CSV-Daten und speichern Sie sie als Datenrahmen
train_csv = pd.read_csv('../input/titanic/train.csv', sep=',')
train_csv.head()
--Überprüfen Sie die Übersicht der Daten
#Datendimension
train_csv.shape
#Ausgabeergebnis
(891, 12)
Es scheint Daten für 891 Passagiere zu enthalten.
#Anzahl der fehlenden Werte in jeder Zeile
train_csv.isnull().sum()
#Ausgabeergebnis
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
Es gibt viele fehlende Werte für Alter und Kabine.
Die Details der Daten sind auf der Wettbewerbsseite beschrieben, daher werde ich sie weglassen. Diese Daten sagen voraus, wer von den Eigenschaften der Titanic-Passagiere überleben kann. Es gibt verschiedene Attribute des Passagiers, aber wir werden entscheiden, welches Attribut verwendet werden soll und wie es bei der Analyse der Daten verwendet werden soll.
Ob der Passagier überlebt hat oder nicht, wird in Survived bei 0/1 gespeichert. 0 bedeutet Tod, 1 bedeutet Überleben. Wie viele Menschen haben überlebt?
#Überlebenswahrscheinlichkeit
train_csv['Survived'].mean()
#Ausgabeergebnis
0.3838383838383838
Es scheint, dass etwas weniger als 40% der Menschen überlebt haben.
train_csv['Survived'].value_counts()
#Ausgabeergebnis
0 549
1 342
Name: Survived, dtype: int64
In Bezug auf die Anzahl der Personen sieht es so aus.
Betrachten wir nun die Beziehung zwischen jedem Attribut und Survived.
Enthält ganzzahlige Werte von 1-3. Es scheint, dass je kleiner die Zahl, desto besser die Klasse. Wenn ich mir den Film anschaue, denke ich, dass die Passagiere der oberen Klasse bevorzugt auf dem Rettungsboot waren. Lassen Sie uns mit Survived eine Kreuztabelle erstellen und die Auswirkungen [* 1] sehen (https://qiita.com/anWest/items/f3d432e0e02f070ec107#4-%E5%82%99%E8%80%83).
pd.crosstab(train_csv['Pclass'], train_csv['Survived'])
Die Sterblichkeitsrate von Passagieren in der 3. Klasse ist überwiegend höher als in anderen Klassen. Im Gegenteil, Passagiere der 1. Klasse haben eine hohe Überlebensrate. Denn je besser die Klasse, desto höher die Überlebensrate. Dieses Mal werde ich sie also so verwenden, wie sie für das Modell ist.
2.2. Name Es mag etwas damit zu tun haben, aber ich werde es dieses Mal nicht verwenden, weil es schwierig ist, Ursache und Wirkung zu erklären. (Es kann etwas geben, wenn nur der Titel extrahiert wird.)
männlich und weiblich sind so enthalten, wie sie in der Zeichenkette sind. Im Notfall wird das Überleben von Frauen tendenziell priorisiert, so dass auch in diesem Fall mehr Frauen am Leben sind als Männer. Kreuztabelle mit überlebt.
pd.crosstab(train_csv['Sex'], train_csv['Survived'])
Frauen haben viele Überlebende, Männer jedoch nur wenige Überlebende. Also werde ich eine weibliche Puppe machen und sie in das Modell einfügen.
Das Alter wird numerisch eingegeben, es fehlen jedoch einige Werte. In der Analysephase werden die fehlenden Werte ausgeschlossen und verglichen. Im Allgemeinen überleben jüngere Menschen eher. Vergleichen wir daher das Durchschnittsalter toter und überlebender Passagiere. * 2
#Durchschnittsalter der Todesfälle
train_csv[(train_csv['Age'].isnull() == False) & (train_csv['Survived'] == 0)].Age.mean()
#Ausgabeergebnis
30.62617924528302
#Durchschnittsalter der Überlebenden
train_csv[(train_csv['Age'].isnull() == False) & (train_csv['Survived'] == 1)].Age.mean()
#Ausgabeergebnis
28.343689655172415
Die Überlebenden sind jünger. Es fehlen jedoch Werte, die nicht in das Modell aufgenommen werden können. Die schnellste und beliebteste Methode besteht darin, die Daten durch repräsentative Werte (Mittelwert oder Median) zu ergänzen. Dieses Mal werden die fehlenden Werte mit dem Gesamtmittelwert ergänzt und in das Modell aufgenommen.
SibSp enthält die Anzahl der Brüder und Ehepartner, und Parch enthält die Anzahl der Eltern und Kinder. Es scheint, dass Menschen mit vielen Familien es eher finden, also fühle ich mich wie am Leben. Zeichnen wir für jeden Überlebenden und jeden Toten ein SibSp / Parch-Histogramm.
import matplotlib.pyplot as plt
# SibSp
plt.hist([train_csv[train_csv['Survived']==0].SibSp, train_csv[train_csv['Survived']==1].SibSp], label=['Died', 'Survived'])
plt.legend()
#Parch
plt.hist([train_csv[train_csv['Survived']==0].Parch, train_csv[train_csv['Survived']==1].Parch], label=['Died', 'Survived'])
plt.legend()
In beiden Fällen haben 0 Menschen viele Todesfälle, aber selbst 1 Person hat viele Überlebende oder das Gleiche. Eine schmerzhafte Realität für eine Person. Da die Distributionen von SibSp und Parch ähnlich sind, werden wir diesmal Parch als Vertreter verwenden. (Weil das Setzen ähnlicher Variablen eine mehrfache Co-Linearität verursacht) Parch wird von 0 Personen und 1 oder mehr Personen zu einer Dummy-Variablen gemacht und in das Modell eingefügt.
2.6. Ticket Es mag etwas damit zu tun haben, aber ich verstehe die Bedeutung der Zahlen und Buchstaben nicht, daher kann ich nicht erklären, ob es mich betrifft. Also werde ich es dieses Mal nicht benutzen.
Der Betrag ist ein ganzzahliger Wert. Je höher die Person, desto wahrscheinlicher ist es zu überleben.
#der Verstorbene
train_csv[train_csv['Survived']==0].Fare.mean()
#Ausgabeergebnis
22.117886885245877
#Überlebende
train_csv[train_csv['Survived']==1].Fare.mean()
#Ausgabeergebnis
48.39540760233917
Es gab einen großen Unterschied. Schauen wir uns auch die Verteilung an.
plt.hist([train_csv[train_csv['Survived']==0].Fare, train_csv[train_csv['Survived']==1].Fare], label=['Died', 'Survived'], bins=20)
plt.legend()
Es ist ein wenig schwer zu sehen, aber es scheint, dass es mehr Überlebende gibt, wenn der Fahrpreis hoch ist. Also habe ich es einfach in das Modell eingefügt.
2.8. Cabin Da zu viele Werte fehlen, habe ich mich dieses Mal entschieden, sie nicht zu verwenden.
Es wird durch drei Basen dargestellt, in denen Sie eingestiegen sind. Unterschiede in den wohnsitzspezifischen gesundheitlichen und wirtschaftlichen Bedingungen, der Rasse und der Boarding-Zeit in Abhängigkeit vom Boarding-Ort können die Überlebensraten beeinflussen. Es fehlen Werte, diese sind jedoch unbedeutend und werden ignoriert.
pd.crosstab(train_csv['Embarked'], train_csv['Survived'])
Die Zahl der Todesfälle von Passagieren aus S (Southampton) ist groß. Machen wir einen S-Dummy und fügen ihn in das Modell ein.
Warum sind Southampton Passagiere tot? Wenn jemand weiß, lassen Sie es mich bitte wissen.
Lassen Sie uns basierend auf dem Analyseergebnis modellieren.
Die Modellierung selbst ist einfach, aber Sie müssen mit den Variablen arbeiten. So was.
train = pd.DataFrame()
train = train.drop(['Name', 'SibSp', 'Ticket', 'Cabin'] , axis=1) #Nicht verwendete Spalten löschen
#Machen Sie eine weibliche Puppe
train['Female'] = train['Sex'].map(lambda x: 0 if x == 'male' else 1 ).astype(int)
#Ergänzen Sie den fehlenden Alterswert mit dem Durchschnittswert
train['Age'].fillna(train['Age'].mean(), inplace=True)
#Parch macht 0 und mehr Dummies
# Parch=0 wenn 0, Prach>=Wenn 1 1
train['Parch_d'] = train['Parch'].map(lambda x: 0 if x == 0 else 1).astype(int)
#Eingeschifft macht S und andere Dummies
train['Embarked_S'] = train['Embarked'].map(lambda x: 0 if x == 'S' else 1).astype(int)
Dann modellieren.
#Modellgenerierung
from sklearn.linear_model import LogisticRegression
X = train[['Pclass', 'Age', 'Parch_d', 'Fare', 'Female', 'Embarked_S']]
y = train['Survived']
model = LogisticRegression()
result = model.fit(X, y)
Überprüfen Sie zunächst, zu welcher Art von Modell das Modell geworden ist.
#Koeffizient
result.coef_
#Ausgabeergebnis
rray([[-1.02255162e+00, -2.89166539e-02, -7.14935760e-02,
1.19056911e-03, 2.49662371e+00, -4.29002495e-01]]
#Sektion
result.intercept_
#Ausgabeergebnis
array([1.98119965])
Frau (weibliche Puppe) scheint den größten Einfluss zu haben.
Als nächstes wollen wir sehen, ob das erstellte Modell gut ist * 3. Lassen Sie uns zuerst den Entscheidungskoeffizienten ermitteln.
model.score(X, y)
#Ausgabeergebnis
0.792368125701459
Es sieht nicht schlecht aus. Der Entscheidungsfaktor wird auch als R 2 </ sup> bezeichnet, zeigt jedoch, wie gut der vorhergesagte Wert des zuvor erstellten Modells zu den tatsächlichen Daten passt. (Die obigen Werte sind die Werte in den Trainingsdaten) Es wird durch 0 zu 1 dargestellt, und je näher es an 1 liegt, desto besser ist die Vorhersage.
Lassen Sie uns nun die Testdaten vorhersagen und bestätigen. Fahren Sie mit dem Abschnitt Vorhersage fort. → https://qiita.com/anWest/items/cad88fe7b6f26fe86480
Recommended Posts