协同过滤的简介

本文介绍协同过滤推荐技术,包括基于用户和基于商品的两种方法。解释了如何通过用户行为和商品属性来计算相似度,从而实现个性化推荐。
协同过滤(collaborative filtering, CF)是当前推荐技术和算法中使用最广泛和认可度最高的算法之一。
一、概念
协同过滤指的是根据与某个人(或商品)的相似物的分析,来判断此人(或商品)的特点、价值和潜在属性。本质上是归纳法,即根据特殊的物品的特点,来推断一般性的这一大类物品的特点。比如想买一件衣服,你会向和自己穿着品味相似的人征求意见,原因是他们推荐的衣服可能对于我们也很合适。这既是协同过滤的核心思想。
协同过滤常用的有两种方法:基于用户的和基于商品的。
1、前者称为User-based CF,系统通过分析一个用户和哪些用户的特征比较像,然后看看这些用户喜欢哪些商品,进而可以将这些商品推荐给此用户。
2、后者称为Item-based CF,系统通过分析用户的购买行为来判断用户喜欢的商品类型,然后从这些商品类型中选出其他的商品来推荐给此用户。这里说的商品类型不仅是限制于平时的概念,如家电、衣服等,而且也可能是在数据或某些特征上很相似的一类商品,比如经常被同时购买。

二、基于用户的协同过滤
     当一个用户进入一个网站时,网站系统会找到和这个用户的爱好、兴趣、平时购买商品等相似的用户群,然后把这个用户群中经常购买的商品推荐给此用户。
1、首先要建立一个用户与商品偏好表

里面的数字表示用户对商品的喜好程度,数字越大说明越喜欢。这个表有多种生成方式:
(1)量化的方法有很多种,没有绝对正确的方法,只有最适合场景的方法。比如可以从用户对商品的打分、从购买的频繁程度、浏览的频繁程度等多个方面去量化。可以只取其中一种方法,或同时采用多种方法然后加权平均或取最大值。
(2)量化的范围有很多种。可以不设置上限,也设置上限以免某种商品过于突出导致与其他用户的匹配度都很低。
(3)商品的分类有很多种,可以用女装、男装来分类,也可以进一步细化,比如男士衬衫、女式长靴等。如果是垂直电商(在某一个行业或细分市场深化运营的电子商务模式),便适合进行细化分类,而如果是综合性电商,适合扩大分类粒度和范围。
2、根据此表,计算与待推荐用户(如ID=00001)和其他所有用户的相似度。
     要比较相似度,就要有计算相似度的算法。比较常用的是余弦相似性,向量a和向量b的余弦相似性的公式为

余弦相似度的范围为-1到1。如果a和b方向相同,不管长度是否相同,都会得到cos(a,b)=1,这是最高的相似度。
以用户00001和00002为例计算相似度:
(1)构造每个用户的向量。两个用户除了运动鞋之外都有偏好值,因此对应两个向量为 a=(10,7,2,4) 和 b=(8,7,8,5)。注意,不能将用户1的运动鞋默认为0,因为没有获取到运动鞋的偏好程度不代表此人对运动鞋不感兴趣。构造向量时要选择两个用户都有偏好值的商品才可以。
(2)计算cos(a,b)。

这个相似度接近1,因此相似度还是挺高的。
3、设置一个阈值,如0.8,查看相似度超过这个阈值的用户都有什么购物喜好,然后推荐给用户00001用户即可。
     除了用户与商品偏好表,还可以使用其他表来评价两个用户的相似度,比如年龄、性别、年收入等用户画像的特征,然后找到同一类人群所喜好的东西进行推荐。

 三、基于商品的过滤
     这个算法最早由亚马逊公司提出,给用户推荐那些和他们之前喜欢的商品相似的商品。算法步骤前面基于用户的协同过滤大致相同,也是需要计算商品之间的相似度,然后推荐相似度高的商品。
     但是,不同之处在于,并不是要建立一个商品属性的表来计算商品之间的余弦相似度。一是因为商品属性差异比较大,维度很广,做出来很可能是稀疏矩阵,不利于余弦相似度的计算 ;二是因为计算量太大,很难实现。所以转而通过分析用户对两种商品的购买情况来间接说明两种商品的相似度(更准确的说是正相关性)。
     核心思路:如果有很多人喜欢商品A的同时也喜欢商品B,那么商品A和商品B应该相关性很高。
     此时余弦相似度的计算公式变为:

其中,N(A)表示喜欢商品A的用户数量,N(B)表示喜欢商品B的用户数量,N(A^B)表示同时喜欢商品A和B的用户数量。
1、得到用户在一定时间段内购买商品的记录,如

注意,是在一段时期内买过的商品,而不是一次性购买的商品。
2、建立商品中间矩阵。

这个矩阵是在一定时间段内所有用户购买过两种商品的情况,比如有2个人在这段时期内既购买过象棋也购买过扑克牌。
3、计算任意两种商品之间的相似度。如象棋和围棋,则根据商品购买记录, N(A)=2,N(B)=2,根据商品中间矩阵,N(A^B)=1。因此

最后得到商品相似度表:

4、从某一个商品的一行中选择最大的几个商品进行推荐。如乒乓球的一行有扑克牌0.35和乒乓球拍1,因此会给买过乒乓球的人首推乒乓球拍,次推扑克牌。

四、特点分析
1、规模问题。用户较多时,基于用户的算法开销较大;商品较多时,基于商品的算法开销较大。因此需要进行优化,比如只分析购买频率或者购买数量超过一定数值的用户行为,或者被购买次数超过一定数量的商品,缩短分析时间段,等等。
2、冷启动问题。只有当一个新的商品被首次购买过之后,才有可能被推荐。因为两种算法的前提都是有用户去购买商品。当然,如果基于商品的算法的中间矩阵采用的不是用户购买情况而是商品本身的属性对比,那么是不会有冷启动问题的。
3、实时性。当一个用户购买一个新的商品之后,基于用户的算法的推荐结果可能不会产生变化,因为与这个用户相似的用户群可能不会产生变化。但是基于商品的算法很可能会有新的商品进行推荐。













### 协同过滤算法的基本概念 协同过滤是一种广泛应用于推荐系统的算法,其核心目标是通过分析用户行为数据或物品特征,向用户提供个性化推荐。该方法的核心思想在于利用具有相同兴趣或经历的群体喜好来预测当前用户的潜在兴趣[^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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值