有个叫什么代码的电影计算user-item两两相似度详细代码实现
def predict(uid, iid, ratings_matrix, user_similar):
'''
预测给定⽤户对给定物品的评分值
:param uid: ⽤户ID
:param iid: 物品ID
:param ratings_matrix: ⽤户-物品评分矩阵
:param user_similar: ⽤户两两相似度矩阵
:return: 预测的评分值
'''
print("开始预测⽤户<%d>对电影<%d>的评分..."%(uid, iid))
# 1. 出uid⽤户的相似⽤户
similar_users = user_similar[uid].drop([uid]).dropna()
# 相似⽤户筛选规则:正相关的⽤户
similar_users = similar_users.where(similar_users>0).dropna()
if pty is True:
raise Exception("⽤户<%d>没有相似的⽤户"% uid)
# 2. 从uid⽤户的近邻相似⽤户中筛选出对iid物品有评分记录的近邻⽤户
ids =set(ratings_matrix[iid].dropna().index)&set(similar_users.index)
finally_similar_users = similar_users.loc[list(ids)]
# 3. 结合uid⽤户与其近邻⽤户的相似度预测uid⽤户对iid物品的评分
sum_up =0# 评分预测公式的分⼦部分的值
sum_down =0# 评分预测公式的分母部分的值
for sim_uid, similarity in finally_similar_users.iteritems():
# 近邻⽤户的评分数据
sim_user_rated_movies = ratings_matrix.loc[sim_uid].dropna() # 近邻⽤户对iid物品的评分
sim_user_rating_for_item = sim_user_rated_movies[iid]
# 计算分⼦的值
sum_up += similarity * sim_user_rating_for_item
# 计算分母的值
sum_down += similarity
# 计算预测的评分值并返回
predict_rating = sum_up/sum_down
print("预测出⽤户<%d>对电影<%d>的评分:%0.2f"%(uid, iid, predict_rating)) return round(predict_rating,2)
if __name__ =='__main__':
ratings_matrix = load_data(DATA_PATH)
user_similar = compute_pearson_similarity(ratings_matrix, based="user")
# 预测⽤户1对物品1的评分
predict(1,1, ratings_matrix, user_similar)
# 预测⽤户2对物品28的评分
predict(2,28, ratings_matrix, user_similar)
实现预测全部评分predict_all
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论