[PYTHON] Retour sur le concours d'apprentissage automatique sur lequel j'ai travaillé pour la première fois

introduction

L'autre jour, j'ai participé à un concours d'apprentissage automatique. J'ai fait de mon mieux pour tuer le week-end plusieurs fois. Du coup, même si je n'ai pas gagné de prix, j'ai pu être dans le top 3%, ce qui m'a donné confiance. Comme je n'ai pas beaucoup d'expérience dans les compétitions, mes pensées peuvent changer à l'avenir, mais d'abord je vais revenir sur cette expérience et la laisser comme mémo.

Motivation pour la participation

J'étudie l'apprentissage automatique en lisant des livres et en regardant des vidéos, mais je voulais savoir objectivement à quel point mes compétences étaient.

supposition

Je ne peux pas dire les détails de la compétition, mais c'est une compétition de table. J'ai combattu dans l'environnement de combat suivant.

Matériel (1 unité)

Logiciel

Regarder en arrière

Il existe de nombreux excellents livres sur les techniques d'apprentissage automatique, alors j'aimerais ici énumérer les choses boueuses que j'ai réellement ressenties lorsque je les ai présentées à la compétition.

Script créé

Lors de la compétition, nous avons créé un script de ligne de commande polyvalent pour les deux tâches de sélection de fonctionnalités et de création de modèle prédictif, et utilisé des commandes jetables pour les autres (visualisation, prétraitement mineur, etc.). Par exemple, lors de la création d'un modèle prédictif, la sélection de l'algorithme d'apprentissage, de la graine aléatoire, du nombre de validations croisées, etc. peut être spécifiée autant que possible par des arguments. De plus, même si un nouvel algorithme est ajouté, il peut être ajouté avec un minimum de modifications. En faisant cela, je pense que j'ai pu améliorer ma productivité en pouvant changer ce que je voulais faire en changeant simplement l'argument de la commande, ou en le regroupant par lots.

Reproductibilité

Dans les concours, il est souvent obligatoire de fournir un script qui puisse reproduire la création et la prédiction des modèles lors de la victoire d'un prix et de la réception de prix (je pense). Il peut être assez difficile de savoir comment le reproduire uniquement lorsque le score augmente et que le prix est visible. Par conséquent, il est nécessaire d'établir une méthode pour assurer la reproductibilité le plus tôt possible. Les algorithmes qui incluent le caractère aléatoire dans les résultats ont souvent des paramètres tels que "random_state", j'ai donc essayé de les étudier et de les spécifier. Cependant, lorsqu'il est calculé avec GPU, il semble difficile de le réparer (cette fois, le GPU n'a été utilisé que par Keras, donc je ne l'ai pas étudié très profondément).

Les éléments suivants peuvent être considérés comme des cibles pour fixer la graine de nombre aléatoire.

--Chaque algorithme de sélection de fonctionnalités tel que Boruta --Chaque algorithme d'apprentissage automatique tel que Random Forest et XGBoost

Journal

J'ai obtenu de bons résultats en utilisant les résultats d'une méthode de sélection de fonctionnalités, mais je ne savais pas comment créer la première sélection de fonctionnalités, alors j'ai fini par recommencer à zéro. Il est important de conserver un journal dans chaque script afin que cela ne se produise pas.

Je n'ai pas implémenté tout ce qui suit, mais avec le recul maintenant, ce qui suit peut être considéré comme des choses qui devraient être enregistrées.

La même chose s'applique à d'autres scripts tels que la sélection de fonctionnalités. Notez que le journal ne doit pas nécessairement être un fichier, il suffit de créer un dossier de sortie pour chaque exécution et de sortir plusieurs types de fichiers journaux, y compris le résultat de la prédiction.

Utilisez votre temps efficacement

Boruta de sélection de fonctionnalités a pris une journée entière avec 500 itérations selon les données de la concurrence. En fonction du résultat, j'ai dû recommencer plusieurs fois. Si vous exécutez Boruta sans rien spécifier, il peut occuper le processeur et vous ne pourrez peut-être pas faire d'autre travail. Dans le cas d'un traitement qui occupe la CPU de cette manière, si un argument est préparé, en spécifiant explicitement le nombre de CPU, il reste de la place pour d'autres travaux. En faisant cela, d'autres travaux (par exemple, la recherche d'hyper paramètres avec un autre résultat de sélection de fonctionnalités) peuvent être effectués même pendant que Boruta est en cours d'exécution, et le temps peut être utilisé efficacement.

Considérez la vitesse d'exécution de l'algorithme de prédiction

Cette fois, nous avons pu améliorer la précision par l'apprentissage d'ensemble pour créer le modèle de prédiction final en combinant les résultats de sortie de plusieurs algorithmes de prédiction. Dans l'apprentissage d'ensemble, on dit que plus la variété des combinaisons est grande, plus la précision est élevée. Cette fois, j'ai pu créer un script à usage général et ajouter divers algorithmes de prédiction, j'ai donc combiné autant d'algorithmes que possible. Quant à la vitesse de chaque algorithme, elle était la suivante.

