#P2852. 第2题-数据工程师

第2题-数据工程师

题目内容

你是一家视频网站的数据工程师,公司希望为用户提供个性化的电影推荐,以提升用户的观看体验。团队决定采用基于协同过滤的推荐算法,通过分析用户的历史评分数据,找出与目标用户兴趣相似的其他用户,进而推荐他们喜欢的电影。你的任务是编写一个程序,基于用户的评分数据,实现一个简单的用户协同过滤推荐系统。

请你帮助团队实现一个使用NumPyNumPy库的程序,基于协同过滤算法为指定用户生成电影推荐列表。具体要求如下: 1.读取输入数据集,包含(N)(N)个用户对(M)(M)部电影的评分矩阵,评分范围为151-5的整数,未评分记为00

22.读取目标用户的编号(U)(U),对其进行电影推荐。

3.3.计算用户之间的相似度,使用皮尔逊相关系数(PearsonCorrelationCoefficient)(Pearson CorrelationCoefficient )

4.4.根据相似度选取前(K)(K)个最相似的用户,默认(K3)(K-3)

5.5.根据相似用户的评分,预测目标用户未评分电影的评分。

输出目标用户最有可能喜欢的前(T)(T)部电影的编号,按照预测评分从高到低排序,若评分相同则按电影编号从小到大排序。

注意: 1.在预测评分时,即使所有相似用户都未对某个电影评分,也不应忽略该电影, 将预测评分设为目标用户的平均评分。 2.在计算相似度时,对于没有共同评分项目的用户,仍需将其相似度设为0,而 非忽略,以免遗漏潜在的相似用户。

输入描述

  • 第一行包含两个整数(N)(N)(M)(M),表示用户数量和电影数量。
  • 接下来的(N)(N)行,每行包含(M)(M)个整数,表示用户对电影的评分,未评分记为00,评分范围为151-5
  • 接下来一行包含一个整数(U)(U),表示目标用户的编号(从00开始)。
  • 最后一行包含一个整数(T)(T),表示需要推荐的电影数量。

输出描述

  • 输出一行,包含(T)(T)个整数,表示推荐的电影编号(从00开始),按预测评分从高到低排序,编号之间用空格分隔。

补充说明

皮尔逊相关系数

两个用户(u)和(v)的相似度计算公式为:

image

其中:

  • ()(|)为用户(u)(u)(v)(v)都评分过的电影集合。
  • (ru,i)(r_u,i)为用户(u)(u)对电影(i)(i)的评分。
  • (r\over{r})为用户(u)(u)的平均评分。
  • 评分预测

对于目标用户(u)(u)未评分的电影(j)(j),预测评分的计算公式为:

image

其中:

  • (K)(K)为与用户(u)(u)最相似的前(K)(K)个用户集合。
  • (rv,j)(r_v,j)为用户(v)(v)对电影jj的评分。

样例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

说明

  • 目标用户为编号00的用户
  • 计算用户之间的相似度,找到与目标用户最相似的33个用户。
  • 预测目标用户未评分的电影2244的评分。
  • 推荐评分最高的前22部电影,分别是电影编号2244