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.
** 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.
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
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é.
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)
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.
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.
Dans cet article, nous avons principalement présenté les deux points suivants.
pyro.sample
, pyro.plate
Comme mentionné au début, à partir de la prochaine fois, le livre "Introduction à l'analyse des données par la modélisation statistique bayésienne commençant par Practical Data Science Series R et Stan" (KS Information Science) Sur la base du livre spécialisé), nous procéderons sous forme de reproduction de l'exemple introduit dans le livre avec Pyro.
La prochaine fois, nous traiterons de la partie 3, chapitre 2, «Modèle de régression simple».Recommended Posts