用户协同过滤算法python
时间: 2024-04-30 19:15:16 浏览: 101
用户协同过滤算法是一种常用的推荐算法,它基于用户之间的相似性来进行推荐。在Python中,可以使用多种库和框架来实现用户协同过滤算法,例如pandas和scikit-learn。
用户协同过滤算法的实现步骤如下:
1. 数据准备:首先需要准备用户-物品评分矩阵,其中行表示用户,列表示物品,矩阵中的元素表示用户对物品的评分。
2. 相似度计算:计算用户之间的相似度,常用的相似度计算方法有余弦相似度和皮尔逊相关系数。
3. 预测评分:根据用户之间的相似度,预测目标用户对未评分物品的评分。
4. 推荐生成:根据预测评分,生成推荐列表。
以下是一个简单的示例代码,使用pandas和scikit-learn库实现用户协同过滤算法:
```python
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
# 准备用户-物品评分矩阵
ratings = pd.DataFrame({
'User1': [5, 3, 0, 0, 2, 0],
'User2': [0, 0, 4, 0, 0, 1],
'User3': [4, 0, 0, 3, 4, 0],
'User4': [0, 0, 4, 0, 0, 1],
'User5': [0, 0, 5, 0, 0, 2],
'User6': [2, 0, 0, 1, 2, 0]
}, index=['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6'])
# 计算用户之间的相似度
similarity_matrix = cosine_similarity(ratings.T)
# 预测评分
target_user = 'User1'
target_item = 'Item3'
target_rating = 0
target_user_index = ratings.columns.get_loc(target_user)
target_item_index = ratings.index.get_loc(target_item)
predicted_rating = 0
total_similarity = 0
for i in range(len(ratings.columns)):
if i != target_user_index and ratings.iloc[target_item_index, i] != 0:
predicted_rating += similarity_matrix[target_user_index, i] * ratings.iloc[target_item_index, i]
total_similarity += similarity_matrix[target_user_index, i]
if total_similarity != 0:
predicted_rating /= total_similarity
# 生成推荐列表
recommendations = ratings.loc[:, target_user][ratings.loc[:, target_user] == 0].index.tolist()
print("预测评分:", predicted_rating)
print("推荐列表:", recommendations)
```
阅读全文