[PYTHON] Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)

Public cible et objectif de cette page

Public cible

・ Ceux qui connaissent les grandes lignes de l'apprentissage automatique ・ Ou, pour ceux qui lisent Apprentissage automatique à partir de zéro (Présentation de l'apprentissage automatique)

Objectif

・ Comprendre Kaggle ・ Comprendre le flux réel de l'apprentissage automatique ・ Pratiquez l'utilisation du tutoriel de Kaggle ・ Pratiquez l'utilisation de scicit-learn

ordre du jour

  1. Qu'est-ce que Kaggle?
  2. Pourquoi Kaggle?
  3. Tutoriel Kaggle (Titanic: Machine Learning from Disaster)
  4. Lequel utiliser dans les données?
  5. Prétraitement des données
  6. Données d'utilisation
  7. Méthode d'apprentissage à utiliser
  8. Exécution de l'apprentissage et vérification croisée
  9. Optimisation
  10. Flux d'apprentissage automatique
  11. Présentation de certains concours d'entreprise

Cette page est une version rééditée de la présentation. Si vous souhaitez voir la présentation originale, veuillez cliquer ici. https://www.edocr.com/v/vlzyelxe/tflare/Kaggle_-Machine-learning-to-learn-at-Kaggle

1. Qu'est-ce que Kaggle?

Si vous le mettez ensemble sans crainte de malentendu "Kaggle est un site où les entreprises et les chercheurs peuvent résoudre des thèmes liés à la science des données et à l'apprentissage automatique. Certains d'entre eux ont des prix (et le code pour les résoudre est publié et expliqué. Explication) Il existe également une fonction pour communiquer avec des commentaires, etc.)

2. Pourquoi Kaggle?

・ Dans les explications telles que les livres, des ensembles de données pour l'explication sont souvent utilisés, et il est difficile de se faire une idée réelle. ・ Vous pouvez comprendre le flux réel de l'apprentissage automatique car il est nécessaire de réaliser même les parties qui sont brisées dans les explications telles que les livres. ・ Parce que le classement sort, je suis motivé. (Vous pouvez concurrencer et coopérer avec des analystes de données du monde entier) ・ Vous recevrez un prix (certains vous donneront un prix de 1,5 million de dollars)

3. Tutoriel Kaggle (Titanic: Machine Learning from Disaster)

Prédire si les passagers ont survécu au naufrage du Titanic ・ Données d'entraînement (891 lignes x 12 colonnes csv) Certaines données sont manquantes ・ Données de test (418 lignes x 11 colonnes csv) Certaines données sont manquantes ・ Apprenez à partir des données d'entraînement et prédisez si vous avez survécu ou non aux données de test.

4. Lequel utiliser dans les données?

-PassengerId: Le numéro attaché aux données de manière séquentielle ・ Survived: Survival (0 = Non, 1 = Yes) Existe uniquement dans les données d'entraînement ・ Pclass: Classe de billet (1 = 1er, 2 = 2ème, 3 = 3ème) · Nom nom ・ Sexe: sexe ・ Âge: Âge ・ SibSp: nombre de frères et de conjoints sur le Titanic ・ Parch: nombre de parents et d'enfants sur le Titanic ・ Ticket: numéro de ticket ・ Tarif: tarif passager ・ Cabine: numéro de cabine ・ Embarqué: Zone d'embarquement (C = Cherbourg, Q = Queenstown, S = Southampton)

Code d'exécution


import numpy as np
import pandas as pd
train = pd.read_csv("train.csv", dtype={"Age": np.float64}, )
test  = pd.read_csv("test.csv", dtype={"Age": np.float64}, )
train.head(10)

kaggle_titanic1.png

Code d'exécution


train_corr = train.corr()
train_corr

kaggle_titanic3.png

5. Prétraitement des données

Il semble que vous puissiez utiliser autre chose que PassengerId. Puisqu'il y a des données qui ne sont pas actuellement utilisées pour l'analyse, elles seront converties en données utilisables (valeur numérique). De plus, il manque des données, corrigez-les.

Code d'exécution


def correct_data(titanic_data):
    
    titanic_data.Age = titanic_data.Age.fillna(titanic_data.Age.median())
    
    titanic_data.Sex = titanic_data.Sex.replace(['male', 'female'], [0, 1])
    
    titanic_data.Embarked = titanic_data.Embarked.fillna("S")
    titanic_data.Embarked = titanic_data.Embarked.replace(['C', 'S', 'Q'], [0, 1, 2])

    titanic_data.Fare = titanic_data.Fare.fillna(titanic_data.Fare.median())
   
    return titanic_data