--LightGBM, DeepLearng (Kearas) était assez rapide, et alors que d'autres méthodes se débattaient, même les données sans sélection de fonctionnalités étaient assez rapides. --XGB, Cat Boost et Extra Tree étaient également assez rapides.

Le fait que cela prenne du temps signifie que s'il existe de nombreuses combinaisons de recherche de paramètres, la combinaison prendra plus de temps. Pour cette raison, l'algorithme utilisé sans sélection de caractéristiques et l'algorithme utilisé après la sélection de caractéristiques ont été sélectionnés correctement. Nous pensons que cela a permis de rechercher efficacement des modèles très précis de chaque algorithme de prédiction.

Croyez en la validation croisée

À la fin du concours, bien que le score de validation croisée ait augmenté, le score du test public n'a pas augmenté. J'ai eu beaucoup de mal, mais dans le test public avec toutes les données publiées à la fin de la compétition, le résultat était presque le même que la validation croisée. Après tout, une fois que j'ai trouvé une méthode d'évaluation que je pensais fiable, j'ai réalisé qu'il était important d'y croire et de me concentrer sur l'amélioration de la précision.

Abandonner

Pendant la compétition, cela peut ne pas être efficace pour tous les efforts. Par exemple, cette fois, la génération de caractéristiques par programmation génétique n'a eu aucun effet (même si cela peut être une question de méthode). Je ne pouvais penser à aucune cause. Dans un tel cas, je pense qu'il est important d'abandonner rapidement et de découvrir ce qui a été efficace (dans ce cas, l'apprentissage d'ensemble).

en conclusion

Avec le recul, j'ai l'impression que je n'ai écrit que les choses évidentes, mais c'est probablement mon niveau actuel.

Recommended Posts

Retour sur le concours d'apprentissage automatique sur lequel j'ai travaillé pour la première fois
J'ai essayé python pour la première fois avec heroku
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
Créer un environnement Python d'apprentissage automatique sur Mac OS
Remarques sur la grammaire Python de l'apprentissage automatique PyQ
Remarques sur l'exécution locale d'Azure Machine Learning
Apprentissage automatique avec Pytorch sur Google Colab
Retour sur le concours d'apprentissage automatique sur lequel j'ai travaillé pour la première fois
J'ai essayé tensorflow pour la première fois
J'ai essayé la programmation python pour la première fois.
J'ai essayé Mind Meld pour la première fois
Ce que je suis entré dans Python pour la première fois
Pour la première fois, j'ai découvert Unix (Linux).
AI Gaming Je l'ai essayé pour la première fois
Premier Kaggle (kaggle ①)
J'ai fréquenté l'école et j'ai participé pour la première fois au concours limité BEGINNER de SIGNATE.
Kaguru pour la première fois
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
J'ai essayé l'API Google Cloud Vision pour la première fois
Si vous apprenez Linux pour la première fois, faites-le!
Voir python pour la première fois
Démarrez Django pour la première fois
Différences que les ingénieurs C # ont ressenties lors de l'apprentissage de Python pour la première fois
Code dont j'aurais aimé me souvenir lors de ma première participation à AtCoder (Réflexion 1 pour la prochaine fois)
[Python] [Apprentissage automatique] Les débutants sans aucune connaissance essaient l'apprentissage automatique pour le moment
Retour sur 2016 dans le langage Crystal
MongoDB avec Python pour la première fois
Essayons Linux pour la première fois
Pour la première fois dans Numpy, je vais le mettre à jour de temps en temps
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 2 [Génération de modèles par apprentissage automatique]
Pour le moment en utilisant FastAPI, je veux montrer comment utiliser l'API comme ça dans swagger
L'histoire qui n'avait rien à voir avec la partition lorsque j'ai fait une sauvegarde de disque avec dd pour la première fois
Affichons un template simple idéal pour le premier Django
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Retour sur l'histoire des expressions qui renvoient somme de carré à Pythonic
Comment utiliser MkDocs pour la première fois
Exécutez yolov4 "pour le moment" dans Windows
Notes sur l'apprentissage automatique (mises à jour de temps en temps)
J'ai joué avec Floydhub pour le moment
Installez la bibliothèque d'apprentissage automatique TensorFlow sur fedora23
Essayez de publier sur Qiita pour la première fois
J'essaierai de résumer les liens qui me semblent utiles pour le moment
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[CodeIQ] J'ai écrit la distribution de probabilité des dés (du cours de mathématiques CodeIQ pour l'apprentissage automatique [Distribution de probabilités])
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
Enregistrer une tâche dans cron pour la première fois
Essayez d'installer Arch Linux pour le moment.
[Python] J'ai créé un classificateur pour les iris [Machine learning]
Bilan du premier défi du machine learning avec Keras
14 newsletters par e-mail utiles pour collecter des informations sur l'apprentissage automatique
Méthodes WebDriver que les débutants de Python recherchaient en premier
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
Apprentissage automatique à tour de rôle (analyse de régression) -Cela réduit considérablement le temps de réglage des paramètres-
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance des caractères japonais Chapitre 1 [Construction de l'environnement]
Je souhaite utiliser l'environnement de bureau d'Ubuntu sur Android pour le moment (version Termux)