协同过滤基于评分物品算法理解
Posted PythonNew_Mr.Wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协同过滤基于评分物品算法理解相关的知识,希望对你有一定的参考价值。
# 导入必要的库 import numpy as np # 预测用户对物品的评分 # 定义一个函数,输入目标用户和目标物品的ID,返回预测的评分值 def predict_user_rating(user_count,user_id,item_id): # 创建用户数*用户数的数组 similarity_matrix = np.zeros((user_count, user_count)) numerator = 0 # 分子 denominator = 0 # 分母 # 遍历每一对用户 for i in range(user_count): for j in range(i+1,user_count): # 若i不等于j,则计算用户i和用户j的相似度 if i != j: # 创建一个掩码,用于选择用户i和用户j都评分过的物品 # 每个数组对比每个不同的数组 计算出布尔值数组 # 理解:计算数组之间的掩码,如果大于1 就说明共同评价过同1个物品 接着计算共同评分物品的相似度值 mask = np.logical_and(ratings[i] > 0, ratings[j] > 0) # 若存在共同评分的物品,则计算余弦相似度 if np.count_nonzero(mask) > 0: similarity_matrix[i][j] = np.dot(ratings[i][mask], ratings[j][mask]) / (np.linalg.norm(ratings[i][mask]) * np.linalg.norm(ratings[j][mask])) # 遍历每个用户 for i in range(user_count): # 若用户i对物品item_id评分过且与目标用户相似度大于0,则考虑该用户对预测评分的贡献 if ratings[i][item_id] > 0 and similarity_matrix[user_id][i] > 0: numerator += similarity_matrix[user_id][i] * ratings[i][item_id] denominator += similarity_matrix[user_id][i] # 若denominator为0,则返回0;否则,返回预测评分值 if denominator == 0: return 0 else: return numerator / denominator if __name__ == \'__main__\': # 创建用户评分矩阵 # X个用户对X个物品的评分记录,其中0表示未评分 ratings = np.array([[5, 3, 0, 1], [4, 0, 4, 0], [0, 2, 5, 2], [0, 0, 0, 3],[0, 0, 0, 3]]) user_id = 1 print(predict_user_rating(5,user_id,0)) print(predict_user_rating(5,user_id,1)) print(predict_user_rating(5,user_id,2)) print(predict_user_rating(5,user_id,3)) user_id = 2 print(predict_user_rating(5,user_id,0)) print(predict_user_rating(5,user_id,1)) print(predict_user_rating(5,user_id,2)) print(predict_user_rating(5,user_id,3))
主攻:Python 数据分析 web 机器学习 图像识别。。
副攻:JAVA WEB 安卓 大数据
以上是关于协同过滤基于评分物品算法理解的主要内容,如果未能解决你的问题,请参考以下文章