实现协同过滤算法的音乐推荐系统的代码实现
时间: 2023-09-28 10:07:31 浏览: 113
协同过滤算法是一种基于用户行为的推荐算法,它利用用户历史行为数据,比如用户听过哪些歌曲,评分等,通过计算用户之间的相似度,从而推荐相似用户喜欢的歌曲。
以下是一个简单的基于协同过滤算法的音乐推荐系统的代码实现,使用Python语言和pandas库:
```python
import pandas as pd
# 加载数据
ratings_data = pd.read_csv('ratings.csv')
music_data = pd.read_csv('music.csv')
# 用户-歌曲评分矩阵
ratings_matrix = ratings_data.pivot_table(index='user_id', columns='music_id', values='rating')
# 计算用户之间的相似度
similarity_matrix = ratings_matrix.corr(method='pearson')
# 推荐相似用户喜欢的歌曲
def recommend_music(user_id):
user_ratings = ratings_matrix.loc[user_id].dropna()
sim_users = pd.Series()
for music_id in user_ratings.index:
sim_users = sim_users.append(similarity_matrix[music_id].dropna())
sim_users = sim_users.groupby(sim_users.index).sum()
sim_users = sim_users.drop(user_id)
sim_users = sim_users.sort_values(ascending=False)[:10]
recommend = []
for music_id in ratings_matrix.columns:
if music_id in user_ratings.index:
continue
music_sim = similarity_matrix[music_id].dropna()
music_sim = music_sim.reindex(sim_users.index)
music_sim = music_sim.dropna()
if len(music_sim) == 0:
continue
predict_rating = (music_sim * user_ratings.reindex(music_sim.index)).sum() / music_sim.sum()
recommend.append((music_id, predict_rating))
recommend.sort(key=lambda x: x[1], reverse=True)
return recommend[:10]
# 示例
recommend_music(1)
```
其中,`ratings.csv`是用户对歌曲的评分数据,格式如下:
| user_id | music_id | rating |
| ------- | -------- | ------ |
| 1 | 1 | 4 |
| 1 | 2 | 3 |
| 2 | 1 | 5 |
| 2 | 3 | 4 |
| ... | ... | ... |
`music.csv`是歌曲的元数据,格式如下:
| music_id | title | artist | genre |
| -------- | --------------- | -------------- | ----- |
| 1 | Bohemian Rhapsody | Queen | Rock |
| 2 | Hotel California | Eagles | Rock |
| 3 | Thriller | Michael Jackson | Pop |
| ... | ... | ... | ... |
以上代码实现了一个简单的基于协同过滤算法的音乐推荐系统,可以根据用户的历史行为数据推荐相似用户喜欢的歌曲。
阅读全文