如何制作具有可分组分组特征的Edward模型?

时间:2019-06-10 14:28:40

标签: tensorflow edward

我正在尝试针对特征被分组且可计数的数据建立具有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()

0 个答案:

没有答案