Подтвердить что ты не робот

Как pymc представляет собой предыдущую функцию распределения и правдоподобия?

Если pymc реализует алгоритм Metropolis-Hastings, чтобы придумать образцы из задней плотности по интересующим параметрам, то для того, чтобы решить, перейти ли к следующему состоянию в цепочке марков, он должен иметь возможность оценить что-то пропорциональное к задней плотности для всех заданных значений параметров.

Задняя плотность пропорциональна функции правдоподобия, основанной на наблюдаемых данных, умноженных на предыдущую плотность.

Как каждый из них представлен в pymc? Как он вычисляет каждую из этих величин из объекта модели?

Интересно, может ли кто-нибудь дать мне подробное описание подхода или указать мне, где я могу его найти.

4b9b3361

Ответ 1

Для представления предыдущего вам нужен экземпляр класса Stochastic, который имеет два основных атрибута:

value : the variable current value
logp : the log probability of the variable current value given the values of its parents

Вы можете инициализировать предыдущее имя используемого вами дистрибутива.

Чтобы представить вероятность, вам нужен так называемый Data Stochastic. То есть экземпляр класса Stochastic, флаг observed которого установлен в True. Значение этой переменной не может быть изменено и оно не будет выбрано. Опять же, вы можете инициализировать вероятность с именем используемого вами дистрибутива (но не забудьте установить флаг observed на True).

Скажем, у нас есть следующая настройка:

import pymc as pm
import numpy as np
import theano.tensor as t

x = np.array([1,2,3,4,5,6])
y = np.array([0,1,0,1,1,1])

Мы можем запустить простую логическую регрессию со следующим:

with pm.Model() as model:
    #Priors
    b0 = pm.Normal("b0", mu=0, tau=1e-6)
    b1 = pm.Normal("b1", mu=0, tau=1e-6)
    #Likelihood
    z = b0 + b1 * x
    yhat = pm.Bernoulli("yhat", 1 / (1 + t.exp(-z)), observed=y)
    # Sample from the posterior
    trace = pm.sample(10000, pm.Metropolis())

Большая часть вышла из Chris Fonnesbeck iPython notebook здесь.