我正在尝试使用爱德华或张量流概率对特征被分组和可数的数据创建聚类模型。
数据如下。
{'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()