train_data = correct_data(train)
test_data  = correct_data(test)

Code d'exécution


train_corr = train.corr()
train_corr

kaggle_titanic.png

6. Données d'utilisation

Cette fois, nous utiliserons les éléments suivants. ・ Classe de billet ·sexe ·âge ・ Nombre de frères et conjoints sur le Titanic ・ Nombre de parents et d'enfants sur le Titanic ・ Tarif passager · Zone d'embarquement

7. Méthode d'apprentissage à utiliser

・ Retour logistique ・ Machine de vecteur de soutien ・ Méthode K-la plus proche · Arbre de décision ・ Forêt aléatoire ·réseau neuronal

Les références Voir ci-dessous pour plus de détails sur les méthodes d'apprentissage. L'apprentissage automatique a commencé avec Python Fonctionnalités apprises avec scikit-learn Principes de base de l'ingénierie et de l'apprentissage automatique https://www.oreilly.co.jp/books/9784873117980/

8. Exécution de l'apprentissage et vérification croisée

Spécifiez les données et la méthode d'apprentissage.

Code d'exécution


from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neural_network import MLPClassifier

from sklearn.model_selection import cross_val_score

predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]

models = []

models.append(("LogisticRegression",LogisticRegression()))
models.append(("SVC",SVC()))
models.append(("LinearSVC",LinearSVC()))
models.append(("KNeighbors",KNeighborsClassifier()))
models.append(("DecisionTree",DecisionTreeClassifier()))
models.append(("RandomForest",RandomForestClassifier()))
models.append(("MLPClassifier",MLPClassifier(solver='lbfgs', random_state=0)))

Nous procéderons à une vérification croisée.

En validation croisée, le jeu de données est divisé en données d'entraînement et données de test (ici, 3 divisions). C'est une méthode pour stabiliser la précision en évaluant chaque

一から始める機械学習(Kaggleで学ぶ機械学習)__Machine_learning_to_learn_at_Kaggle_key.png

Code d'exécution


results = []
names = []
for name,model in models:
    result = cross_val_score(model, train_data[predictors], train_data["Survived"],  cv=3)
    names.append(name)
    results.append(result)
    

Le résultat divisé en 3 est moyenné et évalué. Random forest a donné de bons résultats.

Code d'exécution


for i in range(len(names)):
    print(names[i],results[i].mean())
    
LogisticRegression 0.785634118967
SVC 0.687991021324
LinearSVC 0.58810325477
KNeighbors 0.701459034792
DecisionTree 0.766554433221
RandomForest 0.796857463524
MLPClassifier 0.785634118967

Basé sur ce que vous avez appris dans Random Forest Prédisez avec les données de test et envoyez le résultat au format csv.

Code d'exécution


alg = RandomForestClassifier()
alg.fit(train_data[predictors], train_data["Survived"])

predictions = alg.predict(test_data[predictors])

submission = pd.DataFrame({
        "PassengerId": test_data["PassengerId"],
        "Survived": predictions
    })

submission.to_csv('submission.csv', index=False)
    

9. Optimisation

Taux de réponse correct

Taux de réponse correcte 0,74163 Il était 7043e sur 7922 personnes. Je suis un peu déçu, je vais donc l'optimiser.

optimisation

Si vous utilisez la recherche par grille, les hyper paramètres seront automatiquement optimisés. Cependant, veuillez noter que son exécution prend beaucoup de temps.

Code d'exécution


parameters = {
        'n_estimators'      : [5, 10, 20, 30, 50, 100, 300],
        'max_depth'         : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100]
        'random_state'      : [0],
}
gsc = GridSearchCV(RandomForestClassifier(), parameters,cv=3)
gsc.fit(train_data[predictors], train_data["Survived"])

Appliquons le résultat optimisé par ce qui précède.

Taux de réponse correcte 0,77990 Je suis allé au 4129e sur 7922 personnes.

Titanic__Machine_Learning_from_Disaster___Kaggle.png

Optimisation en modifiant le prétraitement des données

J'ai reçu un commentaire lorsque j'ai publié le code sur Kaggle. Il était préférable de trouver les valeurs manquantes à partir des données de test plutôt qu'à partir des données d'entraînement. Je l'ai essayé. Le code modifié est illustré ci-dessous.

Code d'exécution


