加权knn做电影评分预测,给出示例代码
时间: 2023-09-13 16:04:34 浏览: 37
以下是使用 Python 实现基于加权 KNN 算法的电影评分预测的示例代码:
```python
import numpy as np
from sklearn.neighbors import NearestNeighbors
# 构造评分数据矩阵
# 行表示用户,列表示电影,每个元素表示评分(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]
weighted_ratings = weights * ratings_of_neighbors
predicted_rating = np.sum(weighted_ratings) / np.sum(weights)
print("Predicted rating for user {} and movie {}: {:.2f}".format(target_user, target_movie, predicted_rating))
```
这个示例代码与之前的示例代码非常相似,只是在计算加权平均值时使用了加权的评分数据。具体来说,我们将 K 个邻居的评分数据乘以对应的相似度,然后再计算加权平均值。这样做的好处是,更相似的邻居对预测结果的贡献更大,更不相似的邻居对预测结果的贡献更小。