[PYTHON] [Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ① ~ Qu'est-ce que Pyro ~

introduction

Dans cette série, nous présenterons comment effectuer une modélisation statistique à l'aide du langage de programmation probabiliste Pyro, avec quelques exemples. Un exemple apparaît dans le livre "Introduction à l'analyse des données par la modélisation statistique bayésienne en commençant par les séries R et Stan de la science des données pratiques" (KS Information Science Specialized Book). J'adopterai l'exemple à faire. Comme le titre l'indique, ce livre utilise R et Stan pour la modélisation bayésienne, mais dans cette série, j'aimerais résoudre le même exemple en utilisant Pyro. Je vais l'écrire dans le but d'approfondir ma compréhension de la modélisation statistique à travers le codage et de permettre d'appliquer une modélisation flexible utilisant Pyro à des données réelles. Je laisserai l'explication détaillée de la modélisation statistique elle-même aux livres et autres articles, et dans cet article j'écrirai principalement l'implémentation. En tant que lecteur. Imaginez quelqu'un qui s'applique à ce qui suit:

--Une personne qui comprend l'utilisation de base de Python

Dans la première partie de cette série, j'expliquerai les grandes lignes de Pyro et les méthodes de base pour la mise en œuvre de la modélisation à partir de la prochaine fois.

Qu'est-ce que Pyro

** Pyro ** est l'un des langages de programmation probabilistes écrits en Python développé par Uber AI Labs. Pytorch est utilisé pour le back-end, et bien sûr le GPU peut être utilisé. Les avantages de l'utilisation de Pyro sont les suivants, si vous traduisez ce qui est écrit sur le Site officiel.

--Versatilité: peut représenter n'importe quelle distribution de probabilité calculable. --Scale Virity: prend en charge de grands ensembles de données (en utilisant le calcul parallèle). --Minimum: Il est facile de comprendre le comportement car il réduit au maximum la complexité du code (?) --Flexibilité: le traitement peut être automatisé ou personnalisé.

En particulier, en tant que caractéristique du framework qui peut utiliser GPU, l'avantage (= évolutivité) qu'il peut calculer même pour un grand ensemble de données dans un moment pratique est un point remarquable. Les autres langages de programmation probabilistes qui peuvent utiliser des GPU incluent Edward2, mais les utilisateurs de Pytorch trouveront Pyro plus facile à utiliser.

Installer Pyro

Comme vous pouvez le voir dans la référence officielle, vous pouvez l'installer avec la commande suivante en utilisant pip.

pip install pyro-ppl

Méthodes de base Pyro

Pyro fournit les méthodes de base pour implémenter la modélisation statistique, mais les plus basiques d'entre elles, «pyro.sample» et «pyro.plate», sont présentées dans cet article. Ce sont des méthodes qui vous permettent de décrire facilement l'échantillonnage à partir d'une distribution de probabilité.

1. Échantillonnage selon la distribution de probabilité «pyro.sample»

L'échantillonnage selon une distribution de probabilité est indispensable comme cadre de modélisation statistique. De nombreuses distributions de probabilités (distribution normale, distribution binomiale, distribution de Poisson, ...) sont préparées dans Pyro. pyro.sample (<nom distinctif>, <distribution de probabilité>) Vous pouvez extraire un échantillon de la distribution de probabilité spécifiée par la description. Le code suivant extrait 100 000 échantillons i.i.d de la distribution normale standard et visualise la distribution des échantillons extraits pour confirmation.

import matplotlib.pyplot as plt
import pyro
import pyro.distributions as dist #dist implémente la distribution de probabilité disponible dans Pyro

#Effectuer un échantillonnage avec l'instruction for
samples = []
for _ in range(100000):
    #Extraire un échantillon de la distribution normale standard
    a_sample = pyro.sample("a_sample", dist.Normal(0, 1)) #De la distribution normale standard
    samples.append(a_sample)

#Visualisation
plt.hist(samples, bins=50)
plt.title("Distribution de l'échantillon à partir de la distribution normale standard(n=Cent mille)", fontsize=16)

download.png Vous pouvez voir qu'il est correctement échantillonné à partir de la distribution normale standard. C'est bien, mais avec Pyro, vous pouvez obtenir un échantillon similaire avec un style d'écriture plus simple.

2. Déclaré comme vecteur pyro.plate

Lors de la modélisation statistique, il est très courant d'extraire un grand nombre d'échantillons indépendants d'une distribution de probabilité particulière. L'écriture dans une instruction for comme «1» est inefficace en termes de description et de traitement. C'est là que «pyro.plate» est utile. pyro.plate (<nom du contexte>, <taille de l'échantillon>) Si vous échantillonnez avec pyro.sample dans le contexte déclaré par, vous obtiendrez un échantillon en tant que vecteur. Voici la mise en œuvre.

# pyro.Lors de l'acquisition en tant que vecteur à l'aide de la plaque
with pyro.plate("plate", size=100000):
    samples = pyro.sample("samples", dist.Normal(0, 1))

plt.hist(samples, bins=50)
plt.title("Distribution de l'échantillon échantillonné à partir de la distribution normale standard(n=Cent mille)", fontsize=16)

Le résultat doit être similaire à celui ci-dessus.

En utilisant «pyro.sample» et «pyro.plate», il est maintenant possible d'échantillonner à partir de la distribution de probabilité. Il existe d'autres fonctions indispensables à la modélisation statistique, mais je les expliquerai la prochaine fois avec des exemples concrets.

Résumé

Dans cet article, nous avons principalement présenté les deux points suivants.

Recommended Posts

[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ① ~ Qu'est-ce que Pyro ~
[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ③ ~ Modèle d'analyse distribuée, modèle linéaire normal ~
[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ① ~ Qu'est-ce que Pyro ~
[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ③ ~ Modèle d'analyse distribuée, modèle linéaire normal ~
Essayez d'utiliser un langage de programmation probabiliste (Pyro)
Évaluer les performances d'un modèle de régression simple à l'aide de la validation d'intersection LeaveOneOut
[Introduction à Python] Qu'est-ce que Python, le langage de programmation le plus puissant actuellement?
Quel type de langage de programmation est Python?
Essayez d'utiliser un langage de programmation probabiliste (Pyro)
Quelle est la fonction d'activation?
La programmation du concours, c'est quoi (bonus)
A quoi sert l'interface ...
Qu'est-ce que la fonction de rappel?
Expliquez ce qu'est la méthode de descente de gradient stochastique en l'exécutant en Python
[Python] Qu'est-ce que @? (À propos des décorateurs)
[python] Quelle est la clé triée?
Qu'est-ce que le système X Window?
Que faire si l'environnement Pipenv est corrompu en mettant à jour Homebrew
Le langage de programmation le plus recherché en 2020
[Python] Qu'est-ce qui est hérité par l'héritage multiple?
Qu'est-ce que clivoa, un framework pour le traitement ETL?
[Unix] Qu'est-ce que le processus zombie / processus orphelin?
Quelle est la cause de l'erreur suivante?
[Golang] Go les bases de la langue Qu'est-ce que Goroutine?
Qu'en est-il de 2017 autour du langage Crystal? (Illusion)
Méthode de planification secondaire par méthode de point interne
[Apprentissage automatique] Qu'est-ce que la norme LP?
Qu'advient-il du journal d'accès lorsque le site Web est automatiquement accédé par sélénium-webdriver