In dieser Reihe werden wir anhand einiger Beispiele vorstellen, wie statistische Modelle mit der probabilistischen Programmiersprache Pyro durchgeführt werden. Ein Beispiel erscheint in dem Buch "Einführung in die Datenanalyse durch Bayesianische statistische Modellierung, beginnend mit der praktischen Data Science-Reihe R und Stan" (KS Information Science Specialized Book). Ich werde das zu übernehmende Beispiel übernehmen. Wie der Titel schon sagt, verwendet dieses Buch R und Stan für die Bayes'sche Modellierung, aber in dieser Serie möchte ich dasselbe Beispiel mit Pyro lösen. Ich werde es mit dem Ziel schreiben, mein Verständnis der statistischen Modellierung durch Codierung zu vertiefen und es zu ermöglichen, eine flexible Modellierung mit Pyro auf tatsächliche Daten anzuwenden. Ich werde die detaillierte Erklärung der statistischen Modellierung selbst Büchern und anderen Artikeln überlassen, und in diesem Artikel werde ich hauptsächlich die Implementierung schreiben. Als Leser. Stellen Sie sich jemanden vor, der sich für Folgendes bewirbt:
Als erster Teil dieser Reihe gibt Ihnen dieser Artikel einen Überblick über Pyro und die grundlegenden Methoden zur Implementierung der Modellierung ab dem nächsten Mal.
** Pyro ** ist eine der probabilistischen Programmiersprachen, die in Python geschrieben wurden und von Uber AI Labs entwickelt wurden. Pytorch wird für das Backend verwendet, und natürlich kann GPU verwendet werden. Die Verwendung von Pyro bietet folgende Vorteile, wenn Sie die auf der offiziellen Website geschriebenen Informationen übersetzen.
--Universalität: Kann jede berechenbare Wahrscheinlichkeitsverteilung darstellen.
- Skalierbarkeit: Unterstützt große Datenmengen (mit paralleler Berechnung). --Minimum: Das Verhalten ist leicht zu verstehen, da es die Komplexität des Codes so weit wie möglich reduziert (?)
- Flexibilität: Die Verarbeitung kann automatisiert oder angepasst werden.
Insbesondere als Merkmal des Frameworks, das GPU verwenden kann, ist der Vorteil (= Skalierbarkeit), den es selbst für einen großen Datensatz in einer praktischen Zeit berechnen kann, ein bemerkenswerter Punkt. Andere probabilistische Programmiersprachen, die GPUs verwenden können, sind Edward2, aber Pytorch-Benutzer werden feststellen, dass Pyro einfacher zu verwenden ist.
Wie Sie in der offiziellen Referenz sehen können, können Sie es mit dem folgenden Befehl mit pip installieren.
pip install pyro-ppl
Pyro bietet die grundlegenden Methoden zur Implementierung der statistischen Modellierung. Die grundlegendsten Methoden, "pyro.sample" und "pyro.plate", werden in diesem Artikel vorgestellt. Dies sind Methoden, mit denen Sie Stichproben aus einer Wahrscheinlichkeitsverteilung einfach beschreiben können.
Als Rahmen für die statistische Modellierung ist die Stichprobenentnahme nach einer Wahrscheinlichkeitsverteilung unverzichtbar. Viele Wahrscheinlichkeitsverteilungen (Normalverteilung, Binomialverteilung, Poisson-Verteilung, ...) werden in Pyro erstellt.
pyro.sample (<unterscheidender Name>, <Wahrscheinlichkeitsverteilung>)
Sie können anhand der Beschreibung eine Stichprobe aus der angegebenen Wahrscheinlichkeitsverteilung extrahieren.
Der folgende Code extrahiert 100.000 i.i.d-Proben aus der Standardnormalverteilung und visualisiert die Verteilung der extrahierten Proben zur Bestätigung.
import matplotlib.pyplot as plt
import pyro
import pyro.distributions as dist #dist implementiert die in Pyro verfügbare Wahrscheinlichkeitsverteilung
#Führen Sie eine Stichprobe mit for-Anweisung durch
samples = []
for _ in range(100000):
#Extrahieren Sie eine Probe aus der Standardnormalverteilung
a_sample = pyro.sample("a_sample", dist.Normal(0, 1)) #Aus der Standardnormalverteilung
samples.append(a_sample)
#Visualisierung
plt.hist(samples, bins=50)
plt.title("Probenverteilung aus der Standardnormalverteilung(n=Hunderttausend)", fontsize=16)
Sie können sehen, dass die Standardnormalverteilung ordnungsgemäß abgetastet wurde. Das ist in Ordnung, aber mit Pyro können Sie ein ähnliches Beispiel mit einem einfacheren Schreibstil erhalten.
Bei der statistischen Modellierung wird häufig eine große Anzahl unabhängiger Stichproben aus einer bestimmten Wahrscheinlichkeitsverteilung extrahiert. Das Schreiben einer for-Anweisung wie "1" ist sowohl hinsichtlich der Beschreibung als auch der Verarbeitung ineffizient.
Hier bietet sich pyro.plate an.
pyro.plate (<Kontextname>, <Stichprobengröße>)
Wenn Sie mit pyro.sample in dem von deklarierten Kontext abtasten, erhalten Sie ein Beispiel als Vektor. Unten ist die Implementierung.
# pyro.Bei der Erfassung als Vektor mit Platte
with pyro.plate("plate", size=100000):
samples = pyro.sample("samples", dist.Normal(0, 1))
plt.hist(samples, bins=50)
plt.title("Probenverteilung aus der Standardnormalverteilung(n=Hunderttausend)", fontsize=16)
Das Ergebnis sollte dem obigen ähnlich sein.
Mit pyro.sample
und pyro.plate
ist es nun möglich, aus der Wahrscheinlichkeitsverteilung abzutasten. Es gibt andere unverzichtbare Funktionen für die statistische Modellierung, aber ich werde sie ab dem nächsten Mal anhand konkreter Beispiele erläutern.
In diesem Artikel haben wir hauptsächlich die folgenden zwei Punkte eingeführt.
pyro.sample
, pyro.plate
Wie eingangs erwähnt, erscheint ab dem nächsten Mal das Buch "Einführung in die Datenanalyse durch Bayesianische statistische Modellierung, beginnend mit der praktischen Datenwissenschaft Serie R und Stan" (KS Information Science). Basierend auf dem Fachbuch) werden wir in Form der Reproduktion des im Buch mit Pyro vorgestellten Beispiels fortfahren.
Das nächste Mal werden wir uns mit Teil 3, Kapitel 2, "Einfaches Regressionsmodell" befassen.Recommended Posts