cahier Jupyter https://github.com/spica831/kaggle_titanic/blob/master/titanic.ipynb
J'ai participé à un hackathon pour estimer le prix d'une maison à Kaggle Je n'ai pas pu le résoudre à temps en raison d'un manque de connaissances sur la façon d'utiliser python et de l'analyser. Par conséquent, en guise de revanche, nous avons prédit la survie du Titanic. https://www.kaggle.com/c/titanic
House Prices: Advanced Regression Techniques https://www.kaggle.com/c/house-prices-advanced-regression-techniques
D'après la conclusion, le taux de réponse correcte de la prédiction du Titanic était de 0,7512.
#Importer les packages requis
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline
#Lire la valeur
df = pd.read_csv("./input/train.csv")
df
Affichez la valeur.
Apparemment, les chaînes de caractères sont utilisées pour les noms et les sexes. Puisqu'il ne peut pas être utilisé pour l'analyse en l'état, s'agit-il du sexe (sexe) ou du rang d'embarquement? Comme il existe peu de modèles de caractères tels que (Embarqué), ils sont remplacés par des valeurs numériques telles que 0, 1 et 2, respectivement.
De plus, age (Age) a une valeur manquante (NaN), donc tous ont été remplacés par 0.
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)
Les éléments difficiles à gérer, tels que le nom et la cabine de billets, ont été supprimés pour chaque colonne. (douloureux)
df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
Tout pourrait être remplacé par des valeurs numériques.
df
Calculez d'abord le coefficient de corrélation
Reportez-vous au wiki suivant pour le coefficient de corrélation https://ja.wikipedia.org/wiki/%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0
Valeur du coefficient de corrélation
#Calculer le coefficient de corrélation
corrmat = df.corr()
corrmat
Carte thermique des coefficients de corrélation
f, ax = plt.subplots(figsize=(12,9))
sns.heatmap(corrmat, vmax=.8, square=True)
Il a été constaté qu'il y avait une corrélation.
Divisez la réponse (train_labels ici Survived
) et le paramètre (train_features here autre que
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)
Enfin, nous avons créé une machine d'apprentissage de classification à deux classes en utilisant le SVM linéaire dans scicit-learn. (Je n'ai pas défini de paramètres détaillés, mais j'aurais dû faire des régularisations L1 et L2.)
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)
Lire la valeur de test calculée cette fois
df_test = pd.read_csv("./input/test.csv")
#Supprimer les colonnes inutiles
df_test.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
#Remplacement numérique de la chaîne de caractères
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)
#Convertir en valeur de tableau
test_features = df_test.values.astype(np.int64)
y_test_pred = svm.predict(test_features)
#Recharger les valeurs de test et ajouter des colonnes classées par SVM
df_out = pd.read_csv("./input/test.csv")
df_out["Survived"] = y_test_pred
#Sortie vers le répertoire de sortie
df_out[["PassengerId","Survived"]].to_csv("./output/submission.csv",index=False)
Comme mentionné au début, le taux de réponse correcte de la prédiction du Titanic était de 0,7512. Cependant, j'ai été satisfait car j'ai pu former et soumettre en un court laps de temps de quelques heures.
Il y avait de nombreux points à améliorer lors de la création.
J'ai pu produire une sortie en peu de temps, j'ai donc atteint mon objectif. Cependant, j'ai profondément réalisé que je n'avais ni le temps ni l'expérience pour trouver la méthode de calcul optimale en utilisant ce que j'avais appris jusqu'à présent en peu de temps.
Recommended Posts