Ich verwende PyMC, um die posteriore Verteilung abzutasten, und bin auf eine Straßensperre gestoßen, bei der Priors aus Samples verwendet werden, keine Modelle. Meine Situation ist wie folgt:
- Ich habe einige empirische Daten für einen Parameter aus dem ich eine Wahrscheinlichkeitsverteilung p (z) berechne . Es ist kein Modell / keine Parametrisierung für die Verteilung von z bekannt . Ich habe nur empirische Werte. Es ist bekannt, dass z zwischen 0 und 30 liegt.
- Ich habe einige neue Beobachtungen und berechne die Wahrscheinlichkeit auch empirisch.
- Ich möchte, dass die hintere Verteilung mit den neuen Daten oben aktualisiert wird. (Dieser Posterior wird zum neuen Prior für die nächsten Beobachtungen. Spülen und wiederholen.)
Betrachten Sie zum Beispiel Folgendes:
import numpy as np
import matplotlib.pyplot as plt
# Ignore the fact that I'm using a mixture model. For all practical
# purposes, I do not know how this is generated.
old_data = np.array([3 * np.random.randn(1000) + 20,
3 * np.random.randn(1000) + 5,
4 * np.random.randn(1000) + 10])
new_data = np.array([4 * np.random.randn(50) + 8,
2 * np.random.randn(50) + 17])
plt.hist(filter(lambda x: 0 <= x <= 30, old_data.flatten()),
bins=range(0, 30), normed=True, alpha=0.5)
plt.hist(filter(lambda x: 0 <= x <= 30, new_data.flatten()),
bins=range(0, 30), normed=True, alpha=0.5)
plt.legend(['p(z)', 'p(x|z)'])
Bei PyMC verwenden alle vorhandenen Quellen, die ich gefunden habe (zum Beispiel dieses Kapitel von Bayesian für Hacker), eine Normalverteilung für die Beobachtungen ( observations = pm.Normal("obs", center_i, tau_i, value=data, observed=True)
) und eine einheitliche und normale vorherige Verteilung für die Präzision bzw. die Mittelwerte.
Ich bin mir nicht sicher, wie ich in PyMC behaupten soll, dass mein Prior diese Distribution hier und kein Modell ist. Ich habe auch versucht, den @Stochastic
Dekorator mit zu verwendenobserved=True
, aber ich glaube nicht, dass ich es vollständig verstehe. Außerdem kann ich immer noch keinen Weg finden, um die Angabe eines Modells zu vermeiden.
Verstehe ich den Zweck einer MCMC-Bibliothek grundlegend falsch? Wenn ja, wie soll ich vorgehen?
Alles, was ich wirklich möchte, ist, meine vorherige Überzeugung mit den neuen Beobachtungen zu aktualisieren, aber ich denke nicht, dass die Lösung so einfach ist wie das Multiplizieren der beiden Histogramme (und das Normalisieren).