keras:在源内部计算出权重以输入乘法

T3J*_*J45 5 python collaborative-filtering keras tensorflow

直觉:

我创建了一个自动编码器,尽管它是针对电影用户的评分矩阵。我正在尝试使用协作过滤(CF)重新创建预测时的输出。

数据集:

下面的数据集是输入的方式。我在这里将其转换为Pivot矩阵:我们将其称为 A_set

MovieId 1    2    3    4    5    6    7  ...
UserId
0       5.0  0.0  0.0  0.0  2.0  0.0  0.0  ...
1       0.0  0.0  0.0  2.0  2.0  0.0  0.0  ...
2       5.0  0.0  1.0  0.0  0.0  0.0  0.0  ...
3       1.0  0.0  0.0  0.0  3.0  0.0  3.0  ... 
Run Code Online (Sandbox Code Playgroud)

还创建了它的转置MovieIds,在行和UserIds列中。我们称这个为B_set

问卷:

对此,我有以下查询:

  • 在神经网络中向自动编码器(使用Keras制造)提供输入时,什么集合(A / B)可以称为协作过滤(CF)?
  • 我试图区分基于用户的CF和基于项目的CF
  • 现在我内部知道以下公式如何在数学上起作用。我只是不确定在Keras / TF代码中是否也能以相同的方式工作。我应该考虑将哪一个(A / B组)作为我的CF?

Y = Theta(转置)输入(X)+ C

  • Theta是权重矩阵,我需要查看代码是否转置了Theta矩阵,然后求解该方程式,或者它已经转置了,我给出的输入必须是B_set对CF公正。

我尝试提供A_set输入作为输入,然后在对输入进行训练/建模后检查权重。检查代码段:

w1 = model.get_weights()
train_set.shape # (5436, 3706)
w1[0].shape     # (3706, 529)
w1[0].T.shape   # (529, 3706)
w1[1].T.shape   # (529,)
w1[2].T.shape   # (264, 529)
w1[3].T.shape   # (264,)
w1[4].T.shape   # (132, 264)
w1[5].T.shape   # (132,)
w1[6].T.shape   # (264, 132)
w1[7].T.shape   # (264,)
w1[8].T.shape   # (529, 264)
w1[9].T.shape   # (529,)
w1[10].T.shape  # (3706, 529)
w1[11].T.shape  # (3706,)
Run Code Online (Sandbox Code Playgroud)

现在某种意义上讲,这可能是在Keras源代码中的某个地方进行转置(请指出我的位置!),否则Matrix乘法将是不可能的。然而,关于哪个(A / B组)可以称为CF的问题仍然存在。