Cet article est le 17e jour du Calendrier de l'Avent Akatsuki 2016.
Ravi de vous rencontrer. Je m'appelle @chosty et je suis ingénieur serveur chez Akatsuki Co., Ltd. Récemment, j'ai dit que «le travail est mauvais pour ma santé» au travail.
Personnellement, je m'intéresse au machine learning et à l'analyse de données, et j'y travaille de temps en temps. Jusqu'à présent, je faisais ce domaine avec R, mais il y avait un endroit où je voulais toucher Python, alors j'écrirai un article disant que j'ai essayé un tutoriel rapide avec Kaggle.
Ceci est un site de compétition d'analyse de données. Le site officiel est ici. Les ensembles de données et les thèmes (objectifs) sont présentés par des entreprises et des chercheurs et ils se disputent les scores. Il semble que si vous donnez un bon score, vous obtiendrez un prix et parlerez de recrutement. C'est une bonne histoire. L'année dernière, Recruit parlait du premier concours organisé par une entreprise japonaise. Il semble qu'environ 340 000 analystes de données étaient enregistrés chez Kaggle à ce moment-là.
C'est un service comme ça, mais en plus des concours proposés par les entreprises et les chercheurs, il y a aussi des concours d'apprentissage proposés par Kaggle. Cette fois, j'essaierai l'un d'entre eux, et je m'attaquerai au problème de prédiction des survivants du Titanic. https://www.kaggle.com/c/titanic
Le problème de prédiction du survivant du Titanic prédit la vie ou la mort d'une personne à bord du Titanic à partir de données données.
Téléchargez train.csv
et test.csv
sur le site ci-dessus et voyez quels types de fonctionnalités sont fournis.
Valeur de la fonctionnalité | sens |
---|---|
PassengerID | Juste une pièce d'identité donnée par Kaggle |
Survived | As-tu survécu(0 = NO, 1 = Yes) |
Pclass | Classe de chambre |
Name | Nom |
Sex | sexe |
Age | âge |
SibSp | Nombre de frères et de conjoints chevauchant ensemble |
Parch | Nombre de parents et d'enfants chevauchant ensemble |
Ticket | Numéro de billet |
Fare | Tarif passager |
Cabin | cabine |
Embarked | Lieu d'embarquement |
À partir des quantités de caractéristiques ci-dessus, il semble que ce sera un flux pour en rechercher une qui semble être efficace pour la prédiction et créer un modèle de prédiction en l'utilisant.
Lors de la création d'un modèle, il est bon de faire une hypothèse et d'enquêter. Par exemple, il peut être bon de penser que les personnes qui étaient dans des chambres de première classe ont un taux de survie élevé, ou que de nombreuses familles roulent ensemble et que les hommes ont un faible taux de survie.
En plus de cela, je pense qu'il est plus logique cette fois de supprimer les fonctionnalités qui ne fonctionnent pas et d'ajouter quelque chose qui semble fonctionner par vous-même.
Cependant, cette fois, le but est de le faire rapidement, je vais donc le mettre de côté.
Au fait, bien sûr, Survived
n'est disponible que dans train.csv
.
À partir de là, prenons les données avec Python et voyons quelles valeurs sont stockées.
##Préparation
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() #Sortie des 5 premières lignes de données
train.info() #Confirmation du type de données
train.isnull().sum() #Confirmation des valeurs manquantes
train.describe() #Résumé
Un tel résultat est renvoyé.
jupyter pratique, le meilleur.
Puisque la moyenne des survivants est de 0,38, on peut constater qu'environ 60% des personnes sont décédées. Même si tout le monde n'aide pas pour le moment, la précision sera telle qu'elle est.
Je veux compenser les valeurs manquantes liées à l'âge. Il existe diverses méthodes complémentaires, et il serait préférable de décider de la similitude avec d'autres enregistrements ou d'estimer à partir d'autres quantités d'entités, mais pour le moment, remplacez-la par la valeur médiane. J'ai pensé changer le sexe et le lieu d'embarquement en mannequin, et laisser tomber la cabine car il y a trop de valeurs manquantes, alors je vais le faire. J'aimerais gérer le nom, mais c'est gênant, alors je vais le laisser tomber pour le moment. Les billets sont également un obstacle, alors laissez-les tomber. Supprimez l'enregistrement avec la valeur manquante à la fin. Si la précision est mauvaise, il serait bon de créer des fonctionnalités utiles à partir des informations déposées ici.
##Mise en forme des données
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
En regardant le coefficient de corrélation dans cet état, c'est comme suit.
Le sexe a la corrélation la plus élevée avec Survived, suivi du tarif d'embarquement, du nombre de parents et d'enfants, puis de la classe de la chambre d'hôtes. Le tarif d'embarquement est-il corrélé positivement mais la classe de la chambre d'hôtes est-elle corrélée négativement? (Les classes de chambre sont 1 = 1er, 2 = 2ème, 3 = 3ème.) Je pensais que le nombre de fonctionnalités était trop petit, mais certaines fonctionnalités étaient corrélées, je vais donc créer un modèle en utilisant les données formatées telles quelles.
Cette fois, je vais construire un modèle en utilisant Random Forest et prédire la vie et la mort de la personne dans les données de test. En ce qui concerne Random Forest, je pense que ce serait plus facile à comprendre si vous regardez les documents de M. Hamada. http://www.slideshare.net/hamadakoichi/randomforest-web C'est bien de frapper l'œuvre originale, mais il y en a pas mal et je veux l'implémenter! Je veux en savoir plus! Si vous n'êtes pas une personne, vous n'avez pas à le lire. Quoi qu'il en soit, si vous êtes ennuyé, vous devriez faire beaucoup d'arbres de décision et prendre une décision à la majorité, ou quelque chose du genre.
##Construction de modèles
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100)
forest = forest.fit(train_data[0::,1::],train_data[0::,0])
##Prévoir
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)
##Exportation
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()
Si vous soumettez le csv exporté à kaggle, le score sortira. Comme ça.
C'était exact à environ 75%. C'est plus précis que la prédiction que tout le monde est mort, mais ce n'est pas si élevé, et il semble que ce sera raisonnable même si vous le faites correctement. Vous pouvez voir que je regarde l'échelle, mais je devine toutes les 14 meilleures personnes. Comment puis je faire ça ...
C'est assez facile à soumettre, et bien sûr, vous pouvez voir votre propre score, et c'est bien de pouvoir le comparer avec les scores d'autres personnes. Il y a des tonnes de messages sur les forums, alors jetez un œil à ma méthode de prédiction! !! !! C'est amusant et éducatif à voir. Cette fois, mon objectif était de construire rapidement un modèle, de le prédire et de le soumettre, mais j'aurais aimé prendre un peu plus de temps. Vous devriez peut-être tracer ou faire quelque chose pour chaque fonctionnalité. Donc, j'ai l'impression que je vais continuer à trouver du temps et à essayer un peu plus. Il semble bon d'essayer d'autres défis.
Après avoir fait une analyse des données un peu plus détaillée pour ce tutoriel, j'ai pensé que la précision serait améliorée si les éléments suivants étaient pris en compte. J'essaierai de trouver du temps. --Comment compléter l'âge (valeur manquante) --Lier les informations de famille en utilisant le nom
La fin
Recommended Posts