userId movieId rating timestamp 0 1 2 3.5 2005-04-02 23:53:47 1 1 29 3.5 2005-04-02 23:31:16 2 1 32 3.5 2005-04-02 23:33:39 3 1 47 3.5 2005-04-02 23:32:07 4 1 50 3.5 2005-04-02 23:29:40数据存放在DataFrame中,python推荐算法,根据用户所给评分,计算两部电影之间的相似度,使用python写出函数
时间: 2024-03-23 10:40:53 浏览: 63
可以使用基于物品的协同过滤算法计算电影之间的相似度。具体步骤如下:
1. 将数据集转换为用户对电影的评分矩阵。
2. 计算电影之间的相似度矩阵,可以使用余弦相似度或皮尔逊相关系数等方法。
3. 对于每个用户,找到他所评分的电影的相似电影,计算加权平均值预测用户对未评分电影的评分。
下面是一个示例函数,使用余弦相似度计算电影之间的相似度:
```python
import numpy as np
import pandas as pd
def similar_movies(df, movieId, top_n=10):
# 转换为用户对电影的评分矩阵
ratings = df.pivot_table(index='userId', columns='movieId', values='rating').fillna(0)
# 计算电影之间的相似度矩阵
sim = np.dot(ratings.T, ratings) / (np.sqrt(np.sum(ratings ** 2, axis=0)).reshape(-1, 1) * np.sqrt(np.sum(ratings ** 2, axis=0)))
# 找到与指定电影最相似的电影
movie_idx = np.where(ratings.columns == movieId)[0][0]
similar_idx = np.argsort(-sim[movie_idx, :])[1:top_n+1]
similar_movies = ratings.columns[similar_idx]
return similar_movies
```
使用示例:
```python
# 加载数据
df = pd.read_csv('ratings.csv')
# 计算与电影29最相似的10部电影
similar_movies(df, 29, top_n=10)
```
阅读全文