基于用户的协同过滤算法详解
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之间的商品偏好相似度:
w_{uv}=\frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|} \qquad Jaccard公式
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 用户行为记录
利用余弦相似度计算可得:
w_{AB}=\frac{\vert {\{a,b,d\}\cap\{a,c\}\vert}}{\sqrt{|\{a,b,c\}||\{a,c\}|}} = \frac{1}{\sqrt{6}}
w_{AC}=\frac{\vert {\{a,b,d\}\cap\{b,e\}\vert}}{\sqrt{|\{a,b,c\}||\{b,e\}|}} = \frac{1}{\sqrt{6}}
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步:
建立物品到用户的倒查表T,表示该物品被哪些用户产生过行为;
根据倒查表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. 概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...
- 【推荐系统】基于用户的协同过滤算法
基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...
- UserCF,基于用户的协同过滤算法
转载自 UserCF,基于用户的协同过滤算法 UserCF:User Collaboration Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...
- 基于用户的协同过滤算法
最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...
- python协同过滤电影推荐_python实现基于用户的协同过滤算法(CF)——以电影评价数据(ml-100k)为例...
程序简介 项目以ml-100k电影评分数据集为输入,实现了基于用户的协同过滤算法,最后预测的MAE为0.84,因为经过优化,10万条评分数据运行时间不超过2分钟 协同过滤算法(CF)基于对用户历史行为 ...
- 【推荐系统】{1} —— 基于用户的协同过滤算法
协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...
- 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)
本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...
- 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...
- 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现
推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...
最新文章
- 发个上海英雄会聚会沙龙的公告 希望和大家一起见面交流探讨
- 20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结
- 数据库------事务
- chrome麦克风权限_如何在Chrome扩展程序中处理麦克风输入权限和语音识别
- mysql中where条件判断语句_MySQL Where 条件语句介绍和运算符小结
- 双十一我们在作战室干什么?零点刚过,我偷偷提交了几行代码!
- 硕、博、 博后招生 | 加拿大卡尔加里大学智能空间信息实验室
- jtopo绘图帧数与cpu使用率
- 【转】赶集网mysql开发36军规
- 报告一个IE很奇葩的滚动条问题——百分比计算宽度为浮点数时的滚动条显示异常
- win10 系统和office2016及visio2016专业版下载地址
- vue-pdf 字体不显示
- 手机个人热点连接台式计算机,电脑怎么连接手机个人热点
- R plot图片背景设置为透明_CAD2020图形布局输出到打印机、绘图仪,保存和恢复布局的打印设置 - AutoCAD问题库...
- android glide圆形图片,Glide原生方法加载圆形图片
- MySQL8.0安装失败
- 2020年中国高粱行业发展现状分析,产品多元化发展「图」
- Oracle数据库培训视频教程 oracle工程师培训视频教程
- CIA进行“嫁祸式攻击”?专家称维基解密对CIA的指控有些“过分”
- 高通开发系列 - System之FOTA和DFOTA升级记录
热门文章
- 京东代挂搭建+xdd-plus机器人配置
- 意念控制助听器,想听什么听什么
- 火车票退票费计算,2013年起,火车票退票费比例下调:票面乘车站开车时间前48小时以上的按票价5%计退票费。同时,车票退票费的计算方法不再四舍五入到元为单位,而以5角为单位:尾数小于0.25元的舍去
- 让NotePad++高亮显示SQLite关键字
- qq群如何引流?QQ群如何精准引流?如何利用QQ群来引流?
- [Swift]LeetCode788. 旋转数字 | Rotated Digits
- Android_通过两个点的经纬度计算距离
- 豆瓣FM snap应用
- 第19节 三个败家子(19)——史上最牛太守孙坚
- tvs管参数数解读_TVS管的主要参数及选型总结