[PYTHON] [Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ What is Pyro ~

Einführung

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.

Was ist Pyro?

** 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.

Installieren Sie Pyro

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 grundlegende Methoden

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.

1. Stichprobe nach Wahrscheinlichkeitsverteilung "pyro.sample"

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)

download.png 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.

2. Als Vektor "pyro.plate" deklariert

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.

Zusammenfassung

In diesem Artikel haben wir hauptsächlich die folgenden zwei Punkte eingeführt.

Recommended Posts

[Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ What is Pyro ~
[Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ Verteiltes Analysemodell, normales lineares Modell ~
[Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ What is Pyro ~
[Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ Verteiltes Analysemodell, normales lineares Modell ~
Versuchen Sie es mit einer probabilistischen Programmiersprache (Pyro).
Bewerten Sie die Leistung eines einfachen Regressionsmodells mithilfe der LeaveOneOut-Schnittstellenvalidierung
[Einführung in Python] Was ist Python, die derzeit leistungsstärkste Programmiersprache?
Was für eine Programmiersprache ist Python?
Versuchen Sie es mit einer probabilistischen Programmiersprache (Pyro).
Was ist die Aktivierungsfunktion?
Wettbewerbsprogrammierung ist was (Bonus)
Was ist die Schnittstelle für ...
Was ist die Rückruffunktion?
Erklären Sie die stochastische Gradientenabstiegsmethode, indem Sie sie in Python ausführen
[Python] Was ist @? (Über Dekorateure)
[Python] Was ist der sortierte Schlüssel?
Was ist das X Window System?
Was tun, wenn die Pipenv-Umgebung durch Aktualisierung von Homebrew beschädigt wird?
Die gefragteste Programmiersprache im Jahr 2020
[Python] Was wird durch Mehrfachvererbung geerbt?
Was ist Clivoa, ein Framework für die ETL-Verarbeitung?
[Unix] Was ist der Zombie-Prozess / Orphan-Prozess?
Was ist die Ursache für den folgenden Fehler?
[Golang] Go Sprachgrundlagen Was ist Goroutine?
Was ist mit 2017 rund um die Crystal-Sprache? (Täuschung)
Sekundärplanungsmethode nach interner Punktmethode
[Maschinelles Lernen] Was ist LP-Norm?
Was passiert mit dem Zugriffsprotokoll, wenn der Selenium-Webdriver automatisch auf die Website zugreift?