[PYTHON] "Alors, comment cela se compare-t-il aux autres méthodes?"

** "Alors, comment se compare-t-il aux autres méthodes?" **

Je pense que les développeurs de l'algorithme ont (assez souvent) peur de ce mot. Surtout si vous êtes obligé de développer un système pratique avant la date limite. Si vous n'essayez pas d'écrire un article académique, c'est un problème que vous devez éviter si vous pouvez l'éviter. Lorsque ce mot apparaît, la quantité de travail augmentera d'un facteur de (1 + le nombre de méthodes à comparer). Une personne qui ne sait pas à quel point il est difficile de créer un apprentissage et une évaluation en ne remplaçant que l'algorithme d'apprentissage utilisant les mêmes données d'apprentissage et le même nombre de fonctionnalités, "Alors, comment le comparer avec d'autres méthodes? C'est une déclaration très raisonnable. (Remarque) ** Dans une situation où les ressources de développement sont limitées, il est important de créer un niveau acceptable. ** Vous devez faire attention à ne pas prendre la décision d'augmenter la priorité d'un projet pour un élément qui ne constitue pas le goulot d'étranglement du développement. Dans le cas de l'apprentissage automatique, de l'acquisition de données, de l'augmentation des données en fonction des résultats de l'évaluation, du prétraitement des données sur la façon de concevoir des fonctionnalités et des résultats tels que la matrice de confusion pour les données inconnues Encouragez votre entourage à réaliser que la définition de politiques pour l'augmentation future des données après l'acquisition est plus importante que le choix de l'algorithme d'apprentissage automatique à choisir. C'est partir. Si les ressources de développement ne sont pas limitées, le développeur lui-même veut vérifier "Alors, comment se compare-t-il avec d'autres méthodes?"

** Le manque de données devient un goulot d'étranglement dans les premiers stades du développement **

Évaluez les valeurs de précision et de rappel, en utilisant des éléments tels que le cadre d'évaluation scikit-learn. Dans les premiers stades de développement, il n'y a pas assez de données du tout, et l'exactitude et le rappel sont en lambeaux. Par conséquent, si vous augmentez les données d'entraînement uniquement dans la catégorie avec un faible taux de rappel, le taux de rappel de cette catégorie devrait s'améliorer. Cela devrait également améliorer la précision de la catégorie qui identifie cette catégorie à tort. Tant qu'il se comporte comme cela, les données d'entraînement et les données d'évaluation doivent être régulièrement augmentées. L'ensemble de données créé pour cela ne doit pas être gaspillé.

Dans l'apprentissage automatique, plus le modèle est flexible, plus les résidus pouvant être appliqués aux données d'apprentissage sont petits. Cependant, cela ne signifie pas que la précision et le rappel seront obtenus lorsqu'il n'est pas utilisé pour l'apprentissage. Avec tout algorithme d'apprentissage automatique, les performances d'origine ne peuvent pas être obtenues lorsque la quantité de données d'apprentissage / d'évaluation est insuffisante. Chaque algorithme ne dépend que de la sensibilité du manque de données.

** Support Vector Machine (SVM) **

On dit que Support Vector Machine (SVM) est facile à donner des résultats d'entraînement stables même avec une quantité relativement faible de données (par rapport à d'autres algorithmes). Même l'un des algorithmes SVM possède le savoir-faire pour mener à bien l'apprentissage automatique en traitant les données à l'avance (A Practical Guide to Support Vector Classification. /~cjlin/papers/guide/guide.pdf)).

--Normalisez les données dans la plage [-1, 1] ou [0, 1]

Il y a un travail sur la façon de déterminer les valeurs des paramètres gamma et C donnés lors de l'apprentissage de SVM. libSVM fournit un outil grid.py pour cela.  Grid Parameter Search for Regression

Tout d'abord, je suggère d'utiliser SVM pour obtenir de bons résultats.

