使用knn算法代码实现:以下是一个用户对电影的评分记录数据集: 用户ID 电影ID 评分 1 101 5.0 1 102 4.0 1 103 3.5 2 101 2.0 2 102 2.5 2 103 5.0 2 104 4.0 3 101 2.5 3 103 2.0 3 104 4.5 3 105 4.0 4 102 3.0 4 103 4.0 4 105 3.5 5 101 3.0 5 102 4.0 5 104 2.0 其中,每行记录代表一位用户对一部电影的评分。例如,第一行记录表示用户ID为1的用户对电影ID为101的电影评分为5.0分。 设计一个KNN算法模型来实现电影推荐功能,并使用该模型为一位新用户推荐电影。假设这位新用户已经对一些电影进行了评分,你需要基于这些评分来为他推荐一部电影。 提示:可以考虑使用基于用户的协同过滤方法来实现该推荐系统。具体来说,可以使用KNN算法来寻找与该新用户最相似的若干个用户,然后基于这些用户对电影的评分来为该新用户推荐电影。
时间: 2024-02-28 21:54:04 浏览: 92
以下是使用KNN算法实现电影推荐的代码实现:
```python
import numpy as np
import operator
# 定义一个函数,读取数据集
def load_dataset():
dataset = np.array([[1, 101, 5.0],
[1, 102, 4.0],
[1, 103, 3.5],
[2, 101, 2.0],
[2, 102, 2.5],
[2, 103, 5.0],
[2, 104, 4.0],
[3, 101, 2.5],
[3, 103, 2.0],
[3, 104, 4.5],
[3, 105, 4.0],
[4, 102, 3.0],
[4, 103, 4.0],
[4, 105, 3.5],
[5, 101, 3.0],
[5, 102, 4.0],
[5, 104, 2.0]])
return dataset
# 定义一个函数,计算两个向量之间的欧式距离
def euclidean_distance(in_vec1, in_vec2):
return np.sqrt(np.sum(np.power(in_vec1 - in_vec2, 2)))
# 定义一个函数,基于KNN算法来推荐电影
def recommend_movies(user_id, dataset, k):
# 找出与该新用户最相似的K个用户
distances = {}
for i in range(len(dataset)):
if dataset[i][0] != user_id:
dist = euclidean_distance(dataset[i][1:], dataset[user_id - 1][1:])
distances[i] = dist
sorted_distances = sorted(distances.items(), key=operator.itemgetter(1))
k_nearest_neighbors = [sorted_distances[i][0] for i in range(k)]
# 统计这K个用户对所有电影的评分
movies = {}
for i in range(len(k_nearest_neighbors)):
neighbor_id = k_nearest_neighbors[i]
for j in range(1, len(dataset[0])):
if dataset[neighbor_id][j] != 0:
movies[j] = movies.get(j, 0) + dataset[neighbor_id][j]
# 对所有电影的评分求平均值,得到推荐结果
sorted_movies = sorted(movies.items(), key=operator.itemgetter(1), reverse=True)
return sorted_movies[0][0]
# 测试代码
if __name__ == '__main__':
dataset = load_dataset()
new_user = np.array([[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0]])
for i in range(len(new_user)):
print("为新用户 %d 推荐的电影是:%d" % (new_user[i][0], recommend_movies(new_user[i][0], dataset, 3)))
```
代码中,我们先定义了一个`load_dataset()`函数,用来读取电影评分数据集。然后,我们定义了一个`euclidean_distance()`函数,用来计算两个向量之间的欧式距离。接着,我们定义了一个`recommend_movies()`函数,用来基于KNN算法来推荐电影。在这个函数中,我们首先找出与该新用户最相似的K个用户,然后统计这K个用户对所有电影的评分,并对所有电影的评分求平均值,得到推荐结果。最后,我们测试了一下代码,为每个新用户推荐一部电影。
阅读全文