[PYTHON] J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle

Le code d'exécution, le contenu et l'explication sont décrits à l'URL suivante.

cahier Jupyter https://github.com/spica831/kaggle_titanic/blob/master/titanic.ipynb

Contexte

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

Prédire les prix de vente des maisons avec Kaggle

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.

Méthode

#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. スクリーンショット 2017-04-19 22.53.49.png

Prétraitement

Remplacement de la chaîne de caractères

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)

Supprimer la colonne

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)

Résultat du prétraitement

Tout pourrait être remplacé par des valeurs numériques.

df

スクリーンショット 2017-04-19 22.54.08.png



une analyse

Coefficient de corrélation

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 image

Valeur du coefficient de corrélation

#Calculer le coefficient de corrélation
corrmat = df.corr()
corrmat

スクリーンショット 2017-04-19 22.54.18.png

Carte thermique des coefficients de corrélation

f, ax = plt.subplots(figsize=(12,9))
sns.heatmap(corrmat, vmax=.8, square=True)

8nqTunXxjzAAAAABJRU5ErkJggg==.png

Il a été constaté qu'il y avait une corrélation.

Apprentissage

Préparation avant l'apprentissage

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)

Apprenez avec la machine vectorielle de support

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)

tester

Lire la valeur de test calculée cette fois

df_test = pd.read_csv("./input/test.csv")

Préparation préalable

#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)

Classifiez avec SVM.

y_test_pred = svm.predict(test_features)

finalement

Convertir en un formulaire qui peut être soumis à Kaggle

#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)

résultat

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.

Choses à améliorer

Il y avait de nombreux points à améliorer lors de la création.

Prétraitement

  1. L'âge doit être divisé en deux, à l'exclusion de NaN et d'une certaine valeur de NaN.
  2. En regardant l'histogramme, si la distribution gaussienne est à gauche, elle aurait dû être logarithmique pour approcher la distribution gaussienne. (Le Dr Andrew a également dit cela à Coursera.)
  3. Aucune valeur de blanchiment n'a été effectuée.
  4. J'aurais dû faire de mon mieux pour convertir les valeurs d'une grande quantité de chaînes de caractères rejetées en valeurs numériques. En particulier, je ne voulais pas jeter Cabin et Ticket.

une analyse

  1. Je ne regardais que le coefficient de corrélation.

Trieur

  1. La valeur n'a pas été régularisée
  2. Nous n'avons pas considéré les SVM non linéaires ni d'autres classificateurs.

Résumé

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

J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai essayé de prédire la survie du Titanic avec PyCaret
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
Prédire le Titanic de Kaggle avec Keras (Kaggle ⑦)
J'ai essayé de prédire le prix de l'immobilier à Boston avec PyCaret
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
J'ai essayé de convertir la chaîne datetime <-> avec tzinfo en utilisant strftime () et strptime ()
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai implémenté DCGAN et essayé de générer des pommes
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'intégrer Keras dans TFv1.1
J'ai essayé de jouer en connectant PartiQL et MongoDB
J'ai essayé d'analyser les principaux composants avec les données du Titanic!
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de détecter un objet avec M2Det!
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'utiliser Linux avec Discord Bot
J'ai essayé d'étudier DP avec séquence de Fibonacci
J'ai essayé de démarrer Jupyter avec toutes les lumières d'Amazon
J'ai essayé de juger Tundele avec Naive Bays
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
[Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
J'ai essayé de déboguer.
Introduction à la création d'IA avec Python! Partie 3 J'ai essayé de classer et de prédire les images avec un réseau de neurones convolutifs (CNN)
J'ai essayé d'entraîner la fonction péché avec chainer