[PYTHON] J'ai écrit le code pour l'échantillonnage Gibbs

Il décrit presque le même contenu (et l'explication est simple!) [[Méthode MH] J'ai écrit MCMC en Python [Gibbs-Sampler]](http://www.fisproject.jp/2015/12/mcmc J'ai écrit un exemple de code pour l'échantillonnage Gibbs même s'il y a -in-python /). (Bien qu'il soit plein de réinvention des roues (déchirures))

Pourquoi public?

Il y a du code python publié au début, pourquoi est-il publié? Puisque MCMC est une histoire compliquée à la fois dans les lapins et dans les coins, j'ai pensé que ce serait une bonne idée de penser qu'il existe un «code qui fonctionne pour le moment» pour les débutants.

Donc, plutôt que "je l'ai écrit", la quantité de code que j'ai écrite était étonnamment courte, donc j'ai la frustration de "je ne sais pas ce que c'est, mais qu'est-ce que c'est après tout!" Si vous pouvez ajouter ne serait-ce qu'un peu, ...

Qu'est-ce que MCMC?

C'est également une disposition du prédécesseur MCMC. .

Distribution générée cette fois

C'est une distribution normale bidimensionnelle: $ p(x,y)=\frac{1}{Z}\exp\big(-\frac{x^2-2bxy+y^2}{2}\big), Z=\frac{2\pi}{\sqrt{1-b^2}} $ Correspond aux variables utilisées dans le code python ci-dessous. $ Z $ est une constante de normalisation.

code python

##Préparation
import seaborn as sns
import numpy as np
from scipy.stats import norm

##Constantes qui déterminent la corrélation de la distribution normale bidimensionnelle
b = 0.8
##Déterminer la taille de l'échantillon
N = 10000

##Une liste de choses qui peuvent être échantillonnées
x = []
y = []

##Le point initial est comme ça
x_init = 3.0
y_init = 9.0

##Génération aléatoire selon une distribution normale bidimensionnelle.
##Où se déplace l'autre après la phrase for, comme on l'appelle communément "Kakukaku"
for i in range(N):
    if i==0:
        x.append(x_init) ##Point initial(coordonnée x)
        y.append(y_init) ##Point initial(coordonnée y)
    else:
        x.append(norm(loc=y[i-1]*b, scale=1.0).rvs(size=1.0)[0]) #Fixez la coordonnée y et définissez la coordonnée x sur N(Point central=Coordonnée y fixe,1)Choisissez parmi
        y.append(norm(loc=x[i]*b, scale=1.0).rvs(size=1.0)[0]) #Fixer la coordonnée x et définir la coordonnée x sur N(Point central=Coordonnée x fixe,1)Choisissez parmi

%matplotlib inline ##Si vous voulez dessiner avec Jupyter Notebook, c'est génial!
sns.jointplot(np.array(x),np.array(y))

Unknown.png

Un mot lié à la valeur initiale

Même si vous changez la valeur initiale, elle finira par devenir une distribution stable, donc si vous ne voulez que la «distribution régulière», c'est aussi un point à envisager de couper l'échantillonnage autour de la valeur initiale un peu plus tard. Cette fois, la devise était "Les lapins sont excités, code simple!"

Reference

Recommended Posts

J'ai écrit le code pour l'échantillonnage Gibbs
J'ai écrit le code pour la génération de phrases japonaises avec DeZero
Je viens d'écrire le matériel original pour l'exemple de code python
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
[Python] J'ai essayé d'implémenter un échantillonnage de Gibbs marginalisé
J'ai écrit la file d'attente en Python
J'ai écrit la pile en Python
J'ai écrit le code pour écrire le code Brainf * ck en python
J'ai essayé tensorflow pour la première fois
Tri sélect écrit en C
J'ai écrit un test unitaire pour différentes langues
[Python débutant] J'ai rassemblé les articles que j'ai écrits
J'ai écrit l'aile coulissante dans la création.
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai recherché Railway Kawayanagi à partir des données
D'une manière ou d'une autre, le code que j'ai écrit a fonctionné et j'ai été impressionné, alors je vais le poster
J'ai joué avec Floydhub pour le moment
J'ai essayé la programmation python pour la première fois.
[Python] J'ai cherché le plus long Pokémon Shiritori
J'ai essayé Mind Meld pour la première fois
Code pour vérifier le fonctionnement de Python Matplot lib
Une histoire dont j'ai été très convaincu lorsque j'ai écrit le code du problème Monty Hall et calculé le taux de gain
[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])
Ce que je suis entré dans Python pour la première fois
J'ai essayé Python sur Mac pour la première fois.
J'ai écrit un script de kit automatique pour OpenBlocks IoT
Créez un code QR pour l'URL sous Linux
J'ai essayé python pour la première fois avec heroku
Pour la première fois, j'ai découvert Unix (Linux).
J'ai écrit un script d'installation automatique pour Arch Linux
Essayez d'installer Arch Linux pour le moment.
J'ai senti que j'avais porté le code Python en C ++ 98.
AI Gaming Je l'ai essayé pour la première fois
J'ai recherché le contenu de l'agent CloudWatch Logs
J'ai essayé d'exécuter l'exemple de code du module Ansible
Je t'ai écrit pour regarder le signal avec Go
Installation du moteur de jeu rétro pyxel pour Python sur Mac et lancement de l'exemple de code
Techniques de test de code?
J'ai compté les grains
[TensorFlow] Je souhaite maîtriser l'indexation pour Ragged Tensor
J'étais accro au débogueur Python pdb pendant 2 minutes
Code de test pour vérifier les liens brisés dans la page
J'ai touché au dernier outil de test automatique "Playwright for Python"
Je veux déplacer le sélénium pour le moment [pour mac]
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
Pratique pour former les nouveaux arrivants? J'ai écrit un serveur d'entraînement Telnet
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai écrit un programme de démonstration pour la transformation linéaire d'une matrice
J'ai écrit le fonctionnement de base de Seaborn dans Jupyter Lab
J'ai essayé de résumer le code souvent utilisé dans Pandas
Je l'ai écrit en langage Go pour comprendre le principe SOLID
Je ne savais pas comment utiliser l'instruction [python] for
Notes diverses sur l'utilisation de python pour les projets
J'ai écrit le fonctionnement de base de Numpy dans Jupyter Lab.
J'ai essayé l'API Google Cloud Vision pour la première fois
Je souhaite mapper le code EDINET et le numéro de valeur
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab