论文地址
基本原理
利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码,再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序。
- 优点:单隐层神经网络结构简单,可实现快速训练和部署;
- 缺点:表达能力较差;
网络结构图
代码实现
import torch
import torch.nn as nn
import numpy as np
import math
import argparse
import torch.utils.data as Data
import torch.optim as optim
def get_data(path, num_users, num_items, num_total_ratings, train_ratio):
fp = open(path + "ratings.dat")
user_train_set = set()
user_test_set = set()
item_train_set = set()
item_test_set = set()
train_r = np.zeros((num_users, num_items))
test_r = np.zeros((num_users, num_items))
train_mask_r = np.zeros((num_users, num_items))
test_mask_r = np.zeros((num_users, num_items))
random_perm_idx = np.random.permutation(num_total_ratings)
train_idx = random_perm_idx[0:int(num_total_ratings * train_ratio)]
test_idx = random_perm_idx[int(num_total_ratings * train_ratio):]
lines = fp.readlines()
''' Train '''
for itr in train_idx:
line = lines[itr]
user, item, rating, _ = line.split("::")
user_idx = int(user) - 1
item_idx = int(item) - 1
train_r[user_idx, item_idx] = int(rating)
train_mask_r[user_idx, item_idx] = 1
user_train_set.add(user_idx)
item_train_set.add(item_idx)
''' Test '''
for itr in test_idx