После @ совета ChrisFonnesbeck, я написал небольшой учебник ноутбук о дополнительном предварительном обновлении. Его можно найти здесь:
https://github.com/pymc-devs/pymc3/blob/master/docs/source/notebooks/updating_priors.ipynb
В принципе, вам нужно обернуть ваши образцы жевательных в пользовательском непрерывном классе, который вычисляет KDE из них. Следующий код делает только что:
def from_posterior(param, samples):
class FromPosterior(Continuous):
def __init__(self, *args, **kwargs):
self.logp = logp
super(FromPosterior, self).__init__(*args, **kwargs)
smin, smax = np.min(samples), np.max(samples)
x = np.linspace(smin, smax, 100)
y = stats.gaussian_kde(samples)(x)
y0 = np.min(y)/10 # what was never sampled should have a small probability but not 0
@as_op(itypes=[tt.dscalar], otypes=[tt.dscalar])
def logp(value):
# Interpolates from observed values
return np.array(np.log(np.interp(value, x, y, left=y0, right=y0)))
return FromPosterior(param, testval=np.median(samples))
Затем определить до вашего параметра модели (скажем alpha
), вызвав from_posterior
функцию с именем параметра и образцы следов от задней части предыдущей итерации:
alpha = from_posterior('alpha', trace['alpha'])
AFAIK, это не реализовано в PyMC3. Тем не менее вы можете сделать это _manually_, просто используйте некоторые данные и ранее, используйте PyMC3 для обновления, чтобы вычислить задний, а затем использовать задний, как и раньше. Возможно, вы захотите задать этот вопрос [здесь] (https://gitter.im/pymc-devs/pymc) – aloctavodia
Нет, главное ограничение состоит в том, что после каждого обновления вам нужно будет преобразовать ваши посты в призму, прежде чем включать следующей партии данных. –
Чтобы уточнить: Я хочу построить модель, которая предсказывает, когда происходят определенные события. Всякий раз, когда происходит реальное событие, я хочу обновить свою веру. Могу ли я сделать это в pymc3? Насколько я понял, библиотека в основном поддерживает MCMC и поэтому не работает с простыми байесовскими обновлениями или не так ли? Я в основном пытался использовать библиотеку, потому что я могу создавать сложные модели, где, например, несколько моих событий имеют определенные знания. – Christian