Модель смеси PYMC3: помогите понять модель с несколькими переменными - PullRequest
1 голос
/ 08 января 2020

Допустим, у меня есть датафрейм с 4 переменными. Я хочу посмотреть, смогу ли я сгенерировать апостериорные гамма-смеси по всем переменным с целью найти кластеры для каждого наблюдения. Я предполагаю, что мне понадобится какое-то многомерное гамма-распределение? Но как бы я go об этом?

Вот пример кода pymc3 с одним параметром, который ищет смесь двух гамм (я выбрал произвольные параметры):

with pm.Model() as m:
     p = pm.Dirichlet('p', a = np.ones(2))

     alpha = pm.Gamma('means',alpha = 1, beta = 1, shape = 2)
     beta = pm.Gamma('means',alpha = 1, beta = 1, shape = 2)

     x = pm.Gammma('x', alpha, beta)

     comp_dist = pm.Gamma.dist(means, scale, shape = (2,))
     like = pm.Mixture('y', w = p,comp_dists = comp_dist, observed = data)

     trace = pm.sample(1000)

Итак, мой вопрос, как бы я расширить этот базовый c пример для нескольких переменных? Я предполагаю, что мне нужно определить отношения между переменными, чтобы как-то кодировать их в модели? Я чувствую, что понимаю основы моделирования смесей, но в то же время чувствую, что мне не хватает чего-то довольно фундаментального.

1 Ответ

1 голос
/ 26 января 2020

Вот как должен работать многомерный случай:

J = 4 # num dimensions
K = 2 # num clusters

with pm.Model() as m:
    p = pm.Dirichlet('p', a=np.ones(K))

    alpha = pm.Gamma('alpha', alpha=1, beta=1, shape=(J,K))
    beta  = pm.Gamma('beta',  alpha=1, beta=1, shape=(J,K))
    gamma = pm.Gamma.dist(alpha=alpha, beta=beta, shape=(J,K))

    like = pm.Mixture('y', w=p, comp_dists=gamma, observed=X, shape=J)

    trace = pm.sample(1000)

, где X.shape должно быть (N,J).


Примечание о нарушении симметрии

трудной частью будет решение проблем идентификации , но я думаю, что это выходит за рамки вопроса. Возможно, посмотрите, как учебник GMM нарушает симметрию с помощью функции pm.Potential. Я ожидаю, что высококоррелированные параметризации функции (й) правдоподобия, такие как alpha и beta, усугубят проблему, поэтому, возможно, рассмотрите возможность перехода к параметризации mu и sigma.

...