Jupiter-Notizbuch https://github.com/spica831/kaggle_titanic/blob/master/titanic.ipynb
Ich nahm an einem Hackathon teil, um den Preis eines Hauses in Kaggle zu schätzen Ich konnte es nicht rechtzeitig lösen, da ich nicht wusste, wie man Python benutzt und wie man es analysiert. Aus Rache haben wir daher das Überleben der Titanic vorhergesagt. https://www.kaggle.com/c/titanic
House Prices: Advanced Regression Techniques https://www.kaggle.com/c/house-prices-advanced-regression-techniques
Aus der Schlussfolgerung ergab sich eine korrekte Antwortrate für die Vorhersage der Titanic von 0,7512.
#Importieren Sie die erforderlichen Pakete
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline
#Wert lesen
df = pd.read_csv("./input/train.csv")
df
Zeigen Sie den Wert an.
Anscheinend werden Zeichenketten für Namen und Geschlechter verwendet. Ist es Geschlecht (Geschlecht) oder Boarding-Rang, da es nicht für die Analyse verwendet werden kann? Da es nur wenige Zeichenmuster wie (eingeschifft) gibt, werden sie durch numerische Werte wie 0, 1 bzw. 2 ersetzt.
Außerdem hat Alter (Alter) einen fehlenden Wert (NaN), sodass alle durch 0 ersetzt wurden.
df.Embarked = df.Embarked.replace(['C', 'S', 'Q'], [0, 1, 2])
#df.Cabin = df.Cabin.replace('NaN', 0)
df.Sex = df.Sex.replace(['male', 'female'], [0, 1])
df.Age = df.Age.replace('NaN', 0)
Schwer zu handhabende Elemente wie Name und Ticketkabine wurden für jede Spalte gelöscht. (schmerzlich)
df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
Alle könnten durch numerische Werte ersetzt werden.
df
Berechnen Sie zuerst den Korrelationskoeffizienten
Informationen zum Korrelationskoeffizienten finden Sie im folgenden Wiki
https://ja.wikipedia.org/wiki/%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0
Korrelationskoeffizientenwert
#Berechnen Sie den Korrelationskoeffizienten
corrmat = df.corr()
corrmat
Wärmekarte des Korrelationskoeffizienten
f, ax = plt.subplots(figsize=(12,9))
sns.heatmap(corrmat, vmax=.8, square=True)
Es wurde festgestellt, dass eine Korrelation bestand.
Teilen Sie die Antwort (train_labels hier Survived
) und den Parameter (train_features here außer
Survived`)
train_labels = df['Survived'].values
train_features = df
train_features.drop('Survived', axis=1, inplace=True)
train_features = train_features.values.astype(np.int64)
Schließlich haben wir eine Zwei-Klassen-Klassifizierungslernmaschine unter Verwendung der linearen SVM in scicit-learn erstellt. (Ich habe keine detaillierten Parameter festgelegt, hätte aber die L1- und L2-Regularisierung durchführen sollen.)
from sklearn import svm
#Standard = svm.LinearSVC(C=1.0, intercept_scaling=1, multi_class=False , loss="l1", penalty="l2", dual=True)
svm = svm.LinearSVC()
svm.fit(train_features, train_labels)
Lesen Sie den diesmal berechneten Testwert
df_test = pd.read_csv("./input/test.csv")
#Löschen Sie nicht benötigte Spalten
df_test.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
#Numerische Ersetzung der Zeichenkette
df_test.Embarked = df_test.Embarked.replace(['C', 'S', 'Q'], [0, 1, 2])
df_test.Sex = df_test.Sex.replace(['male', 'female'], [0, 1])
df_test.Age = df_test.Age.replace('NaN', 0)
#In Array-Wert konvertieren
test_features = df_test.values.astype(np.int64)
y_test_pred = svm.predict(test_features)
#Laden Sie die Testwerte neu und fügen Sie nach SVM kategorisierte Spalten hinzu
df_out = pd.read_csv("./input/test.csv")
df_out["Survived"] = y_test_pred
#Ausgabe in das Ausgabeverzeichnis
df_out[["PassengerId","Survived"]].to_csv("./output/submission.csv",index=False)
Wie eingangs erwähnt, betrug die korrekte Antwortrate der Vorhersage der Titanic 0,7512. Ich war jedoch zufrieden, weil ich mich in wenigen Stunden bilden und einreichen konnte.
Es gab viele Punkte, die während der Erstellung verbessert werden mussten.
Ich konnte in kurzer Zeit Output produzieren und habe mein Ziel erreicht. Ich erkannte jedoch zutiefst, dass ich nicht die Zeit und Erfahrung hatte, die optimale Berechnungsmethode zu finden, indem ich das, was ich bisher gelernt hatte, in kurzer Zeit verwendete.