美文网首页
推荐算法学习---分解机Factorization Machin

推荐算法学习---分解机Factorization Machin

作者: 羊老头 | 来源:发表于2019-08-14 21:00 被阅读0次

1引言

先回到先前几篇讲的问题,对一个评分矩阵预测缺失值。我们先把这个矩阵用ohehot编码转化成二进制,如下的图(来源课件):


这样原先的矩阵转化成矩阵和评分向量
那么对于之前的一条记录就变成:

第一个1在第u个位置,第二个1在n+i的位置,即

2分解机FM

对于给定的一个特征向量x=(x_1,x_2,...,x_n)^T,线性回归采用的函数是:
\hat{y}(x)=w_0+w_1x_1+w_2x_2+...+w_nx_n=w_0+\sum _{i=1}^nw_ix_i其中,w是模型参数,不过每个特征分量x_ix_j之间是独立的,所以我们还要考虑特征分量之间的相互关系,所以改写成
\hat{y}(x)=w_0+\sum _{i=1}^nw_ix_i+\sum _{i=1}^{n-1}\sum _{j=i+1}^nw_{ij}x_ix_j不过它还有一点缺欠,如果X_iX_j没有出现过交互(emmm有点绕,就是比如说X_i代表用户i,X_{j+n}代表物品j,该用户i没有给物品j打过分,那么两者就算是没有交互)那么系数W_{i,j+n}=0。这意味着没有出现过交互的特征分量,不能对相应的参数进行估计,如果训练集非常非常稀疏,那没有交互的特征分量是特别多的。
所以考虑把w_{ij}换个表达方式,
w_{ij}=P_{i\cdot}P_{j\cdot}^T其中,P_{i\cdot},P_{j\cdot}\epsilon R^{1\times d}
这样在用户i没有给物品j打分的情况下给物品k打分了,而其他用户如果给物品j和物品k打分接近,那么就可以用用户i给物品k的分数来估计物品j的分数。???好吧我不是很理解。
但是我们肯定是不用去估计的,因为参数最终是训练出来的,内在关系模型会自己学出来。

3预测规则

那么我就给出了最后我们的预测规则:
\hat r_{ui}=w_0+\sum _{j=1}^{n+m}w_jx_j+\sum _{j=1}^{n+m}\sum _{j'=j+1}^{n+m}x_jx_{j'}P_{j\cdot}P_{j'\cdot}^T对于一条记录(u,i,r_{ui}),只有x_rx_{n+i}是1,那么:
\hat r_{ui}=w_0+w_u+w_{n+i}+P_{u\cdot}P_{n+i}^T=\mu+b_u+b_i+U_{u\cdot}V_{i\cdot}^T发现没,就是之前的RSVD。
那为什么还要大费周章去分解矩阵?
如果我们还有一些和用户或者物品有关的信息,那我们可以将之与onehot编码排在一起,如图:


这样预测规则改写成:其中z=n+m+f,f是额外的信息。

4梯度下降法求解问题

跟前面讲的很像,直接贴图啦。
目标函数:

梯度下降: 更新规则: 伪代码

5小结

这样就可以把其他一些信息衔接起来了。
比较简单,课件没有实现任何代码,所以我也偷懒了。

6参考文献:

https://www.cnblogs.com/pinard/p/6370127.html

相关文章

网友评论

      本文标题:推荐算法学习---分解机Factorization Machin

      本文链接:https://www.haomeiwen.com/subject/oubnjctx.html