自己实现knn做电影评分预测代码
时间: 2023-10-04 08:04:06 浏览: 76
以下是使用 Python 实现基于 KNN 算法的电影评分预测的示例代码,不使用任何第三方库:
```python
import numpy as np
# 构造评分数据矩阵
# 行表示用户,列表示电影,每个元素表示评分(0表示未评分)
ratings = np.array([
[5, 3, 0, 1, 4, 5],
[4, 0, 4, 4, 3, 2],
[0, 3, 3, 5, 4, 1],
[5, 4, 3, 3, 0, 2],
[3, 4, 5, 0, 5, 3],
[2, 0, 1, 4, 0, 4]
])
# 要预测的用户和电影
target_user = 2
target_movie = 2
# 计算目标用户与其他用户的相似度
# 这里使用余弦相似度
def cosine_similarity(x, y):
return np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
similarities = []
for i in range(ratings.shape[0]):
if i == target_user:
continue
similarity = cosine_similarity(ratings[target_user], ratings[i])
similarities.append((i, similarity))
# 按照相似度排序,并选择最相似的 K 个用户
K = 3
similarities.sort(key=lambda x: x[1], reverse=True)
neighbors = [sim[0] for sim in similarities[:K]]
# 计算 K 个用户对目标电影的评分的加权平均值
weights = [sim[1] for sim in similarities[:K]]
ratings_of_neighbors = ratings[neighbors, target_movie]
predicted_rating = np.dot(weights, ratings_of_neighbors) / np.sum(weights)
print("Predicted rating for user {} and movie {}: {:.2f}".format(target_user, target_movie, predicted_rating))
```
这个示例代码中使用了 `numpy` 库来计算相似度和排序。具体来说,我们首先定义了一个 `cosine_similarity` 函数来计算余弦相似度。然后,我们遍历所有用户,计算目标用户与其他用户的相似度,并将结果存储在一个列表中。接下来,我们按照相似度排序,并选择最相似的 K 个用户作为邻居。最后,我们计算邻居对目标电影的评分的加权平均值,得到预测评分。
阅读全文