Le manque de dépendances de valeur initiale dans les SVM est également l'une des raisons pour lesquelles je l'aime comme première méthode à utiliser les SVM. (Selon l'algorithme, il y a un problème de dépendance à la valeur initiale. "Cela ne fonctionne-t-il pas parce que la valeur initiale utilisée était mauvaise? (Cela ne fonctionne-t-il pas si une autre valeur initiale est utilisée?)" Il est possible que vous ne puissiez jamais porter un jugement suffisant.)

La question «Comment se compare-t-elle aux autres méthodes?» Signifie que le nombre de données d'apprentissage et de données d'évaluation est suffisant et que la méthode actuelle est appropriée pour le prétraitement des données. Dans une situation où la performance peut être mise en valeur. Tout d'abord, s'il vous plaît soyez intéressé à élever la situation de l'équipe de développement à cette situation.

** scikit-learn est un trésor de comparaisons d'algorithmes **

Avec suffisamment de données, il devient significatif de comparer des algorithmes. Dans un tel cas, utilisez scikit-learn pour évaluer la différence entre les algorithmes. «Même avec le même algorithme, différentes bibliothèques ont des interfaces différentes, bien sûr. Même avec l'apprentissage automatique dans le même but, si l'algorithme est différent, l'interface sera différente. " Scikit-learn a brisé cette situation pendant longtemps. Dans Compléter le visage avec des estimateurs multi-sorties , C'est une chose merveilleuse.

python


for name, estimator in ESTIMATORS.items():
    estimator.fit(X_train, y_train)
    y_test_predict[name] = estimator.predict(X_test)

** La conception de l'API scikit-learn devient un exemple pour d'autres bibliothèques **

Il existe différentes bibliothèques d'apprentissage automatique, mais beaucoup d'entre elles créent des wrappers pour les API similaires à scicit-learn. Il n'y a donc aucune perte à s'habituer à sciki-learn.

Chainer peut maintenant être utilisé pour scicit-learn comme

scikit-chainer

Il existe plusieurs implémentations de type scikit-learn. Vérifiez le dernier état pour voir quelle implémentation est la mieux gérée.

tensorflow/skflow

tensorflow/tensorflow/examples/skflow/ digits.py iris.py mnist.py Si vous regardez etc., vous pouvez voir qu'il peut être utilisé avec la même interface que scicit-learn.

Comment créer un modèle de prédiction basé sur scikit-learn

Lorsque vous effectuez diverses opérations avec l'apprentissage automatique, vous pouvez créer vous-même un nouveau modèle de prédiction, tel qu'un modèle d'ensemble qui combine différents modèles. Dans ce cas, vous pouvez le créer à partir de zéro, mais le modèle ainsi créé est un peu gênant car vous ne pouvez pas utiliser les modules d'optimisation des paramètres de scikit-learn, tels que GridSearch et RandomSearch. À ce stade, si vous définissez le modèle selon la définition de scikit-learn, il fonctionnera bien et sera efficace.

** Lorsque vous souhaitez améliorer davantage l'algorithme **

Si l'ensemble de données pour la formation et l'évaluation est correctement collecté, des algorithmes plus efficaces et plus précis peuvent être utilisés en utilisant des ressources externes telles que Kaggle. Vous pouvez développer un algorithme utilisable.

** Notes sur l'interprétation de l'évaluation après apprentissage avec différents algorithmes **

――Le meilleur algorithme dépend de l'équilibre entre le degré de liberté du modèle et le nombre de données. ――La susceptibilité d'apprendre des images qui ont été étiquetées de manière incorrecte dépend de l'algorithme. ――Il dépend également de l'algorithme s'il est affecté par la distribution statistique des données d'entraînement.

Veuillez trouver la meilleure méthode avec ces choses à l'esprit.

Remarque: articles soulignant le problème du surapprentissage J'ai essayé de classer les voix des acteurs de la voix   J'ai essayé de représenter graphiquement le processus d'apprentissage du réseau neuronal

** Remarque: importance de l'ensemble de données **

Puisque la description a augmenté, je l'ai rendue indépendante en tant qu'article séparé. Importance de l'ensemble de données

Remarque: Lorsque vous utilisez SVM, vous avez la possibilité de choisir la bibliothèque à utiliser. Nous recommandons la liaison python de libSVM et le SVM de scikit-learn car il peut renvoyer des probabilités dans la classification multiclasse.

Rechercher SVM

Nous avons créé une collection de liens vers des articles qui collectent des données d'apprentissage automatique. Comment collecter des données d'apprentissage automatique

Informations de référence

Qiita Support Vector Machines and Other Machine Learning Techniques Qiita [Machine learning with Python] Informations sur la machine vectorielle de support (SVM) publiées Résumé du site Web de référence Qiita chainer peut maintenant être utilisé pour scicit-learn comme Qiita Présentation des méthodes d'apprentissage automatique apprises grâce à scikit-learn

Depuis SSII2016

Du symposium sur la détection d'images

"En ce qui concerne la reconnaissance d'objets, nous l'avons banalisée dans la mesure où n'importe qui peut construire un système dans une certaine mesure si nous pouvons préparer des données de quantité et de qualité appropriées pour être un problème." [SSII2016 À la pointe et proche avenir de la reconnaissance d'image] Il est écrit en (https://confit.atlas.jp/guide/event/ssii2016/static/speciallecture). Il reste encore à préparer les données quantitatives et qualitatives appropriées à interroger.

M. Yasutomo Kawanishi Quand j'ai créé une méthode, je pense que beaucoup de gens me demandent: "L'avez-vous comparée avec SVM? Qu'arrive-t-il à la précision si vous le faites avec Random Forest?" Dans ce didacticiel, la récente diffusion des bibliothèques de machine learning facilite l'application de diverses méthodes de machine learning à certains problèmes de reconnaissance et compare leurs performances, ainsi que la manière de bien les utiliser. Je vais expliquer. (Https://confit.atlas.jp/guide/event/ssii2016/static/tutorial)

M. Yasutomo Kawanishi slideShare Introduction à l'apprentissage automatique avec Python-De SVM à Deep Learning-

M. Yasutomo Kawanishi Exemple de code pour un didacticiel dans SSII2016

Remarque: il est effrayant que vous ne puissiez pas faire ce que vous êtes censé faire si vous décidez que la reproduction des résultats que d'autres ont (devraient) faire est prioritaire sur votre développement actuel. Ce sera une situation.

Postscript "Grand défi de la détection des piétons"

[Document d'enquête] Rechercher les tendances de la détection des piétons à l'aide du Deep Learning

Des choses qui ont changé depuis le moment où j'ai écrit cette phrase (PostScript 2018.07)

Recommended Posts

"Alors, comment cela se compare-t-il aux autres méthodes?"
[Pepper] Comment l'utiliser?
[Google Colab] Comment interrompre l'apprentissage, puis le reprendre
Comment comparer des données de séries chronologiques - Dérivée DTW, DTW-
Comment installer le détecteur Cascade et comment l'utiliser
[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
La solution de contournement pour le modèle de Django n'existe pas
Comment utiliser Decorator dans Django et comment le créer
Comparez comment écrire le traitement des listes par langue