转载自   UserCF,基于用户的协同过滤算法

UserCF:User  Collaboration   Filter,基于用户的协同过滤

算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A,这种方法称为基于用户的协同过滤算法。

==>可以看出,这个算法主要包括两步:

一、找到和目标用户兴趣相似的用户集合——计算两个用户的兴趣相似度

二、找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户——找出物品推荐

下面分别来看如何实现这两步:

一、计算两个用户的兴趣相似度:

给定用户u和用户v,令N(u)表示用户u感兴趣的物品集合,N(v)表示用户v感兴趣的物品集合,那么可以通过Jaccard公式或者通过余弦相似度公式计算:

...Jaccard公式

...余弦相似度公式

举例:下图表示用户A对物品{a,b,d}有过行为,用户B对物品{a,c}有过行为

利用余弦相似度计算可得:

用户A和用户B的兴趣相似度为:

同理,

但是,需要注意的是,这种方法的时间复杂度是O(U^2),因为我们需要计算每一对用户之间的相似度,事实上,很多用户相互之间并没有对同样的物品产生过行为,所以很多时候当分子为0的时候没有必要再去计算分母,所以这里可以优化:即首先计算出|N(u) 并 N(v)| != 0 的用户对(u,v),然后对这种情况计算分母以得到两个用户的相似度。

针对此优化,需要2步:

(1)建立物品到用户的倒查表T,表示该物品被哪些用户产生过行为;

(2)根据倒查表T,建立用户相似度矩阵W:在T中,对于每一个物品i,设其对应的用户为j,k,在W中,更新相应的元素值,w[j][k]=w[j][k]+1,w[k][j]=w[k][j]+1,以此类推,扫描完倒查表T中的所有物品后,就可以得到最终的用户相似度矩阵W,这里的W是余弦相似度中的分子部分,然后将W除以分母可以得到最终的用户兴趣相似度。

得到用户相似度后,就可以进行第二步了。

二、给用户推荐和他兴趣最相似的K个用户喜欢的物品。

公式如下:

其中,p(u,i)表示用户u对物品i的感兴趣程度,S(u,k)表示和用户u兴趣最接近的K个用户,N(i)表示对物品i有过行为的用户集合,Wuv表示用户u和用户v的兴趣相似度,Rvi表示用户v对物品i的兴趣(这里简化,所有的Rvi都等于1)。

根据UserCF算法,可以算出,用户A对物品c、e的兴趣是:

以上就是UserCF最简单的实现方法。

我们还可以在此基础上进行改进,改进思想是:两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。

比如,两个用户都买过《新华词典》并不能说明两个人的兴趣相似,而如果两个人都买过《数据挖掘导论》则可以认为他们的兴趣相似。

==>公式如下:

可以看到,如果一个物品被大多数人有过行为,则这样的信息参考价值不大,权重变小。

以上内容参考自《推荐系统实践》

UserCF,基于用户的协同过滤算法相关推荐

  1. [推荐算法]UserCF,基于用户的协同过滤算法

    UserCF:UserCollaborationFilter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的 ...

  2. 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

      随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...

  3. 基于用户的协同过滤算法详解

    0. 前言 基于领域的推荐算法是推荐系统中最基本的算法,此类算法不仅在学术界得到了深入研究,而且在工业界也得到了广泛地应用.基于领域的推荐算法主要分为两大类:一类是基于用户的协同过滤算法(User B ...

  4. 【推荐系统】{1} —— 基于用户的协同过滤算法

    协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...

  5. 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)

    本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...

  6. 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现

    推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...

  7. 推荐算法概述(基于用户的协同过滤算法、基于物品的协同过滤算法、基于内容的推荐算法)

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 目前推 ...

  8. 推荐系统--基于用户的协同过滤算法

    1.         概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...

  9. 【推荐系统】基于用户的协同过滤算法

    基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...

最新文章

  1. 如何在返回String的Spring MVC @ResponseBody方法中响应HTTP 400错误?
  2. 解决xcode打开时假死的问题
  3. [机器学习]梯度提升决策树--GBDT
  4. C语言实现双向链表Doubly Linked List(附完整源码)
  5. stream的filter用法
  6. 【专题】多角度深入解析开放原子开源基金会
  7. 如何用 Blazor 实现 Ant Design 组件库?
  8. [MySQL 5.6] Performance Schema 之 PS配置项(1)
  9. python中popen的用法_python中的subprocess.Popen()使用
  10. JS中同名函数有效执行顺序
  11. windows命令行大汇总
  12. 黄聪:C#设置Word中表格某个列宽
  13. 学土木结构考计算机等级考试,请教各位,我是学土木的,考计算机二级的哪个比较好?...
  14. sql 字段很多怎么汇总_利用集算器实现分库汇总
  15. xml和TreeView
  16. RANSAC介绍(Matlab版直线拟合+平面拟合)
  17. 配置FreeSWITCH支持不带媒体信息的SIP信令
  18. 域名解析邮箱服务器地址,邮件域名设置解析
  19. 【WIN】svchost与共享进程服务
  20. c语言题库字母顺序,C语言题库(带答案)-排版-

热门文章

  1. C++ class实现十字链表存储的图(完整代码)
  2. tof摄像头手势识别_一种基于TOF手势识别的控制系统的制作方法
  3. word List36
  4. java图形包_java流布局图形包
  5. 算法竞赛进阶指南——后缀数组
  6. CF981E Addition on Segments 线段树分治 + bitset优化
  7. 【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】
  8. 2021牛客第四场-E Tree Xor-线段树区间异或
  9. CF1361C. Johnny and Megan‘s Necklace(构造,欧拉回路,传递闭包)
  10. cf1553C. Penalty