def recommend1(request):
USERID = int(request.GET["userIdd"]) + 1000
Insertposter.objects.filter(userId=USERID).delete()
#selectMysql()
read_mysql_to_csv('users/static/users_resulttable.csv',USERID) #追加数据,提高速率
ratingfile = os.path.join('users/static', 'users_resulttable.csv')
usercf = UserBasedCF()
#userid = '1001'
userid = str(USERID)#得到了当前用户的id
print(userid)
usercf.generate_dataset(ratingfile)
usercf.calc_user_sim()
usercf.recommend(userid) #得到imdbId号
def recommend(self, user):
''' Find K similar users and recommend N movies. '''
matrix.clear() #每次都要清空
K = self.n_sim_user # 这里等于20
N = self.n_rec_movie # 这里等于10
rank = dict() # 用户对电影的兴趣度
# print(self.initialset[user])
watched_movies = self.trainset[user] # user用户已经看过的电影 只包括训练集里的
# 这里之后不能是训练集
# watched_movies = self.initialset[user]
for similar_user, similarity_factor in sorted(user_sim_mat[user].items(),
key=itemgetter(1), reverse=True)[
0:K]: # itemgetter(1)表示对第2个域(相似度)排序 reverse=TRUE表示降序
for imdbid in self.trainset[similar_user]: # similar_user是items里面的键,就是所有用户 similarity_factor是值,就是对应的相似度
if imdbid in watched_movies:
continue # 如果该电影用户已经看过,则跳过
# predict the user's "interest" for each movie
rank.setdefault(imdbid, 0) # 没有值就为0
rank[imdbid] += similarity_factor #rank[movie]就是各个电影的相似度
# 这里是把和各个用户的相似度加起来,而各个用户的相似度只是基于看过的公共电影数目除以这两个用户看过的电影数量积
#print(rank[movie])
# return the N best movies
# rank_ = dict()
rank_ = sorted(rank.items(), key=itemgetter(1), reverse=True)[0:N] #类型是list不是字典了
for key,value in rank_:
matrix.append(key) #matrix为存储推荐的imdbId号的数组
#print(key) #得到了推荐的电影的imdbid号
print(matrix)
#return sorted(rank.items(), key=itemgetter(1), reverse=True)[0:N]
return matrix
错误原因可能是:
1.用户ID获取错误:在recommend1函数中,USERID变量可能获取不到正确的用户ID,导致推荐结果出错。
2.数据库操作错误:在recommend1函数中,Insertposter.objects.filter(userId=USERID).delete()可能出现操作数据库的错误,导致推荐结果出错。
3.读取文件错误:在recommend1函数中,read_mysql_to_csv('users/static/users_resulttable.csv',USERID)可能出现读取文件的错误,导致推荐结果出错。
4.推荐算法错误:在recommend函数中,usercf.recommend(userid)可能出现推荐算法的错误,导致推荐结果出错。
5.matrix没有被正确清空。
注意事项:
1.在研发电影推荐系统时,要确保用户ID获取正确,以免出现推荐结果错误的情况。
2.在操作数据库时,要确保操作正确,以免出现推荐结果错误的情况。
3.在读取文件时,要确保文件路径正确,以免出现推荐结果错误的情况。
4.在使用推荐算法时,要确保算法正确,以免出现推荐结果错误的情况。
5. 在每次推荐之前,要确保matrix被正确清空,以免推荐结果重复。
6. 在推荐时,要确保用户已经看过的电影不会被重复推荐。
7. 在计算用户相似度时,要确保计算结果的准确性。
watched_movies = self.trainset[user] 这行报错了吧,此时user=1001,self.trainset是什么,打印下看看。排查下self.trainset数据是怎么组织出来的
不知道你这个问题是否已经解决, 如果还没有解决的话:userid作为self.trainset的参数,数据类型不对吧