[PYTHON] Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_1

1. Qu'est-ce que Kaggle?

Un site où vous pouvez tester vos compétences en participant à la résolution de divers problèmes à l'aide de l'analyse de données. Vous pouvez obtenir un ensemble de données et voir les explications d'autres personnes (noyau), afin d'étudier l'analyse des données.

2. Qu'est-ce que Titanic?

Une des compétitions de Kaggle. Il est utilisé par de nombreux débutants comme un tutoriel. Prédisez quels passagers du Titanic ont survécu. Le thème est de prédire la survie des 418 autres personnes à partir des données passagers de 891 personnes.

3. 3. Que faire cette fois

Nous expliquerons systématiquement les techniques pour les débutants jusqu'à un score de soumission de 0,83732 (équivalent aux 1,5% supérieurs) en utilisant une forêt aléatoire. Cette fois, j'expliquerai jusqu'à ce que le score soumis atteigne 0,78468. La prochaine fois a augmenté le score à 0,81339, et La prochaine fois correspond au top 1,5 Le score de soumission est de 0,83732. Tout le code utilisé est publié sur Github. Le code utilisé cette fois est titanesque (0.83732) _1.

4. Détails du code

Importer les bibliothèques requises


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline,make_pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn import model_selection
from sklearn.model_selection import GridSearchCV
import warnings
warnings.filterwarnings('ignore')

Lisez CSV et vérifiez le contenu


#Lire CSV
train= pd.read_csv("train.csv")
test= pd.read_csv("test.csv")

#Intégration de données
dataset = pd.concat([train, test], ignore_index = True)

#Pour soumission
PassengerId = test['PassengerId']

#Vérifiez jusqu'au troisième contenu du train
train.head(3)

image.png

Une brève description de chaque colonne est la suivante.

· PassengerId - ID unique d'identification du passager ・ Survived - Drapeau de survie (0 = mort, 1 = survie) ・ Pclass - Classe de billet · Nom - Nom du passager ・ Sexe - Genre (homme = homme, femme = femme) ・ Âge - Âge · SibSp - Nombre de frères et sœurs / conjoints à bord du Titanic · Parch - Nombre de parents / enfants sur le Titanic ・ Ticket - Numéro de ticket ・ Tarif - tarif ・ Cabine - Numéro de chambre ・ Embarqué - Point de départ (port sur Titanic)

Je vais également donner une brève description de chaque variable. pclass = classe de billet 1 = classe supérieure (riche) 2 = classe intermédiaire (classe générale) 3 = classe inférieure (classe ouvrière)

Embarqué = La définition de chaque variable est la suivante C = Cherbourg Q = Queenstown S = Southampton NaN représente une perte de données. (Dans le tableau ci-dessus, vous pouvez voir deux NaN dans la cabine.) Vérifions le nombre total de données manquantes.


#Vérifiez le nombre de données manquantes
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()

Age 263 Cabin 1014 Embarked 2 Fare 1 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64

Avec Cabin, vous pouvez voir qu'il y a jusqu'à 1014 données manquantes. Ensuite, vérifions les données statistiques globales.


#Vérifier les données statistiques
dataset.describe()

2020-01-08.png Tout d'abord, vérifiez l'exactitude en substituant la valeur médiane, etc. aux données manquantes.


#La cabine est temporairement exclue
del dataset["Cabin"]

# Age(âge)Et tarif(Frais)Est la valeur médiane de chacun, Embarqué(Point de départ)Est-ce que S(Southampton)Remplacer
dataset["Age"].fillna(dataset.Age.mean(), inplace=True) 
dataset["Fare"].fillna(dataset.Fare.mean(), inplace=True) 
dataset["Embarked"].fillna("S", inplace=True)

#Vérifiez le nombre total de données manquantes
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()

Age 0 Embarked 0 Fare 0 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64

Il n'y a aucune donnée manquante. Les 418 de Survived correspondent à 418 dans les données de test, cela ne devrait donc pas poser de problème. Organisez vos données pour les prévisions. Tout d'abord, utilisez la classe P, le sexe, l'âge, le tarif, embarqué. Il la convertit également en variable fictive afin que la machine puisse la prédire. (Actuellement, il existe deux éléments de sexe, masculin et féminin, mais ce faisant, ils sont convertis en sex_male et sex_female. Pour male, sex_male est attribué 1 et s'ils sont différents, 0 est attribué.)

#Extraire uniquement les variables à utiliser
dataset1 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked']]
#Créer une variable factice
dataset_dummies=pd.get_dummies(dataset1)
dataset_dummies.head(3)

2020-01-08 (1).png

Laissez la machine apprendre. Créez le meilleur modèle prédictif en modifiant les n_estimators et max_depth de RandomForestClassifier.

#Décomposer les données en train et tester
#( 'Survived'Existe en train,Pas de test)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]

#Séparez les données du train en variables et les bonnes réponses
X = train_set.as_matrix()[:, 1:] #Variables après Pclass
y = train_set.as_matrix()[:, 0] #Corriger les données de réponse

#Créer un modèle prédictif
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Essayez 20-30 par incréments
              'classify__max_depth':list(range(3, 10, 1))} #Essayez 3 à 10 par incréments
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")

{'classify__max_depth': 8, 'classify__n_estimators': 23} 0.8316498316498316 Lorsque max_depth vaut 8 et n_estimators vaut 23, il s'avère être le meilleur modèle avec une précision de prédiction de 83% pour les données d'entraînement. Ce modèle prédit les données de test et crée un fichier de soumission (submit1.csv).

#Prédiction des données de test
pred = grid.predict(test_set)

#Création d'un fichier csv pour la soumission Kaggle
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission1.csv", index=False)

