什么是协同过滤算法
协同过滤算法是一种推荐系统算法,它根据用户对物品的历史行为以及多个用户之间的相似度,来预测用户对某个物品的评分或喜欢程度。简而言之,协同过滤算法就是根据用户群体的行为,来推测其未来行为的一种算法。
通常说的协同过滤算法分为两种类型:基于用户(User)的协同过滤算法和基于物品(item)的协同过滤算法。除此之外还有基于模型的方法。
相似度的计算
相似度是指两个对象在某些特征上的相同程度,通常用于比较文本、图像、音频等数据。相似度的计算方法因对象类型和应用场景不同而不同。
相似度的计算一般主要有一下四种:
- 杰卡德(Jaccard)相似度
- 余弦相似度(Cosine Similarity)
- 皮尔逊相关系数(Pearson Correlation Coefficient)
- 欧氏距离(Euclidean Distance)
- 对比欧氏距离和余弦相似度
基于用户(user)的协同过滤
基于用户的协同过滤(User-based Collaborative Filtering)是推荐系统中常用的一种方法。其主要思想是通过分析用户之间的相似性来进行商品、服务或内容的推荐。
AB用户拥有相同的背景和兴趣,基于用户之间的相似性,为A推荐用户B感兴趣且用户A没有接触过的内容。比如大学时候,我们都会问同专业的学长学姐应该选什么课。这个就是学长学姐和我们有一样的专业背景,基于他们过去经验上过的课,一定可以推荐出哪些考试简单给分又高的课,如果这个课很难给分又低,学长学姐们一定不会去上这个课。整个算法分为两个大的步骤:
基于物品(item)的协同过滤
基于物品的协同过滤(Item-based Collaborative Filtering)是推荐系统中一种常见的算法。其基本思想是:找出具有相似兴趣爱好的用户,根据这些用户之间的相似性和他们的行为历史,预测出某个用户对某个物品的兴趣,并给该用户推荐相应的物品。
基于物料之间的相似性,通过用户历史喜欢的物料,为其推荐相似的物料。这里面的物料相似性并不是基于物料之间标签重合度来计算相似度,Item CF是基于用户对于物料的历史行为数据来计算物料之间的相似度。Item-CF最早是由亚马逊公司提出的,目前在各大互联网公司应用都十分频繁。
第一步:计算商品之间的相似度;
第二步:基于目标用户历史浏览行为和商品之间的相似度,为其推荐感兴趣且未浏览过的商品;
UserCF和ItemCF的对比
(1)不同点
(2)共同缺点
-
不能彻底解决数据稀疏性问题
-
泛化能力弱:热门物品具有很强的头部效应,容易跟大量物品产生相似,而尾部物品由于特征向量稀疏,导致很少被推荐。(为解决这一问题,矩阵分解技术被提出)
-
无法利用更多的信息:一般是仅仅基于用户的行为数据(评价、购买、下载等),而不依赖于项的任何附加信息或者用户的任何附加信息,比如不依赖物品自身特征、用户年龄,性别等。
基于模型的方法
协同过滤是一种思想,很多时候大家在讲协同过滤时就讲User-CF和Item-CF,其实协同过滤中有很大一部分甚至说当前先进的协同过滤算法都是基于模型的协同滤。
基于图模型(Graph-based model)
第一步:将数据由表格转化为二分图;
第二步:基于两个顶点之间路径数、路径长度及经过的节点出度判断相关性
比如我们计算用户Node-A与物料Node-c和Node-e之间的相关性。首先我们统计Node-A到Node-c可以有几条路径,这里面只有一条路径可以到达就是A—a—B—c,长度是3。而Node-A与Node-e之间一共有两条路径可以到达,分别是A—b—C—e和A—d—D—e,长度均为3。所以Node-A和Node-e的相关性要强于NodeA与Node-c。同时我们再去比较同样是两条长度为3的路径“A—b—C—e”,哪条路径产生的链接更强了?我们分别去统计两个路径经过Node的出度,何为出度?出度就是该Node对外连接几个其他Node,比如Node-A的出度就是3。两条路径经过节点的出度分别是【3,2,2,3】和【3,2,3,3】,该某个节点的出度越大代表这个节点的链接越多,该节点和连接的单个节点的相关性就越弱。所以路径A—b—C—e产生的A与e的相关性要强于A—d—D—e产生的A与e的相关性。