[RecommendationSystem]推荐系统之协同过滤(CF)算法详解和实现Poll的笔记

集体智慧(CollectiveIntelligence)并不是Web2.0时代特有的,只是在Web2.0时代,大家在Web应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是我们在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。

Wikipedia和Google是两个典型的利用集体智慧的Web2.0应用:

协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤(CollaborativeFiltering,简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题:

协同过滤相对于集体智慧而言,它从一定程度上保留了个体的特征,就是你的品位偏好,所以它更多可以作为个性化推荐的算法思想。可以想象,这种推荐策略在Web2.0的长尾中是很重要的,将大众流行的东西推荐给长尾中的人怎么可能得到好的效果,这也回到推荐系统的一个核心问题:了解你的用户,然后才能给出更好的推荐。

前面作为背景知识,介绍了集体智慧和协同过滤的基本思想,这一节我们将深入分析协同过滤的原理,介绍基于协同过滤思想的多种推荐机制,优缺点和实用场景。

首先,要实现协同过滤,需要一下几个步骤

要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍:

以上列举的用户行为都是比较通用的,推荐引擎设计人员可以根据自己应用的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。

在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式:

收集了用户行为数据,我们还需要对数据进行一定的预处理,其中最核心的工作就是:减噪和归一化。

进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是[0,1]或者[-1,1]的浮点数值。

当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐,这就是最典型的CF的两个分支:基于用户的CF和基于物品的CF。这两种方法都需要计算相似度,下面我们先看看最基本的几种计算相似度的方法。

相似度的计算

关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。在推荐的场景中,在用户-物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。下面我们详细介绍几种常用的相似度计算方法:

最初用于计算欧几里德空间中两个点的距离,假设x,y是n维空间的两个点,它们之间的欧几里德距离是:

可以看出,当n=2时,欧几里德距离就是平面上两个点的距离。

当用欧几里德距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大

sx,sy是x和y的样品标准偏差。

Cosine相似度被广泛应用于计算文档数据的相似度:

Tanimoto系数也称为Jaccard系数,是Cosine相似度的扩展,也多用于计算文档数据的相似度:

相似邻居的计算

介绍完相似度的计算方法,下面我们看看如何根据相似度找到用户-物品的邻居,常用的挑选邻居的原则可以分为两类:图1给出了二维平面空间上点集的示意图。

不论邻居的“远近”,只取最近的K个,作为其邻居。如图1中的A,假设要计算点1的5-邻居,那么根据点之间的距离,我们取最近的5个点,分别是点2,点3,点4,点7和点5。但很明显我们可以看出,这种方法对于孤立点的计算效果不好,因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度,比如图1中,点1和点5其实并不是很相似。

与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为K的区域中的所有点都作为当前点的邻居,这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。如图1中的B,从点1出发,计算相似度在K内的邻居,得到点2,点3,点4和点7,这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。

基于用户的CF(UserCF)

基于用户的CF的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图2给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居-用户C,然后将用户C喜欢的物品D推荐给用户A。

基于物品的CF(ItemCF)

基于物品的CF的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图3给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A的用户都喜欢物品C,得出物品A和物品C比较相似,而用户C喜欢物品A,那么可以推断出用户C可能也喜欢物品C。

UserCFvs.ItemCF

前面介绍了UserCF和ItemCF的基本原理,下面我们分几个不同的角度深入看看它们各自的优缺点和适用场景:

ItemCF和UserCF是基于协同过滤推荐的两个最基本的算法,UserCF是很早以前就提出来了,ItemCF是从Amazon的论文和专利发表之后(2001年左右)开始流行,大家都觉得ItemCF从性能和复杂度上比UserCF更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

相反的,在现今很流行的社交网络站点中,UserCF是一个更不错的选择,UserCF加上社会网络信息,可以增加用户对推荐解释的信服程度。

研究推荐引擎的学者们在相同的数据集合上分别用UserCF和ItemCF计算推荐结果,发现推荐列表中,只有50%是一样的,还有50%完全不同。但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。

关于推荐的多样性,有两种度量方法:

第一种度量方法是从单个用户的角度度量,就是说给定一个用户,查看系统给出的推荐列表是否多样,也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,ItemCF的多样性显然不如UserCF的好,因为ItemCF的推荐就是和以前看的东西最相似的。

前面我们大部分都是从推荐引擎的角度考虑哪个算法更优,但其实我们更多的应该考虑作为推荐引擎的最终使用者--应用用户对推荐算法的适应度。

对于UserCF,推荐的原则是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西,但如果一个用户没有相同喜好的朋友,那UserCF的算法的效果就会很差,所以一个用户对的CF算法的适应度是和他有多少共同喜好用户成正比的。

ItemCF算法也有一个基本假设,就是用户会喜欢和他以前喜欢的东西相似的东西,那么我们可以计算一个用户喜欢的物品的自相似度。一个用户喜欢物品的自相似度大,就说明他喜欢的东西都是比较相似的,也就是说他比较符合ItemCF方法的基本假设,那么他对ItemCF的适应度自然比较好;反之,如果自相似度小,就说明这个用户的喜好习惯并不满足ItemCF方法的基本假设,那么对于这种用户,用ItemCF方法做出好的推荐的可能性非常低。

邻居模型通常也被称为k-最近邻模型,或者简称为kNN。KNN模型可以获得精确的推荐结果并为结果给出合理的解释,它们是CF推荐系统中最早被使用也是直至目前最流行的一类模型。

PS:以下公式和图片转自博主自己的CSDN博客。

为了获得用户对产品的评分预测值,kNN模型一般包括以下三步:

1.计算相似度这步中计算每对产品之间的相似度(similarity)。一些被广泛使用的相似度测度包括:Pearsoncorrelation:

THE END
1.科技创新前沿,CF科技网站新闻速览CF科技网站致力于成为连接科技爱好者与科技世界的桥梁,通过发布最新的科技资讯、深度报道、技术解析等内容,帮助用户紧跟科技发展的步伐,洞察行业趋势,网站内容涵盖多个热门科技领域,包括但不限于人工智能、物联网、生物技术等,旨在为用户提供一个全面、多元的科技信息平台。 http://yili.jinyuen.com.cn/post/27410.html
2.有哪些学习算法的网站推荐?免费的公益性网上程序设计题库,包含3000多道饶有趣味的程序设计题,是个提供编程、算法题目的网站,兼容https://www.zhihu.com/question/20368410/answer/726247443
3.机电类网站模板/百度查重免费针对协同过滤的两种推荐算法——userCF算法、itemCF算法来分别解决物品冷启动的问题。 userCF算法 针对推荐列表并不是给用户展示内容的唯一列表(大多网站都是这样的)的网站 当新物品加入时,总会有用户通过某些途径看到,那么当一个用户对其产生反馈后,和他历史兴趣相似的用户的推荐列表中就有可能出现该物品,从而更多的http://www.nhpp.cn/news/278227.html
4.采用ItemCF算法时间的推荐系统可能会遇到多样性不足,推荐新颖度低亲,您好很高兴为您解答:采用ItemCF算法时间的推荐系统可能会遇到多样性不足,推荐新颖度低的问题及思?答:UserCF:推荐那些和他有共同兴趣爱好的用户喜欢的物品ItemCF:推荐那些和他之前喜欢的物品类似的物品根据用户推荐重点是反应和用户兴趣相似的小群体的热点,根据物品推荐着重与用户过去的历史兴趣,即https://wen.baidu.com/question/1184421135965829299.html
5.目标跟踪入门——目标跟踪算法综述电子创新网Imgtec社区最早的可用于目标检测的CF算法是MOSSE,它的全名为Minimum Output Sum of Squared Error Filter,它作为CF的开篇算法,引出了后来更多性能更加优越的算法。 能够使得相关滤波算法能够用于实时性应用的首个算法是CSK(the Circulant Structure of Tracking-by-detection with Kernels),通过使用高斯核计算相邻两帧之间的相关性https://imgtec.eetrend.com/blog/2019/100017436.html
6.KernelCF:推荐系统的最优召回策略答案是肯定的。Ratidar Technologies LLC 在国际学术会议 CAIBDA 2022 上宣读了一篇题为Kernel-CF: Collaborative filtering done right with social network analysis and kernel smoothing 的论文,介绍了如何利用数据可视化算法和非参数统计方法计算推荐系统最优召回策略。我们下面详细的介绍相关内容:https://www.51cto.com/article/782432.html
7.基于流形近邻的协同过滤算法AET其中,EMNCF和MNCF的流形邻居数取500,EMNCF是在最小最大距离上加上0.01倍的欧氏距离。从表2中可以看出MNCF明显优于MCF,与EMNCF性能相当。 为了比较基于欧氏距离的协同过滤算法和基于最小最大距离的协同过滤算法,此处变化邻居数,加权方案取01VD,记使用欧氏距离的协同过滤方案为ECF,得到的实验结果如图2所示。 http://www.chinaaet.com/article/3000016485
8.基于用户情景推断的军事信息HybridCF推荐算法针对当前军事信息推荐方法未对用户所处时间、地理位置和用户场景做区分,以及未考虑军事用户的信息需求与所处场景的关联性,导致推荐结果固定、单一化问题,设计了基于用户情景推断的军事信息Hybrid-CF(混合协同过滤)推荐方法;融入军事用户情景要素对传统协同过滤算法进行了改进,通过计算当前情景信息与历史信息的相似度,更加https://m.cnki.net/mcnki/literature/detail?datatype=CJFD&instanceID=JZCK2024091200K
9.Mahout推荐算法编程实践demo说明OSCHINATaste 是曾经风靡一时的推荐算法框架,后来被并入 Mahout 中,Mahout 的部分推荐算法基于 Taste 实现。 下文介绍基于 Taste 实现最常用的 UserCF 和 ItemCF。 本文不涉及 UserCF 和 ItemCF 算法的介绍,这方面网上资料很多,本文仅介绍如何基于 Mahout 编程实现。 欢迎转载,请注明来源: http://blog.csdn.net/u0109https://my.oschina.net/xiaominmin/blog/1919329
10.基于物品的协同过滤推荐算法c++实现源码本文将详细解析基于物品的协同过滤(Item-Based Collaborative Filtering,简称itemCF)推荐算法的C++实现,以及如何利用MovieLens数据集进行实验。 **一、推荐系统的原理** 推荐系统主要分为两种:基于用户的协同过滤(User-Based CF)和基于物品的协同过滤(Item-Based CF)。基于物品的协同过滤算法主要依赖于用户对物品的评价https://download.csdn.net/download/homen_live/6941027
11.基于二分网络社团划分的推荐算法2 RACD的思想与实现 2.1 算法思想 User-based CF算法在电子商务网站中得到广泛应用, 但仍存在一些问题, 数据稀疏性就是其中之一.例如:假设某个电影推荐网站中包含几百万部电影, 而平均每个用户评价过的电影只有几百部, 显然, 得到的“用户-电影”矩阵十分稀疏.基于这样的稀疏矩阵给用户推荐电影, 推荐的质量并https://xuebao.neu.edu.cn/natural/article/html/2018-8-1103.htm
12.什么是智能推荐?智能推荐的原理是什么?所以,CF依赖于“群体共性”“群体智慧”挖掘出那些潜在的、可能会被用户喜欢的内容并推荐给用户。CF算法也是最早、最经典的推荐算法之一,可以这么说,CF算法是推荐算法的鼻祖。我们后续很多推荐算法都是基于CF的协同过滤思想延伸而来。有两类基于协同的推荐算法:基于用户的协同过滤算法、基于物品的协同过滤算法。https://www.niaogebiji.com/article-106383-1.html
13.视频资源和平常收纳的一些自己认为比较好的博客网站工具学习记录的一些笔记,以及所看得一些电子书eBooks、视频资源和平常收纳的一些自己认为比较好的博客、网站、工具。涉及大数据几大组件、Python机器学习和数据分析、Linux、操作系统、算法、网络等 - josonle/Coding-Nowhttps://github.com/josonle/Coding-Now/
14.推荐系统算法实战协同过滤CF算法(CollaborativeFiltering仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法 进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型 (latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中, 最著名的、https://cloud.tencent.com/developer/article/1558722
15.codeforces全球最大算法竞赛平台Codeforces. Programming competitions and contests, programming communityhttp://codeforces.com/
16.算法等于数学吗?而这个方法和步骤从大的方面可以是软件的开发,从小的方面又可以是一个函数的独特设计。如果说程序是一个人的话,那算法就是这个人的灵魂了。我当时学习网站开发时,就把HTML看作成一个人的骨架,CSS看作成这个人的外貌长相,而JS则看成是这个人的能力。这也很好的自我安慰在计算机界能力大于外貌(//?//) https://www.jianshu.com/p/49cf29db387f
17.个性化推荐“算法”变“算计”,真能一关了之吗?而我们今天主要谈的是算法推荐。这是算法的一种应用,用于推测出用户可能喜欢的东西。算法推荐最早在海外出现应用。1998年,亚马逊平台就上线了基于物品的协同过滤算法(ItemCF算法),算法的使用让亚马逊销售额增长了不止100倍。随后越来越多的企业开始使用算法推荐,并逐渐在业内崭露头角。 https://new.qq.com/rain/a/20220318A02GCN00
18.新余市职业教育中心资助管理评审办法(二)综合测试成绩的算法 以班级为单位计算出每个学生理论和实践的平均成绩,学习成绩排名在同专业同年级里前5%(含5%),学习成绩未进入5%但达到前30%(含30%)且在道德风尚、专业技能、社会实践、创新能力、综合素质等方面表现特别突出的,可以申请,同时需要提交详细的证明材料,证明材料须由学校审核后中加盖学校公章。学习http://www.xinyu.gov.cn/xinyu/szxsgl/2023-11/16/content_148b3a3bc4a04cf695e0a028f7b403cf.shtml
19.FDSST跟踪算法2018年及以前经典实时目标跟踪算法代码合集 文件夹中为2018年及以前的几种实时并且准确度高的目标跟踪算法源码合集,大部分为matlab编程。部分算法为matlab C++混合编程。 bacf_toupload BACF算法 DSST-master DSST算法 ECO-master ECO-HC算法 fDSST_code fDSST算法 Matlab_STCv0 STC算法 OpenTLD-master TLD算法 https://www.iteye.com/resource/freexilele-10311988
20.召回策略推荐系统RES在ItemCF算法中使用,指定某个物品的若干个最近邻物品,构成该物品近邻集合。 50 相似性度量方式 计算用户或物品特征表达相似性的方式。在ItemCF算法中,每个物品会基于对它有过行为的用户表示为特征向量,向量每一维是一个<user_id, score>元组,score表示对应user_id的权重,该参数决定了使用何种函数计算物品向量之间的https://support.huaweicloud.com/usermanual-res/res_01_0020.html
21.CFGAN基于生成对抗神经网络的协同过滤推荐ItemCF:ItemCollaborationFilter,基于物品的协同过滤 算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品。 比如,用户A之前买过《数据挖掘导论》,该算法会根据此行为给你推荐《机器学习》,但是ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。 ==>该https://www.pianshen.com/article/6294291240/
22.算法竞赛算法竞赛入门经典 作者:刘汝佳 ISBN:9787302356288 出版社:清华大学出版社 出版年:2014 机器学习算法竞赛实战 作者:王贺 ISBN:9787115569592 出版社:人民邮电出版社 出版年:2021 算法竞赛入门经典 作者:刘汝佳 ISBN:9787302206088 出版社:清华大学出版社 出版年:2009 算法竞赛入门到进阶 作者:罗勇军,郭卫斌 ISBN:9787https://www.las.ac.cn/front/book/detail?id=392ed1d8a88494cf4b6a2641fc5332b2