Как я могу сделать модель Эдварда с сгруппированными счетными элементами? - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь создать модель кластеризации с вероятностью Эдварда или тензорного потока для данных, функции которых сгруппированы и счетны.
Данные как ниже.

{'data_point_1': [[0, 1], [1, 2], [3, 1], [2, 1]},
'data_point_2': [[1, 3], [2, 8], [2, 2], [5, 1],
...
}

В приведенном выше случае каждая точка данных имеет четыре группы. И внутри группы, и между группами есть некоторые корреляции.

Пожалуйста, дайте мне знать, как написать модель кластеризации с Эдвардом для этого случая.

Я попробовал некоторые модели, и ничего не работает с точки зрения двух аспектов. Во-первых, каково правильное определение модели. Во-вторых, как я могу выразить это в Эдварде. Следующий код является одним из простых пробных версий, и на самом деле для меня это не имеет смысла в обоих случаях.

import edward as ed
from edward.models import Dirichlet, Categorical, Mixture, Beta
import tensorflow as tf

cluster_number = 2
d_size = 10

r = Dirichlet(tf.ones(cluster_number))
z = Categorical(r)
for i in range(d_size):
    exec(f"p_{i} = Beta(0.5, 0.5, sample_shape=cluster_number)")

latent_variable = tf.Variable(tf.zeros([d_size, 1]))
latent_variable_1 = tf.Variable(tf.zeros([d_size, 2]))

layer_1 = tf.reshape(tf.concat([eval(f"p_{i}") for i in range(d_size)], axis=0),
                     shape=[cluster_number, d_size])
layer_2 = tf.matmul(tf.cast(layer_1, dtype=tf.float32), latent_variable)

compornents = [layer_2] * cluster_number
m = Mixture(z, components)
out = tf.matmul(m, latent_variable_1)


T = 500
qr = Dirichlet(tf.ones(cluster_number))
qz = Categorical(tf.ones(cluster_number))
qp = Beta(tf.ones(cluster_number), tf.ones(cluster_number))

inference = ed.Gibbs({r: qr, z: qz, p: qp},
                     data={out: x_train})
inference.run()
...