Lorsque je l'ai soumis, le score était de 0,78468. Soudain, une prédiction élevée est sortie.

Cette fois, ajoutez Parch (nombre de parents / enfants à bord) et SibSp (nombre de frères et sœurs / conjoints à bord) pour faire une prédiction.

#Extraire les variables à utiliser
dataset2 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked', 'Parch', 'SibSp']]

#Créer une variable factice
dataset_dummies = pd.get_dummies(dataset2)
dataset_dummies.head(3)

2020-01-08 (3).png

#Décomposer les données en train et tester
#( 'Survived'Existe en train,Pas de test)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]

#Séparez les données du train en variables et les bonnes réponses
X = train_set.as_matrix()[:, 1:] #Variables après Pclass
y = train_set.as_matrix()[:, 0] #Corriger les données de réponse

#Créer un modèle prédictif
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Essayez 20-30 par incréments
              'classify__max_depth':list(range(3, 10, 1))} #Essayez 3 à 10 par incréments
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")

#Prédiction des données de test
pred = grid.predict(test_set)

#Création d'un fichier csv pour la soumission Kaggle
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission2.csv", index=False)

{'classify__max_depth': 7, 'classify__n_estimators': 25} 0.8417508417508418 Lorsque max_depth vaut 7 et n_estimators vaut 25, il s'avère être le meilleur modèle avec une précision de prédiction de 84% pour les données d'entraînement. Bien que ce soit plus précis qu'avant, lorsque j'ai soumis la prédiction des données de test (soumission2.csv) pour ce modèle, le score est tombé à 0,76076. Il semble que cela ait provoqué un surapprentissage. Il semble préférable de ne pas utiliser Parch (nombre de parents / enfants à bord) et SibSp (nombre de frères et sœurs / conjoints à bord).

5. Résumé

J'ai fait une prédiction pour le concours de tutoriels de Kaggle Titanic. Le score le plus élevé soumis était de 0,78468. La prochaine fois visualisera les données et expliquera le processus au score de soumission 0.83732.

Recommended Posts

Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_1
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_2
Kaggle Tutorial Le savoir-faire Titanic pour être dans le top 2%
Défis de la compétition Titanic pour les débutants de Kaggle
C'est normal de tomber sur Titanic! Présentation de la stratégie Kaggle pour les super débutants
Examinez les paramètres de RandomForestClassifier dans le didacticiel Kaggle / Titanic
[Pour les débutants de Kaggle] Titanic (LightGBM)
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
Kaggle Tutorial Le savoir-faire Titanic pour être dans le top 2%
Défiez Kaggle Titanic
Essayez le didacticiel Titanic de Kaggle
Examinez les paramètres de RandomForestClassifier dans le didacticiel Kaggle / Titanic
Regardez de plus près le tutoriel Kaggle / Titanic
[Pour les débutants de Kaggle] Titanic (LightGBM)
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Certains modèles de Kaggle's Titanic (kaggle ④)
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_1
Explication d'approche pour que les débutants soient dans le top 1,5% (0,83732) dans Kaggle Titanic_2
[Kaggle pour les super débutants] Titanic (retour logistique)
Changer le module à charger pour chaque environnement d'exécution en Python
Le moyen le plus rapide pour les débutants de maîtriser Python
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
Essayez de calculer RPN avec Python (pour les débutants)
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Histoire de base de l'héritage en Python (pour les débutants)
Jour 66 [Introduction à Kaggle] Les prévisions Titanic les plus faciles
Comment limiter la publication de l'API dans la bibliothèque partagée en langage C de Linux
Trouvez une ligne directrice pour le nombre de processus / threads à définir sur le serveur d'applications
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
[Pour les débutants] Comment utiliser la commande say avec python!
Comment obtenir le nombre de chiffres en Python
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
[Pour les débutants] Installez le package dans l'environnement Anaconda (Janome)
Vérifier l'existence de tables BigQuery en Java
[Pour les débutants] Quantifier la similitude des phrases avec TF-IDF
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Tout pour que les débutants puissent faire du machine learning
[Pour les débutants des professionnels de la compétition] Trois méthodes de saisie à retenir lors du démarrage de la programmation de compétition avec Python
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3
Comment trouver le nombre optimal de clusters pour les k-moyennes
Code de test pour vérifier les liens brisés dans la page
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
traitement python3 qui semble utilisable dans paiza
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
■ Kaggle Practice pour les débutants - Introduction de Python - par Google Colaboratory
Résumé des points d'achoppement à Django pour la première fois
[Explication pour les débutants] Introduction au traitement du pliage (expliqué dans TensorFlow)
[Explication pour les débutants] Introduction au traitement du pool (expliqué dans TensorFlow)
Obtenez le nombre d'occurrences pour chaque élément de la liste
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image par eux-mêmes
[Python] Les principales faiblesses et inconvénients de Google Colaboratory [Pour les débutants]
Google recherche la chaîne sur la dernière ligne du fichier en Python
Cochez le bouton Vérifier dans Tkinter pour autoriser la modification de l'entrée
Comment éliminer le "Les balises doivent être un tableau de hachages." Erreur dans l'API qiita
[Pour les débutants en informatique] Que faire lorsque la commande rev ne peut pas être utilisée avec Git Bash
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django
Premier Kaggle (kaggle ①)
[Pour les débutants] kaggle exercice (merucari)
Vue d'ensemble de Docker (pour les débutants)
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
[Pour les débutants] Comment implémenter l'exemple de code O'reilly dans Google Colab
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Envelopper (partie de) la bibliothèque AtCoder en Cython pour une utilisation en Python
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Familiarisez-vous avec (voulez être) autour du pipeline de spaCy
Comment connaître la structure interne d'un objet en Python
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv