题解
题面描述
给定一个包含 N 个用户对 M 部电影评分的矩阵,评分范围为 1 到 5 的整数,未评分用 0 表示。要求对指定的目标用户 U,基于用户协同过滤算法,推荐其尚未评分的电影中最可能喜欢的前 T 部电影。
- 输入:
- 第一行包含两个整数 N 和 M,分别表示用户数量和电影数量。
- 接下来的 N 行,每行包含 M 个整数,表示用户对每部电影的评分,未评分记为 0。
- 接下来一行包含一个整数 U,表示目标用户的编号(从 0 开始)。
题目内容
你是一家视频网站的数据工程师,公司希望为用户提供个性化的电影推荐,以提升用户的观看体验。团队决定采用基于协同过滤的推荐算法,通过分析用户的历史评分数据,找出与目标用户兴趣相似的其他用户,进而推荐他们喜欢的电影。你的任务是编写一个程序,基于用户的评分数据,实现一个简单的用户协同过滤推荐系统。
请你帮助团队实现一个使用NumPy库的程序,基于协同过滤算法为指定用户生成电影推荐列表。具体要求如下:
1.读取输入数据集,包含(N)个用户对(M)部电影的评分矩阵,评分范围为1−5的整数,未评分记为0。
2.读取目标用户的编号(U),对其进行电影推荐。
3.计算用户之间的相似度,使用皮尔逊相关系数(PearsonCorrelationCoefficient)。
4.根据相似度选取前(K)个最相似的用户,默认(K−3)
5.根据相似用户的评分,预测目标用户未评分电影的评分。
输出目标用户最有可能喜欢的前(T)部电影的编号,按照预测评分从高到低排序,若评分相同则按电影编号从小到大排序。
注意:
1.在预测评分时,即使所有相似用户都未对某个电影评分,也不应忽略该电影,
将预测评分设为目标用户的平均评分。
2.在计算相似度时,对于没有共同评分项目的用户,仍需将其相似度设为0,而
非忽略,以免遗漏潜在的相似用户。
输入描述
- 第一行包含两个整数(N)和(M),表示用户数量和电影数量。
- 接下来的(N)行,每行包含(M)个整数,表示用户对电影的评分,未评分记为0,评分范围为1−5。
- 接下来一行包含一个整数(U),表示目标用户的编号(从0开始)。
- 最后一行包含一个整数(T),表示需要推荐的电影数量。
输出描述
- 输出一行,包含(T)个整数,表示推荐的电影编号(从0开始),按预测评分从高到低排序,编号之间用空格分隔。
补充说明
皮尔逊相关系数
两个用户(u)和(v)的相似度计算公式为:

其中:
- (∣)为用户(u)和(v)都评分过的电影集合。
- (ru,i)为用户(u)对电影(i)的评分。
- (r)为用户(u)的平均评分。
- 评分预测
对于目标用户(u)未评分的电影(j),预测评分的计算公式为:

其中:
- (K)为与用户(u)最相似的前(K)个用户集合。
- (rv,j)为用户(v)对电影j的评分。
样例1
输入
5 5
5 3 0 1 0
4 0 0 1 0
1 1 0 5 0
0 0 5 4 0
0 0 5 4 0
0
2
输出
2 4
说明
- 目标用户为编号0的用户
- 计算用户之间的相似度,找到与目标用户最相似的3个用户。
- 预测目标用户未评分的电影2和4的评分。
- 推荐评分最高的前2部电影,分别是电影编号2和4。