0. 前言

  基于领域的推荐算法是推荐系统中最基本的算法,此类算法不仅在学术界得到了深入研究,而且在工业界也得到了广泛地应用。基于领域的推荐算法主要分为两大类:一类是基于用户的协同过滤算法(User Based Collaborative Filtering,UserCF);一类是基于物品的协同过滤算法(Item Based Collaborative Filtering ItemCF)。而本文就着重介绍基于用户的协同过滤算法。

  基于用户的协同过滤算法是推荐系统中最古老的算法,甚至可以这样说:UserCF的出现,标志着推荐系统的诞生。UserCF算法于1992年被提出,首次应用于邮件过滤系统。在此之后直到2000年该算法都是推荐系统领域中最著名的算法。

1. UserCF基本原理

  用最简单的一句话总结UserCF的基本原理,那就是:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A,这种方法称为基于用户的协同过滤算法。

  基于以上解释,我们知道UserCF主要包含两步:1)找到和目标用户相似的用户集合,即计算两个用户的兴趣相似度;2)找到这个集合中的用户喜欢的但是目标用户没见过的物品,把这样的物品集合推荐给用户。

1.1 相似性计算

  从上述介绍可知,UserCF主要包含两步。本节主要讲述第一步:如何找到并计算和目标用户相似的用户。本文假设以在线商品购买为例进行讲解。
  
  那么这里我们如何进行计算两个相似用户的相似度呢?很显然,我们需要利用用户购买行为来进行计算。这时候,我们如何计算两个用户u和v之间的相似性呢?
  
  于是我们有:对于用户u和v,令 N(u)N(u) 表示用户u购买过的商品,N(v)N(v) 表示用户v购买过的商品。那么我们通过如下的 Jaccard 公式计算出u和v之间的商品偏好相似度:

wuv=|N(u)∩N(v)||N(u)∪N(v)|Jaccard公式

w_{uv}=\frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|} \qquad Jaccard公式
  

wuv=|N(u)∩N(v)||N(u)||N(v)|‾‾‾‾‾‾‾‾‾‾√余弦公式

w_{uv}=\frac{|N(u) \cap N(v)|}{\sqrt{|N(u)||N(v)|}} \qquad 余弦公式

如下图所示,该图表示:

用户A购买过物品 {a,b,d}

用户B购买过物品 {a,c}

用户C购买过物品 {b,c}

用户D购买过物品 {c,d,e}


图1 用户行为记录

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

wAB=|{a,b,d}∩{a,c}||{a,b,c}||{a,c}|‾‾‾‾‾‾‾‾‾‾‾‾‾‾√=16‾√

w_{AB}=\frac{\vert {\{a,b,d\}\cap\{a,c\}\vert}}{\sqrt{|\{a,b,c\}||\{a,c\}|}} = \frac{1}{\sqrt{6}}

wAC=|{a,b,d}∩{b,e}||{a,b,c}||{b,e}|‾‾‾‾‾‾‾‾‾‾‾‾‾‾√=16‾√

w_{AC}=\frac{\vert {\{a,b,d\}\cap\{b,e\}\vert}}{\sqrt{|\{a,b,c\}||\{b,e\}|}} = \frac{1}{\sqrt{6}}

wAD=|{a,b,d}∩{c,d,e}||{a,b,d}||{c,d,e}|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√=16‾√

w_{AD}=\frac{\vert {\{a,b,d\}\cap\{c,d,e\}\vert}}{\sqrt{|\{a,b,d\}||\{c,d,e\}|}} = \frac{1}{\sqrt{6}}

  但是,需要注意的是,这种方法的时间复杂度是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除以分母可以得到最终的用户兴趣相似度。


图2 商品用户倒排表

2. UserCF算法实战

未完待续……


对机器学习和人工智能感兴趣,请扫码关注微信公众号!

基于用户的协同过滤算法详解相关推荐

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

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

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

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

  3. UserCF,基于用户的协同过滤算法

    转载自   UserCF,基于用户的协同过滤算法 UserCF:User  Collaboration   Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...

  4. 基于用户的协同过滤算法

    最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...

  5. python协同过滤电影推荐_python实现基于用户的协同过滤算法(CF)——以电影评价数据(ml-100k)为例...

    程序简介 项目以ml-100k电影评分数据集为输入,实现了基于用户的协同过滤算法,最后预测的MAE为0.84,因为经过优化,10万条评分数据运行时间不超过2分钟 协同过滤算法(CF)基于对用户历史行为 ...

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

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

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

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

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

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

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

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

最新文章

  1. 发个上海英雄会聚会沙龙的公告 希望和大家一起见面交流探讨
  2. 20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结
  3. 数据库------事务
  4. chrome麦克风权限_如何在Chrome扩展程序中处理麦克风输入权限和语音识别
  5. mysql中where条件判断语句_MySQL Where 条件语句介绍和运算符小结
  6. 双十一我们在作战室干什么?零点刚过,我偷偷提交了几行代码!
  7. 硕、博、 博后招生 | 加拿大卡尔加里大学智能空间信息实验室
  8. jtopo绘图帧数与cpu使用率
  9. 【转】赶集网mysql开发36军规
  10. 报告一个IE很奇葩的滚动条问题——百分比计算宽度为浮点数时的滚动条显示异常
  11. win10 系统和office2016及visio2016专业版下载地址
  12. vue-pdf 字体不显示
  13. 手机个人热点连接台式计算机,电脑怎么连接手机个人热点
  14. R plot图片背景设置为透明_CAD2020图形布局输出到打印机、绘图仪,保存和恢复布局的打印设置 - AutoCAD问题库...
  15. android glide圆形图片,Glide原生方法加载圆形图片
  16. MySQL8.0安装失败
  17. 2020年中国高粱行业发展现状分析,产品多元化发展「图」
  18. Oracle数据库培训视频教程 oracle工程师培训视频教程
  19. CIA进行“嫁祸式攻击”?专家称维基解密对CIA的指控有些“过分”
  20. 高通开发系列 - System之FOTA和DFOTA升级记录

热门文章

  1. 京东代挂搭建+xdd-plus机器人配置
  2. 意念控制助听器,想听什么听什么
  3. 火车票退票费计算,2013年起,火车票退票费比例下调:票面乘车站开车时间前48小时以上的按票价5%计退票费。同时,车票退票费的计算方法不再四舍五入到元为单位,而以5角为单位:尾数小于0.25元的舍去
  4. 让NotePad++高亮显示SQLite关键字
  5. qq群如何引流?QQ群如何精准引流?如何利用QQ群来引流?
  6. [Swift]LeetCode788. 旋转数字 | Rotated Digits
  7. Android_通过两个点的经纬度计算距离
  8. 豆瓣FM snap应用
  9. 第19节 三个败家子(19)——史上最牛太守孙坚
  10. tvs管参数数解读_TVS管的主要参数及选型总结