2017-02-13 5 views
2

Wie können deterministische Vektoroperationen in PYMC3 implementiert werden? zum Beispiel das Modell:Wie fügt man deterministische Vektoroperationen in PYMC3 hinzu?

M ~ Unif(-5, 5) 
S ~ Unif(0, |1/M|) 
data ~ Normal(M, S) 

M ist Mittelwert der Gauß-Beobachtungen und S ist Standardabweichung. Es wird angenommen, dass die Standardabweichung in [0, | 1/M |] gleichmäßig verteilt ist (der Absolutwert ist notwendig, wenn M negativ ist).

dieser Code:

import pymc3 as pm 
import numpy as np 
size = 20 
with pm.Model() as model: 
    # M ~ Unif(-5, 5) 
    M = pm.Uniform("M", -5., 5., shape=size) 
    # S ~ Unif(0, |1/M|) 
    # how to divide by vector and take abs val? 
    S = pm.Uniform("S", np.zeros(size), abs(1./M), shape=size) 
    data = pm.Normal("data", M, sd=S, shape=size) 

hat den Fehler:

File "/Users/mvd/anaconda/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 67, in get_test_val 
    str(defaults) + " pass testval argument or adjust so value is finite.") 
AttributeError: <pymc3.distributions.continuous.Uniform object at 0x10d1e1f10> has no finite default value to use, checked: ['median', 'mean', 'mode'] pass testval argument or adjust so value is finite. 

brauch ich Theanos verwenden, um diese Operation auf Vektoren zu erreichen?

Antwort

1

Ich denke, der problematische Teil Ihres Modells ist 1/M. Weil dies in Unendlichkeit geht, wenn M sich an 0 annähert. In Ihrem Beispiel ist der erste vorgeschlagene Wert für M 0 (der Mittelwert der unteren und oberen Grenzen), daher der Fehler von "kein endlicher Wert", den Sie bekommen (der Fehler) kommt von der Variable S).

Eine Möglichkeit, dies zu beheben, ist einen vernünftigen testval Wert M (aber in diesem Fall 0 alles) passieren, zum Beispiel:

M = pm.Uniform("M", -5., 5., shape=size, testval=0.1) 

Jetzt M wird auf 0,1 (statt 0) initialisiert Als Randnotiz denke ich intuitiv, dass NUTS Probleme haben wird, dieses Modell zu testen, daher denke ich, Metropolis könnte hier eine bessere Wahl sein, aber fühlen Sie sich frei, mit verschiedenen Samplern zu experimentieren.

+0

danke. auch: wann kann man in PYMC3 deterministische Ausdrücke von Zufallsvariablen wie '' abs (1./M) '' verwenden, ohne dafür benutzerdefinierte Funktionen zu verwenden? Warum funktioniert '' pm.Uniform ("S", np.zeros (Größe), abs (1./M), Form = Größe) '' einfach arbeiten? – jll

+0

Gern geschehen. Theano verstehen Operatoren wie '/' und Sie können Python/NumPy und dieano-Variablen im Allgemeinen mischen. Was Sie nicht direkt tun können, ist die Verwendung der Variablen theano für Funktionen, die Python/NumPy-Variablen erwarten. In diesem Fall können Sie den Dekorator 'as_op' verwenden. – aloctavodia

Verwandte Themen