Introduction à la modélisation bayésienne à l'aide de la traduction japonaise pymc3 de modélisation bayésienne en Python (chapitre 0-2)

Il peut y avoir des erreurs, donc si vous en trouvez une, veuillez la signaler.

Cette fois, je voudrais présenter l'idée de Bayes, qui est une idée inévitable dans l'apprentissage automatique. L'explication est décrite sur la base de l'article suivant.

référence: https://github.com/markdregan/Bayesian-Modelling-in-Python

Connaissances acquises dans cet article

1: Pensée bayésienne 2: Découvrez la théorie bayésienne en utilisant le notebook ipython 3: Méthode d'évaluation du modèle optimisée à l'aide de la théorie bayésienne

Pourquoi vous avez besoin de Bayes en premier lieu

Le but de l'apprentissage automatique est d'apprendre des modèles à partir de données et de traiter des données inconnues, mais des données parfaites sont

"Complet, cohérent, correct et descriptif"

De tels cas sont extrêmement rares, il est donc proche de l'idée de donner des connaissances à l'avance afin qu'il ne soit pas facilement affecté par des données étranges.

Je pense que les êtres humains feront également des prédictions et agiront lorsqu'ils feront quelque chose pour améliorer leur rétroaction.

Cependant, si vous faites une erreur à l'avance, vous aurez de mauvais résultats, alors soyez prudent.

Par exemple, je veux trouver un restaurant de viande pour les femmes (basé sur le dogmatisme et les préjugés)

150912426027-thumb-815xauto-19288.jpg

  • Femmes au début de la vingtaine: emmenez-les dans un magasin à la mode inexpérimenté ou dans un magasin qui propose des choses que vous ne feriez pas normalement l'expérience.
  • Femmes à la fin de la vingtaine: les magasins à la mode sont épuisés dans une certaine mesure, il est donc difficile de rechercher simplement des magasins à la mode. Ce serait bien d'avoir une boutique cachée ou une boutique préférée

De cette façon, même si vous allez chez une femme, la distribution antérieure diffère selon l'âge, donc si vous vous trompez dans cette distribution antérieure, ce sera ridicule.

Didacticiel

Cette fois, au lieu de suivre les formules mathématiques, la version anglaise était un tutoriel pour comprendre les idées de Bayes en utilisant des données réelles, je vais donc les traduire en japonais dans le cadre de mon étude et laisser un mémorandum de pratique.

Puisque le chapitre 3 et les versions ultérieures sont des contenus avancés, si vous le limitez au chapitre 2, vous pouvez tout faire, de la création du modèle à l'évaluation.

Si vous êtes intéressé par l'histoire principale, veuillez voir ci-dessous

https://github.com/markdregan/Bayesian-Modelling-in-Python

Acquisition de données: Section 0. Introduction.ipynb

Dans ce didacticiel, vous obtenez vos propres données Google Hangout. L'acquisition des données prend du temps, il est donc recommandé d'acquérir les données tout en effectuant d'autres travaux.

Si vous ne disposez pas d'un environnement python, vous pouvez télécharger les bibliothèques nécessaires en utilisant require.txt ci-dessous.

numpy==1.9.2
ipython==4.0.0
notebook==4.0.4
jinja2==2.8
pyzmq==14.7.0
tornado==4.1
matplotlib
simplejson
pandas
seaborn
datetime
scipy
patsy
statsmodels
git+https://github.com/pymc-devs/pymc3

Je l'ai essayé dans un environnement OSX, mais j'ai eu l'erreur suivante.

RuntimeError**: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.

La méthode correspondante est la suivante.

http://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

L'imbrication du fichier json obtenu est incroyable, voici donc quelques brèves informations sur les champs de données.

Field Description Example
conversation_id Conversation id representing the chat thread Ugw5Xrm3ZO5mzAfKB7V4AaABAQ
participants List of participants in the chat thread [Mark, Peter, John]
event_id Id representing an event such as chat message or video hangout 7-H0Z7-FkyB7-H0au2avdw
timestamp Timestamp 2014-08-15 01:54:12
message Content of the message sent Went to the local wedding photographer today
sender Sender of the message Mark Regan

