Я пытаюсь создать модель кластеризации с вероятностью Эдварда или тензорного потока для данных, функции которых сгруппированы и счетны.
Данные как ниже.
{'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()