itemcf python代码实现
时间: 2023-08-01 11:01:47 浏览: 165
ItemCF(Item-based Collaborative Filtering,基于物品的协同过滤算法)是一种用于推荐系统的算法,通过分析用户历史行为数据,找到用户喜欢的物品,并推荐给他们相似的物品。
下面是一个用Python实现ItemCF算法的简单代码示例:
```python
# 导入必要的库
import numpy as np
# 定义ItemCF类
class ItemCF:
def __init__(self, train_data):
self.train_data = train_data
self.item_sim_matrix = self.calculate_item_sim_matrix()
def calculate_item_sim_matrix(self):
# 初始化物品相似度矩阵
item_sim_matrix = np.zeros((self.train_data.shape[1], self.train_data.shape[1]))
# 计算物品相似度矩阵
for i in range(self.train_data.shape[1]):
for j in range(self.train_data.shape[1]):
if i == j:
continue
common_items = np.logical_and(self.train_data[:, i] > 0, self.train_data[:, j] > 0)
if np.sum(common_items) > 0:
item_sim_matrix[i][j] = np.sum(common_items) / np.sqrt(np.sum(self.train_data[:, i] > 0) * np.sum(self.train_data[:, j] > 0))
return item_sim_matrix
def recommend(self, user_id, top_k):
# 为指定用户推荐top_k个物品
user_actions = self.train_data[user_id]
sorted_item_sim = np.argsort(-self.item_sim_matrix, axis=1)
# 找到用户未观看过的且和用户历史观看过的物品相似度最高的top_k个物品
recommended_items = []
for i in range(len(sorted_item_sim[user_id])):
if user_actions[sorted_item_sim[user_id][i]] == 0:
recommended_items.append(sorted_item_sim[user_id][i])
if len(recommended_items) == top_k:
break
return recommended_items
# 测试代码
if __name__ == "__main__":
# 模拟用户历史观看数据
train_data = np.array([[1, 0, 1, 1, 0], [1, 1, 0, 1, 1], [0, 1, 1, 0, 1]])
itemcf = ItemCF(train_data)
recommended_items = itemcf.recommend(0, 3)
print("为用户0推荐的物品为:", recommended_items)
```
以上代码实现了一个简单的ItemCF算法,首先根据用户的历史观看数据计算出物品相似度矩阵,然后根据用户的历史观看数据和物品相似度矩阵为用户推荐top_k个物品。
这个代码示例仅为了说明ItemCF算法的基本原理,实际应用中可能需要考虑更多的因素,并进行优化。如数据预处理、相似度计算的优化等。
阅读全文