PyMC: установка ограничений при подгонке моделей

Я пытаюсь установить ограничения при подгонке переменных с помощью подхода MCMC с PyMC. Например, я определил следующие стохастические модели в PyMC.

import pymc as pm
a=pm.Uniform('a',lower=0.,upper=1.,value=0.2)
b=pm.Uniform('b',lower=0.,upper=1.,value=0.2)

Как определить модель так, чтобы b всегда было меньше или равно a? Это верный подход?

a=pm.Uniform('a',lower=0.,upper=1.,value=0.2)
b=pm.Uniform('b',lower=0.,upper=b,value=0.2) #used a as the upper bound for b

person user3695689    schedule 05.06.2014    source источник


Ответы (1)


Я полагаю, вы имеете в виду «верхний = a».

Я думаю, вы можете определить «b» как стохастическую переменную, зависящую от «a», как в следующем:

import pymc as pm
import numpy as np
import scipy.stats as scs

@pm.stochastic
def b(value=0.0, a=a):
    def logp(value, a):
        if 0 <= value <= a:
            return np.log(1/a)
        else:
            return -np.inf

    def random(a):
        return scs.uniform(0, a).rvs()

Теперь вы можете проверить переменную, вызвав 'b.random()', и вы должны увидеть равномерное распределение, ограниченное сверху 'a' ('a.value').

Ознакомьтесь с документацией PyMC по переменным.

person Dylan    schedule 14.12.2016