数据从
数据训练集下载地址
下载,我选的是1MB版本的数据,大约10W+评分,9K+电影,600+用户。
使用ratings.csv,格式为userId,movieId,评分,时间戳。
步骤:
1、解析CSV文件,构建训练集。
2、计算两两物品分差平均值。
3、预测指定用户未评分物品的评分,推荐TopN。
SlopeOne算法理解起来简单,实现起来也简单,按照论文的描述,推荐结果也很不错。
当然有个不是问题的问题,因为要计算两两物品的分差的平均值,所以这一段比较耗时间。
#!/usr/bin/python3
import math
import csv
import datetime
import heapq
import json
from tqdm import tqdm
def buildTarin():
"""
处理数据集,
users=用户ID:{物品ID,评分}
items=物品ID:{用户ID,评分}
itemUsers=物品ID:[用户ID集]
userItems=用户ID:[物品ID集]
allItems=所有物品ID集
"""
startTime = datetime.datetime.now()
users = dict()
items = dict()
itemUsers = dict()
userItems = dict()
allItems = set()
with open('ratings.csv') as f:
f_csv = csv.reader(f)
for row in f_csv:
userId=int(ro