我按照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
中的数据时,我获得了良好的表现。但是,当我评估U
和V
中的推断特征时,错误会发生很大变化并且会变得非常高。
我尝试了一个小维度的潜在空间(例如2)并检查潜在特征是否不是简单地置换。它们有时会被置换,但即使在重新排列之后,错误仍然很重要。
要抛出一些数字:对于从R
和U
生成的合成V
矩阵,正常分布(均值0和方差1),我可以得到平均绝对误差0.003在R
上,但在U
和V
上,它通常在0.5左右。
我知道这个模型是对称的,但我不确定其含义。我想问一下: