pytorch 笔记: 协同过滤user & item bias 实现

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch 笔记: 协同过滤user & item bias 实现相关的知识,希望对你有一定的参考价值。

0 原理部分

 

这里希望实现推荐系统笔记:无任何限制的矩阵分解_UQI-LIUWJ的博客-CSDN博客 中的两个bias

也就是我们希望用以下这两个矩阵的积来近似观测矩阵

1 导入库 & 数据集处理

import torch

a_r=np.array([[1,1],
            [1,2],
            [1,3],
            [1,4]])
b_r=np.array([[4,3,2,1],
            [1,1,1,1]])
m_r=torch.Tensor(a_r@b_r)

'''
我们希望我们最终能够学到a_r中的第二列,b_r中的第一行
'''

x=torch.arange(4)

2 模型部分

class Bias_MF(torch.nn.Module):
    def __init__(self):
        super(Bias_MF,self).__init__()
        self.f_a=torch.nn.Embedding(4,1)
        self.f_b=torch.nn.Embedding(4,1)
    
    def forward(self,x):
        a_x=self.f_a(x)
        b_x=self.f_b(x)
        #分别学习到第一个bias向量和第二个bias向量

        ones=torch.ones((4,1))
        self.a=torch.cat((ones,a_x),1)
        self.b=torch.cat((b_x,ones),1)
        print(self.a,'\\n',self.b.T)
        return torch.matmul(self.a,self.b.T)

3 创建模型 & 训练模型

bias=Bias_MF()

optimizer=torch.optim.Adam(bias.parameters(),lr=0.2)
#优化函数

loss_func=torch.nn.MSELoss()
#损失函数
for epoch in range(1000):
    prediction=bias(x)
    
    loss=loss_func(prediction,m_r)

    optimizer.zero_grad()
    loss.backward(retain_graph=True)
    optimizer.step()

    #pytorch老三样

4 结果比较

bias.a @ bias.b.T,a_r@b_r
'''
(tensor([[5.0000, 4.0000, 3.0000, 2.0000],
         [6.0000, 5.0000, 4.0000, 3.0000],
         [7.0000, 6.0000, 5.0000, 4.0000],
         [8.0000, 7.0000, 6.0000, 5.0000]], grad_fn=<MmBackward>),
 array([[5, 4, 3, 2],
        [6, 5, 4, 3],
        [7, 6, 5, 4],
        [8, 7, 6, 5]]))
'''

可以很好地学到结果

以上是关于pytorch 笔记: 协同过滤user & item bias 实现的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统笔记:基于贝叶斯的协同过滤

Neural Collaborative Filtering阅读笔记

Neural Collaborative Filtering阅读笔记

推荐系统笔记:基于模型的协同过滤

协同过滤基于评分物品算法理解

推荐系统笔记:使用分类模型进行协同过滤