2016-11-11 8 views
1

Я пытаюсь пробовать простую модель категориального распределения с ранее установленным Дирихле. Вот мой код:PyMC3: PositiveDefiniteError при выборке a Категориальная переменная

import numpy as np 
from scipy import optimize 
from pymc3 import * 

k = 6 
alpha = 0.1 * np.ones(k) 

with Model() as model: 
    p = Dirichlet('p', a=alpha, shape=k) 
    categ = Categorical('categ', p=p, shape=1) 

    tr = sample(10000) 

И я получаю эту ошибку:

PositiveDefiniteError: Scaling is not positive definite. Simple check failed. Diagonal contains negatives. Check indexes [0 1 2 3 4] 

ответ

1

Проблема заключается в том, что NUTS не удается инициализировать. Одно из решений заключается в использовании другой пробник так:

with pm.Model() as model: 
    p = pm.Dirichlet('p', a=alpha) 
    categ = pm.Categorical('categ', p=p) 

    step = pm.Metropolis(vars=p) 
    tr = pm.sample(1000, step=step) 

Здесь я вручную присваивая p Метрополис, и позволяя PyMC3 назначить categ для правильного сэмплера.

 Смежные вопросы

  • Нет связанных вопросов^_^