欢迎访问宙启技术站
智能推送

Python中的协同过滤算法实现

发布时间:2024-01-20 03:35:03

协同过滤算法是一种基于用户行为数据的推荐算法,它通过分析用户的行为模式,从而找到相似的用户群体,进而推荐给用户他们可能感兴趣的物品。Python中可以使用多种方法实现协同过滤算法,包括基于用户的协同过滤和基于物品的协同过滤。

下面是一个使用Python实现基于用户的协同过滤算法的例子:

# 导入必要的库
import numpy as np

# 创建一个用户-物品评分矩阵
ratings = np.array([[5, 2, 0, 4, 3],
                   [1, 4, 2, 0, 4],
                   [3, 2, 5, 1, 0],
                   [0, 3, 1, 3, 2]])

# 计算用户之间的相似度
def similarity(user1, user2):
    # 取出两个用户都评过分的物品
    common_items = np.nonzero((user1 != 0) & (user2 != 0))[0]
    if len(common_items) == 0:
        return 0
    # 计算皮尔逊相关系数
    return np.corrcoef(user1[common_items], user2[common_items])[0, 1]

# 根据相似度计算用户的邻居
def get_neighbors(user_id, ratings_matrix, k=3):
    similarity_scores = []
    for user in ratings_matrix:
        if user_id != user:
            similarity_scores.append((user, similarity(ratings_matrix[user_id], ratings_matrix[user])))
    similarity_scores.sort(key=lambda x: x[1], reverse=True)
    return similarity_scores[:k]

# 根据邻居的评分进行推荐
def recommend_items(user_id, ratings_matrix, k=3):
    user_ratings = ratings_matrix[user_id]
    neighbor_ratings = [neighbor[0] for neighbor in get_neighbors(user_id, ratings_matrix, k)]
    recommendation = np.zeros_like(user_ratings)
    for neighbor in neighbor_ratings:
        recommendation += neighbor * user_ratings
    return recommendation

# 使用例子
user_id = 0
recommendations = recommend_items(user_id, ratings)
print("对用户%d的推荐物品为:" % user_id)
for i, rating in enumerate(recommendations):
    if ratings[user_id, i] == 0:
        print("物品%d" % i, "预测评分:", rating)

在以上例子中,我们首先创建了一个用户-物品评分矩阵,每个元素代表某个用户对某个物品的评分。然后定义了计算用户之间相似度的函数和根据相似度计算用户邻居的函数。最后,我们使用用户的邻居的评分进行推荐。

以上仅为一个简单的基于用户的协同过滤算法实现例子,实际应用中还可以考虑用户的偏好,评分的缺失值处理等其他因素。