Le didacticiel analyse les données de json et les traduit dans le cadre de données de Pandas pour chaque message.

Veuillez noter que le code ci-dessous restreint les données à l'auteur et à Alison Darcy, vous n'obtiendrez donc pas les données à moins que vous ne commentiez ici.

messages = messages[(messages['sender'] == 'Mark Regan') & (messages['participants_str'] != 'Alison Darcy, Mark Regan')]

Le problème que vous souhaitez résoudre

1: Le temps de réponse affecte la personne à qui vous parlez 2: Quels facteurs affectent le temps de réponse? 3: Quel est le pire jour?

Dans mon cas, je n'utilise pas beaucoup Google Hangout, j'ai donc obtenu le résultat suivant.

Screen Shot 2015-11-27 at 10.59.17.png

Cette fois, je ne peux pas l'utiliser pour le problème que je souhaite résoudre, j'ai donc décidé d'utiliser les données du tutoriel.

Prédire les paramètres du modèle: Section 1: Estimer les paramètres du modèle

Voici la partie principale du tutoriel Baysian. Il est intéressant de noter que les résultats sont faciles à comprendre à l'aide de diagrammes.

Tout d'abord, je décrirai l'idée de Basian. Par exemple:

Le garçon compte le nombre de voitures qui passent devant sa maison chaque jour et les écrit dans son carnet. Son carnet décrit le nombre de voitures passées.

Selon Bayes, les données observées se produisent au hasard, mais je pense que cela se produit avec une distribution de probabilité.

Pour les cas discrets comme l'exemple, envisagez d'utiliser la distribution de Poisson.

L'exemple montre des cas avec une moyenne de 5,20,40.

Screen Shot 2015-11-27 at 11.27.26.png

Le vert est une distribution de probabilité avec une moyenne de 5, l'orange est une distribution de probabilité avec une moyenne de 20 et le rose est une distribution de probabilité avec une moyenne de 40.

En appliquant le temps de la réponse précédente au cadre de la distribution de Poisson et en prédisant les paramètres avec Bayes, nous essayons de résoudre la question qui s'est posée cette fois.

Screen Shot 2015-11-27 at 11.30.38.png

La valeur moyenne de la distribution de Poisson est estimée par l'estimation la plus probable (logarithmique). La probabilité de cette estimation et la valeur moyenne de la distribution de Poisson à estimer peuvent être confirmées ci-dessous.

Screen Shot 2015-11-27 at 12.52.24.png

On peut confirmer que la valeur moyenne est proche de 20 et la probabilité est la plus élevée. La distribution de Poisson du temps de réponse est la suivante, et elle est le plus souvent renvoyée en 18 secondes.

Screen Shot 2015-11-27 at 12.55.32.png

L'information connue à l'avance pour appliquer Bayes dans cet exemple est que les données sont comprises entre 10 et 60. Le sujet est de définir sa distribution de Poisson et de l'obtenir par l'estimation la plus probable.

Screen Shot 2015-11-27 at 12.57.43.png

MCMC

Il s'agit d'une technique qui change la valeur moyenne de ce temps en données et la répète jusqu'à ce que la valeur maximisant la probabilité soit atteinte. Le bon point de cette méthode est que même s'il n'y a pas de données, il est possible de déterminer les paramètres à estimer à partir de la distribution précédente et d'estimer les valeurs au hasard, et de s'arrêter lorsque la vraisemblance est maximisée.

Cependant, il existe des inconvénients en ce qu'il est difficile de converger lorsqu'il y a de nombreux paramètres à estimer, et il est difficile d'exercer l'effet lorsque la distribution antérieure n'est pas appropriée.

Screen Shot 2015-11-27 at 13.13.56.png

Si vous l'exécutez avec ipython notebook, vous pouvez voir le processus d'estimation des paramètres lors de la génération des données, alors essayez-le et voyez comment cela fonctionne.

C'est le résultat réellement estimé par MCMC. Les données se sont produites entre 17 et 19, et la valeur moyenne était un peu plus de 18, donc c'est aussi précis qu'une simple estimation bayésienne.

