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阅读笔记