使用Edward

时间:2018-01-27 13:00:53

标签: matrix statistics bayesian factorization edward

我按照Edward's repo中的示例实现了概率矩阵分解模型(R = U'V):

# data
U_true = np.random.randn(D, N)
V_true = np.random.randn(D, M)
R_true = np.dot(np.transpose(U_true), V_true) + np.random.normal(0, 0.1, size=(N, M))

# model
I = tf.placeholder(tf.float32, [N, M])
U = Normal(loc=tf.zeros([D, N]), scale=tf.ones([D, N]))
V = Normal(loc=tf.zeros([D, M]), scale=tf.ones([D, M]))
R = Normal(loc=tf.matmul(tf.transpose(U), V), scale=tf.ones([N, M]))

在预测矩阵R中的数据时,我获得了良好的表现。但是,当我评估UV中的推断特征时,错误会发生很大变化并且会变得非常高。

我尝试了一个小维度的潜在空间(例如2)并检查潜在特征是否不是简单地置换。它们有时会被置换,但即使在重新排列之后,错误仍然很重要。

要抛出一些数字:对于从RU生成的合成V矩阵,正常分布(均值0和方差1),我可以得到平均绝对误差0.003在R上,但在UV上,它通常在0.5左右。

我知道这个模型是对称的,但我不确定其含义。我想问一下:

  1. 是否有可能以某种方式保证原始潜在性状的恢复?
  2. 如果是这样,怎么可能实现,最好是用爱德华?

0 个答案:

没有答案