我正在尝试针对特征被分组且可计数的数据建立具有Edward或tensorflow概率的聚类模型。
数据如下。
{'data_point_1': [[0, 1], [1, 2], [3, 1], [2, 1]},
'data_point_2': [[1, 3], [2, 8], [2, 2], [5, 1],
...
}
在上述情况下,每个数据点具有四个组。在小组内部和小组之间存在一些相关性。
请让我知道如何在这种情况下用Edward编写聚类模型。
我尝试了一些建模,但从两个方面来看,没有任何效果。一,什么是模型的正确定义。第二,我该如何在爱德华表达这一点。以下代码是简单的试用版之一,实际上对我来说,这两者都不有意义。
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()