协同过滤简介

最近在看个性化推荐的相关内容,网上就搜了下相关文章,看到了周涛的博文,在此转载下。

协同过滤是最早提出,研究最深入,商业应用最广泛的个性化技术。协同过滤技术服务的对象是个体,却利用了所有用户的信息。在以用户为中心,基于相似性的经典协同过滤算法中,首先通过比较历史数据,计算目标用户和其他用户的相似性,然后把和目标用户非常相似的用户喜欢的商品推荐给目标用户。计算相似性的办法非常多[1],在讨论关联规则时提到的方法,例如Cosine相似性(分母是两个用户购买商品数目乘积的平方根)和Jaccard相似性(分母是两个用户购买商品的并集大小),都是常用的。举个例子,如果用户A购买了商品1,2,3,用户B购买了商品2,3,4,5,则分母是共同购买的商品数2Cosine相似性等于2除以根号下34,约为0.577Jaccard相似性则是2除以5,等于0.4。得到相似性后,可以把所有其他用户对商品的评价按照相似性加权求和的方式排序,推荐给目标用户;也可以选择相似性最高的k个用户,只考虑他们的影响;还可以设定一个相似性阈值,只考虑相似性高于这个阈值的用户的影响。

上面讲到的协同过滤,是以用户为中心的。另外一种应用非常广泛的方法,是以商品为中心的,一般叫做基于商品的协同过滤。这种方法的基本思路是,分析目标用户购买过的商品,向其推荐和他曾经购买过的商品相似的商品。考虑互联网用户兴趣的实时性,一般而言只分析用户近期的购买行为,或者认为以前的购买行为对当前推荐的影响是随着时间递减的。在定义商品的相似性的时候,既可以通过行为,也就是看两个商品是否频繁被同一个用户购买过,也可以通过内容,也就是看两个商品的属性或者描述是否具有相似性。后者和接下来要讲的内容分析紧密结合,事实上,Amazon所使用的推荐算法的核心就是建立在内容分析基础上的基于商品的协同过滤[2]。由于图书的内容很丰富,判断内容之间的相似性非常准确,所以该方法在Amazon上效果很好。但是需要注意的是,这种方法移植到其他商品的推荐上,效果可能大打折扣。

基于商品的协同过滤方法有两个特别的优势:一是方便设计实时响应的算法,因为商品之间的相似性可以离线计算,这样的话,用户每次浏览新的商品后,包括放入购物车或者购买,容易实时计算并立刻更新用户看到的推荐商品栏;二是该方法可解释性强,因为在对用户进行推荐的时候,可以告诉用户推荐给你这个商品的主要原因是因为参考了你曾经购买或者浏览的若干商品——可解释性可以大大提高用户体验,在个性化电子邮件营销中有很大用途。与之相对,基于用户的协同过滤可以挖掘一些更深层次的潜在关联,帮助提高交叉销售量,也就是在用户购买某品类产品的时候,向用户推荐其他品类的产品,从而提高用户购买的多样性。这不仅仅是眼前提高了用户的客单价,更重要的是扩充了用户新的购物品类,从而可以整体提高该用户的价值。基于商品的协同过滤往往倾向于推荐同品类商品,在交叉销售方面价值较小。这两种方法遇到的一个共同的问题就是倾向于推荐热门产品,推荐的多样性和新颖性不够——如何在不伤害推荐精确性的前提下提高推荐的多样性和新颖性,是个性化推荐技术研究的重大挑战[3,4]

[1] L. Lü, T. Zhou, Link prediction in complex networks: a survey, Physica A 390 (2011) 1150-1170.

[2] G. Linden, B. Smith, J. York, Amazon.com recommendations: item-to-item collaborative filtering, IEEE Internet Computing 7(1) (2003) 76-80.

[3] C.-N. Ziegler, S. M. McNee, J. A. Konstan, G. Lausen, Improving recommendation lists through topic diversification, Proceedings of the 14th international conference on World Wide Web, ACM Press, New York, 2005.

[4] T. Zhou, Z. Kuscsik, J.-G. Liu, M. Medo, J. R. Wakeling, Y.-C. Zhang, Solving the apparent diversity-accuracy dilemma of recommender systems, Proceedings of the National Academy of Sciences of the United States of America 107 (2010) 4511-4515.

### 协同过滤算法的基本概念 协同过滤是一种广泛应用于推荐系统的算法,其核心目标是通过分析用户行为数据或物品特征,向用户提供个性化推荐。该方法的核心思想在于利用具有相同兴趣或经历的群体喜好来预测当前用户的潜在兴趣[^2]。 #### 工作方式 协同过滤的工作流程主要依赖于两个方面:一是收集用户的历史行为数据;二是基于这些数据挖掘出用户之间的相似性或物品间的关联关系。最终,通过对相似用户的选择偏好或相似物品的相关度进行加权计算,得出推荐列表[^1]。 --- ### 协同过滤的主要类型及其原理 #### 1. **基于用户的协同过滤 (User-Based Collaborative Filtering)** 这种类型的协同过滤关注的是用户之间的相似性。它假设如果两位用户在过去表现出类似的偏好,则他们在未来也可能有相同的倾向。因此,当需要为某个用户生成推荐时,会寻找与其最相似的一组用户,并根据这组用户喜欢但目标用户尚未接触过的项目来进行推荐[^4]。 #### 2. **基于项目的协同过滤 (Item-Based Collaborative Filtering)** 与基于用户的方法不同,这种方法更注重物品本身的特性以及它们之间是否存在某种联系。例如,两部电影可能因为被同一群观众喜爱而被认为彼此相关联。于是,在实际操作过程中,系统倾向于找出那些经常一起被评价较高的商品组合起来提供给特定消费者作为建议选项[^3]。 #### 3. **模型驱动型 vs 数据记忆型** 除了上述两种经典形式外,还有从实现角度区分出来的两类CF技术路径——即“基于内存”的方法(Memory-based)和“建模导向”的策略(Model-based) 。前者直接依据原始交互矩阵执行运算处理得到结果; 后者则先构建起描述整个体系结构规律性的统计学模型, 再据此推导未知部分数值完成任务[^4]. --- ### 实现过程中的关键技术点 为了有效实施以上提到的各种版本的协作式筛选方案,通常还需要解决以下几个关键环节: - 构造合适的表示空间以便量化比较个体间差异程度; - 设计高效的近似查询手段加速最近邻居检索效率; - 处理稀疏性和冷启动等问题提升整体性能表现等等。 以下是简单的伪代码展示如何计算用户相似度并生成推荐: ```python from sklearn.metrics.pairwise import cosine_similarity import numpy as np def calculate_user_similarity(user_item_matrix): """ 计算用户之间的余弦相似度 """ similarity_matrix = cosine_similarity(user_item_matrix) return similarity_matrix def generate_recommendations(target_user_id, user_similarities, user_item_matrix, top_n=5): """ 根据相似用户生成推荐 """ target_preferences = user_item_matrix[target_user_id] # 找到与目标用户最相似的其他用户 similar_users = np.argsort(-user_similarities[target_user_id])[:top_n] recommendations = [] for user in similar_users: liked_items = np.where(user_item_matrix[user] > 0)[0] recommendations.extend(liked_items) # 过滤掉目标用户已经喜欢过的内容 final_recs = list(set(recommendations) - set(np.where(target_preferences > 0)[0])) return final_recs ``` --- ### 总结 综上所述,无论是哪种具体的变体形态,所有的协同过滤机制本质上都是围绕着发现隐藏模式这一主题展开探索实践工作的成果体现而已[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值