Восстановление латентного фактора с вероятностной матричной факторизацией с использованием Эдварда
Я реализовал вероятностную матричную модель факторизации (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.
Я знаю, что эта модель симметрична, но я не уверен в последствиях. Я бы хотел спросить:
- Действительно ли возможно гарантировать восстановление первоначальных скрытых черт каким-либо образом?
- Если да, то как этого достичь, предпочтительно с помощью Эдварда?