掘金 人工智能 07月04日 09:28
协同过滤推荐算法
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

协同过滤是推荐系统中一种基于用户行为数据的经典算法,通过分析用户历史偏好,为用户推荐相似的物品。文章详细介绍了基于用户和基于物品的两种协同过滤方法,阐述了其核心思想、实现步骤,并通过实例进行说明。此外,文章还探讨了协同过滤面临的关键问题如数据稀疏性、冷启动等,并提供了相应的解决方案。最后,文章给出了一个Python实现示例,帮助读者更好地理解协同过滤的原理和应用,并总结了协同过滤的优缺点。

💡基于用户的协同过滤(User-Based CF)的核心在于找到与目标用户兴趣相似的“邻居”用户,并将邻居用户喜欢的物品推荐给目标用户。具体步骤包括计算用户相似度(如余弦相似度、皮尔逊相关系数),选择Top-K邻居用户,并根据邻居用户的加权评分进行推荐。

✨基于物品的协同过滤(Item-Based CF)则侧重于找到与目标物品相似的其他物品,并将用户喜欢物品的相似物品推荐给该用户。其步骤包括计算物品相似度(常用调整余弦相似度),然后根据用户已交互的物品,找出相似物品并预测评分,最终推荐得分最高的物品。

🤔协同过滤面临数据稀疏性、冷启动问题和相似度计算效率等关键挑战。解决这些问题的方法包括使用矩阵分解、结合内容信息、利用社交网络信息、以及使用局部敏感哈希或分布式计算等。

👍协同过滤的优点在于无需领域知识,仅依赖用户行为数据,并且能够发现用户潜在的兴趣。但缺点是依赖高质量历史数据,对稀疏数据敏感,难以处理冷启动问题,且可解释性较弱。

💻文章提供了Python实现示例,通过余弦相似度计算用户之间的相似性,并基于相似用户的评分进行加权平均,预测目标用户可能的评分,最终返回预测评分最高的物品作为推荐结果。

  协同过滤(Collaborative Filtering)是推荐系统中最经典的算法之一,其核心思想是 “物以类聚,人以群分”,即通过分析用户的历史行为数据,找到与目标用户相似的用户群体或相似的物品,从而为目标用户推荐他们可能感兴趣的物品。

一、基于用户的协同过滤(User-Based CF)

核心思想:找到与目标用户兴趣相似的其他用户(“邻居”),将这些邻居喜欢的物品推荐给目标用户。

步骤:

s1.计算用户相似度:通过用户的历史行为(如评分矩阵)计算用户之间的相似度。常用方法有,  余弦相似度:将用户评分视为向量,计算向量夹角余弦值。  皮尔逊相关系数:修正用户评分偏置(如严格评分 vs 宽松评分)。

s2.选择邻居用户:筛选出与目标用户最相似的 Top-K 个用户。

s3.生成推荐:根据邻居用户的加权评分(相似度作为权重),预测目标用户对未交互物品的兴趣,推荐得分最高的物品。

  举例:用户A和用户B都喜欢电影《星际穿越》和《盗梦空间》,用户B还喜欢《信条》,则可将《信条》推荐给用户A。

二、基于物品的协同过滤(Item-Based CF)

核心思想:找到与目标物品相似的其他物品,将用户喜欢物品的相似物品推荐给该用户。

步骤:

s1.计算物品相似度:基于用户对物品的历史行为(如共现次数或评分模式)计算物品之间的相似度。

  常用方法:调整余弦相似度(消除用户评分尺度影响)。

s2.生成推荐:根据用户已交互的物品,找出相似物品并预测评分,推荐得分最高的物品。

  举例:喜欢《哈利波特》的用户通常也喜欢《指环王》,则可将《指环王》推荐给喜欢《哈利波特》的用户。

三、协同过滤的关键问题与解决方式

数据稀疏性:用户-物品矩阵通常非常稀疏(大部分用户未交互大部分物品)。

解决方式:使用矩阵分解(如SVD、ALS)降维,或结合内容信息(混合推荐)。

冷启动问题:新用户或新物品缺乏历史数据。

解决方式:结合基于内容的推荐或利用社交网络信息。

相似度计算的效率:大规模数据下计算用户/物品相似度耗时。

解决方式:使用局部敏感哈希(LSH)或分布式计算(如Spark)。

四、协同过滤的优缺点

优点:

  无需领域知识,仅依赖用户行为数据。

  能够发现用户潜在的、非显式的兴趣(如“啤酒与尿布”关联)。

缺点:

  依赖高质量的历史数据,对稀疏数据敏感。

  难以处理冷启动问题。

  可解释性较弱(尤其是矩阵分解类方法)。

五、Python实现示例

import numpy as np# 示例用户-物品评分矩阵(行表示用户,列表示物品)# 0表示未评分ratings = np.array([    [5, 3, 0, 1],    [4, 0, 0, 1],    [1, 1, 0, 5],    [1, 0, 0, 4],    [0, 1, 5, 4],])def similarity(user1, user2):    """计算两个用户之间的余弦相似度"""    # 找到两个用户都评分的物品    both_rated = np.logical_and(ratings[user1] > 0, ratings[user2] > 0)    if not np.any(both_rated):        return 0    # 提取共同评分的物品    user1_common = ratings[user1, both_rated]    user2_common = ratings[user2, both_rated]    # 计算余弦相似度    dot_product = np.dot(user1_common, user2_common)    norm1 = np.linalg.norm(user1_common)    norm2 = np.linalg.norm(user2_common)    if norm1 == 0 or norm2 == 0:        return 0    return dot_product / (norm1 * norm2)def recommend_items(user_id, top_n=2):    """为指定用户推荐物品"""    n_users, n_items = ratings.shape    # 计算目标用户与其他用户的相似度    similarities = [similarity(user_id, i) for i in range(n_users)]    recommendations = {}    # 遍历每个物品    for item_id in range(n_items):        # 如果目标用户已经对该物品评分,则跳过        if ratings[user_id, item_id] > 0:            continue        # 计算加权评分和相似度总和        weighted_sum = 0        sim_sum = 0        # 遍历每个用户        for other_user_id in range(n_users):            # 如果其他用户对该物品有评分            if ratings[other_user_id, item_id] > 0:                weighted_sum += similarities[other_user_id] * ratings[other_user_id, item_id]                sim_sum += abs(similarities[other_user_id])        # 计算预测评分        if sim_sum > 0:            predicted_rating = weighted_sum / sim_sum            recommendations[item_id] = predicted_rating    # 返回评分最高的top_n个物品    return sorted(recommendations.items(), key=lambda x: x[1], reverse=True)[:top_n]# 为用户0推荐物品user_id = 0recommended = recommend_items(user_id)print(f"为用户{user_id}推荐的物品:")for item_id, score in recommended:    print(f"物品{item_id},预测评分:{score:.2f}")

示例说明

  评分矩阵:使用一个二维数组表示用户对物品的评分,0 表示未评分。

  相似度计算:通过余弦相似度计算用户之间的相似性,只考虑两个用户都评分的物品。

  推荐计算:对于目标用户未评分的物品,基于相似用户的评分进行加权平均,预测目标用户可能的评分。

  结果展示:返回预测评分最高的物品作为推荐结果。

六、小结

  协同过滤因其简单高效,至今仍是推荐系统的基石技术之一,常与内容推荐、图神经网络其他方法结合使用。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

协同过滤 推荐系统 用户行为 数据稀疏性 冷启动
相关文章