def correct_data(train_data, test_data):
    
    # Make missing values ​​for training data from test data as well
    train_data.Age = train_data.Age.fillna(test_data.Age.median())
    train_data.Fare = train_data.Fare.fillna(test_data.Fare.median())
    
    test_data.Age = test_data.Age.fillna(test_data.Age.median())
    test_data.Fare = test_data.Fare.fillna(test_data.Fare.median())    
    
    train_data = correct_data_common(train_data)
    test_data = correct_data_common(test_data)    

    return train_data,  test_data

def correct_data_common(titanic_data):
    titanic_data.Sex = titanic_data.Sex.replace(['male', 'female'], [0, 1])
    titanic_data.Embarked = titanic_data.Embarked.fillna("S")
    titanic_data.Embarked = titanic_data.Embarked.replace(['C', 'S', 'Q'], [0, 1, 2])
    
    return titanic_data

train_data,  test_data = correct_data(train, test)

** Taux de réponse correcte 0,79426 ** ** Je suis allé au 2189e sur 7922 personnes. ** **

Titanic__Machine_Learning_from_Disaster___Kaggle2.png

Planifier une optimisation supplémentaire

・ Analysez le nom. (Pouvez-vous deviner d'ici parce qu'il y a M. Mme Miss etc.)

kaggle_titanic1.png

· Utilisez une méthode d'apprentissage différente (par exemple XGBoost, LightGBM)

10. Flux d'apprentissage automatique

一から始める機械学習(Kaggleで学ぶ機械学習)__Machine_learning_to_learn_at_Kaggle_key2.png

La sélection de la méthode est une feuille de triche d'algorithme

Choosing_the_right_estimator_—_scikit-learn_0_19_0_documentation.png

Sélection hyper paramètre

grid search

Évaluation du modèle

** Vérification croisée **

11. Présentation de certains concours d'entreprise

Prudential Life Insurance Assessment ・ Pouvez-vous faciliter l'achat d'une assurance-vie? ・ Calculez le niveau de risque à partir des attributs du demandeur d'assurance-vie ・ Prix de 30 000 dollars ・ Déjà terminé (le code peut être référencé) ・ Https://www.kaggle.com/c/prudential-life-insurance-assessment

Zillow Prize: Zillow’s Home Value Prediction (Zestimate) ・ Pouvez-vous améliorer l'algorithme qui a changé le monde de l'immobilier? · Prédire l'erreur entre Zestimate et le prix de vente réel, en tenant compte de toutes les caractéristiques de votre maison ・ Prix de 1,2 million de dollars ・ Se termine après 4 mois ・ Https://www.kaggle.com/c/zillow-prize-1

Recommended Posts

Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
L'apprentissage automatique appris avec Pokemon
Essayez le machine learning à la légère avec Kaggle
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Efficacité commerciale à partir de zéro avec Python
Micro service avec GCP sur RoR à partir de zéro
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage profond à partir de zéro
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 1
Apprentissage automatique à partir de Python Personal Memorandum Part1
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 2
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
Méthode d'étude pour apprendre le machine learning à partir de zéro (version mars 2020)
Apprentissage profond à partir de zéro 1 à 3 chapitres
Django à partir de zéro (partie: 2)
Django à partir de zéro (partie: 1)
Apprentissage amélioré à partir de Python
Apprentissage automatique avec Python! Préparation
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Créez un environnement pour "Deep Learning from scratch" avec Docker
[Apprentissage automatique] Comprendre la décorrélation des mathématiques
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
Apprentissage profond à partir de zéro (calcul des coûts)
Expérience d'apprentissage Perceptron apprise avec Python
SVM essayant l'apprentissage automatique avec scikit-learn
Mémo d'apprentissage profond créé à partir de zéro
Machine learning d'inspiration quantique avec des réseaux de tenseurs
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Re: La vie d'Heroku à partir de zéro avec Flask ~ PhantomJS à Heroku ~
Soit Code Day75 à partir de zéro "15.3 Sum"
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Amplifiez les images pour l'apprentissage automatique avec Python
Apprentissage profond à partir de zéro (propagation vers l'avant)
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
Apprentissage automatique avec python (2) Analyse de régression simple
Re: La vie Heroku à partir de zéro avec Flask ~ Selenium & PhantomJS & Beautifulsoup ~
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
Réaliser la construction d'environnement pour "Deep Learning from scratch" avec docker et Vagrant
Une histoire sur l'apprentissage automatique avec Kyasuket
[Mémo d'apprentissage] Deep Learning fait de zéro [Chapitre 5]
Let Code Day 29 "46. Permutations" à partir de zéro
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 6]
Apprentissage automatique
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Code source pour la séparation des sources sonores (série de pratiques d'apprentissage automatique) appris avec Python
[Python] Première analyse de données / apprentissage automatique (Kaggle)