下面就是基于k近邻的User_CF协同过滤推荐算法的完整代码,通过该代码,我们求出了每个用户的最相近的k个邻居,然后将这k个邻居观看的电影列表依次和该用户的电影列表做并集,就得到了该用户的推荐列表。代码有很多个函数块组成,下面依次对每个函数块展开解释:
readDatas():
读取数据,只取出前两列(用户id和电影id)将user_dict映射成一个字典,字典中的关键词即用户id,字典列表即为电影列表
getTrainsetAndTestset(dct):
得到训练数据和测试数据,在取出测试数据的时候,我们采取随机的方式,取出随机的20%的数据作为测试集,其余即为训练集,数学公式math.ceil需要注意啦
knn(trainset,k):
计算k近邻,就是便利训练集中的所有用户,然后将所有用户两两计算预先相速度,再按照他们的相似度降序排序,取出最大的k个,并且将每个用户u1的k近邻存在user_sims[u1]里面
get_recommendations(user_sims,o_set):
得到推荐列表,将k个邻居观看的电影列表依次和该用户的电影列表做并集,就得到了该用户的推荐列表
precisionAndRecall(pre,test):
计算准确度和召回率,预测的电影和真实的电影取个交集,然后计算准确度和召回率
# 开发时间:2021/11/25 9:55
import pandas as pd
import random
import math
from tqdm import tqdm
def readDatas():