Screen Shot 2015-11-27 at 13.20.00.png

La trajectoire de la probabilité maximisée par MCMC peut être confirmée ci-dessous. Étant donné que la valeur moyenne estimée ne converge pas toujours comme prévu, vous pouvez vérifier de quel type de transition il s'agit en vérifiant cette trace.

Screen Shot 2015-11-27 at 13.39.47.png

Il est également nécessaire de comprendre le coefficient de corrélation entre la valeur sortie dans l'échantillon et la valeur sortie jusqu'à présent.

Vérification du modèle: Section 2: Vérification du modèle

Il y a deux points à vérifier

1: Le modèle représente-t-il des données? 2: Comparaison des modèles

Vérifions les données et la distribution prévue. La valeur la plus fréquente de la distribution et le temps de réponse le plus fréquent ne correspondent pas. Il s'avère que ce modèle ne convient pas dans ce cas.

Screen Shot 2015-11-27 at 14.23.26.png

Par conséquent, si nous utilisons une distribution binomiale négative qui est relativement similaire à la distribution de Poisson, nous pouvons gérer non seulement la moyenne mais aussi la variance, alors remplaçons-la.

La distribution est similaire à celle illustrée ci-dessous.

Screen Shot 2015-11-27 at 14.18.08.png

La distribution binomiale négative estime les paramètres α et μ comme indiqué ci-dessous.

Screen Shot 2015-11-27 at 14.25.39.png

Les valeurs prédites sont les suivantes, α vaut de 1,4 à 2,4 et le pouvoir expressif de la distribution est amélioré par le rôle de la dispersion.

Screen Shot 2015-11-27 at 14.29.36.png

Voici un diagramme de la distribution et du temps de réponse créés à l'aide des paramètres α et μ estimés précédemment. La distribution est similaire à la distribution du temps de réponse et est plus caractéristique.

Screen Shot 2015-11-27 at 14.34.35.png

Une combinaison de distributions binomiales de Poisson et négatives a également été proposée.

Screen Shot 2015-11-27 at 14.46.22.png

Il précise qu'il calcule le facteur bayésien et décide quel modèle utiliser en fonction des critères ci-dessous.

Screen Shot 2015-11-27 at 14.48.19.png

Cette fois, nous avons fait les bases jusqu'au chapitre 2, mais puisque le chapitre 3 sera une version avancée, veuillez défier.

https://github.com/markdregan/Bayesian-Modelling-in-Python/blob/master/Section%203.%20Hierarchical%20modelling.ipynb

référence

Pakutaso https://www.pakutaso.com/

Apprenez la modélisation statistique avec Stan (2): Qu'est-ce que MCMC en premier lieu? http://tjo.hatenablog.com/entry/2014/02/08/173324

Des connaissances pour faire semblant de connaître les estimations bayésiennes http://www.anlyznews.com/2012/01/blog-post_31.html

Bayesian-Modelling-in-Python https://github.com/markdregan/Bayesian-Modelling-in-Python

Article suivant

Le fonctionnement du pilote de volume DRBD Cinder confirmé avec OpenStack LIBERTY par tksarah !!

Recommended Posts

Introduction à la modélisation bayésienne à l'aide de la traduction japonaise pymc3 de modélisation bayésienne en Python (chapitre 0-2)
[PyTorch] Introduction à la classification des documents japonais à l'aide de BERT
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
Introduction à discord.py (3) Utilisation de la voix
Introduction à l'optimisation bayésienne
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Introduction à la modélisation statistique bayésienne avec python ~ Essai de régression linéaire avec MCMC ~
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
Introduction à la simulation d'événements discrets à l'aide de Python # 1
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[PyTorch] Introduction à la classification de documents à l'aide de BERT
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Mise en route: 30 secondes de traduction en japonais Keras
Introduction à la simulation d'événements discrets à l'aide de Python # 2
Tutoriel Biopython et traduction japonaise du livre de recettes (Chapitre 1, 2)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Introduction à Tornado (3): Développement à l'aide de modèles [Pratique]