推荐系统笔记三、基于近邻的推荐系统进阶篇
一、概述:
基于近邻的推荐算法在推荐系统中占有重要的地位,是学术界的一个重点研究方向,在产业界也得到了广泛的应用。基于近邻的推荐算法大致可以分为user-based和item-based两类,关于近邻推荐算法的基础性介绍,请参见博文: “推荐系统笔记一、基于近邻的推荐系统(基础篇)”。由于user-based方法和item-based方法的相似性,本文主要讨论item-based方法上的一些技术,这些技术可以被直接套用到user-based方法上。本文主要介绍五种近邻模型。
二、符号定义:
- U:用户集合;I:item集合;
- R:评分集合,rui表示用户u∈U对item i∈I的评分;
- Ui:已经给item i打分的用户集合;Iu:已经被用户u打分的item集合;
- Iuv:Iu∩Iv,同时被用户u和用户v打过分的item集合;Uij:同时对item i和j打过分的用户集合;
- wuv:用户u和v之间的相似度;wij:item i和j之间的相似度;
三、相似权值计算:
两个用户或者item间的近邻关系是由他们之间的相似度来判断的,与一个用户(或item)相似度最大的k个用户(或item)称为他的k近邻。
cosine相似度是其中一种常用的度量方法:
即Ui和Uj的相似度。在前面符号定义小节已经提到过Uij表示同时对item i和item j打过分的用户集合。
如果考虑均值和方差,则得到Pearson相关系数:
Pearson Correlation是在集合Uij上计算的,其他的评分都忽略,所以在分母上和cosine有一个小小的区别。另外,由于Pearson Correlation 的分子分母都要除以标准差项,所以可以分子分母同时约去。
相似权值改进:
在实际中,不同用户或者item的评分往往是带偏差的,例如A和B两个用户的偏好类似,但是A比较容易满足,倾向于给item打高分;而B倾向于给item打低分(Item 上也有类似的情况)。为了解决这个问题,需要为每个用户和item增加一个偏置项。在前面的式子中,用均值r¯i作为这个偏置项,也可以用学习的方法得到一个较好的偏置项:
其中μ是整体评分偏置,bu和bi是用户u和item i上额外的偏置。那么评分rui的偏置就等于:
把这个偏置代入Pearson Correlation,得到:
当使用Pearson Correlation方法时,如果item i和j只被一个用户同时评分过,并且恰好在这两个item上的评分相同,那么根据Pearson公式他们之间的相似度等于1,这显然不大合理。可以用以下方法对权值进行收缩:
β的值可以通过交叉验证选择(例如β=100)。
四、相似度插值:
Similarity-Based Interpolation:定义Sk(i;u)为用户u评分的item集合中和item i最相似的k个近邻。由用户对item的历史评分来预测评分:
这可以看做一个插值函数,sij是插值系数。这种方法主要有一下两个优点:
- 可解释性。通过用户对item的历史评分(喜好)推荐新的item。
- 实时性。一旦用户给出新的评分,item-based模型可以立即提供新的推荐,而不需要重新训练模型或计算参数(通常认为item间的相似度在短时间内是恒定的,只需每隔较长一段时间重新计算)。
五、联合派生插值权重:
Jointly Derived Interpolation Weights:相似度插值方法直接使用item间的相似度作为插值权重(系数),忽略了近邻间的相互关系,为了更好的预测评分,需要重新学习插值权重{θuij|j∈Sk(i;u)}。
插值权重通过求解一个最小二乘问题得到:
如果写成Aw=b的形式,则:
由于评分矩阵是稀疏的,很少有用户v对Sk(i;u)都进行了评分。可以同时用正则化和平滑的方式进行处理(结果会向avg收缩):
六、全局近邻模型:
前面介绍的近邻模型都是局部的(k近邻),全局近邻模型吸取了矩阵分解模型的优点,从而可以得到更优的结果。这种模型可以使用隐式反馈,并且具有较好的实时性。重新定义预测函数:
R(u)是用户u的所有评分,cij是用户u的隐式反馈,如租借、购买等。Rk(i;u)是item项的集合,这些item需要同时满足两个条件:一是用户u评过分;二是item i的k近邻。所以Rk(i;u)中item的个数通常是小于k的。需要学习的参数有:bu,bi,wij,cij,同过梯度下降最优化下面这个目标函数来学习参数:
七、因子分解近邻模型:
可以对全局近邻模进行因子分解以减少时间和空间复杂度,提高准确率:
可以发现最后的表示和SVD++很相似。
八、近邻模型添加时间信息:
用户的偏好是随着时间不断发生变化的,\emph{如一个人喜欢的电影在2年前和2年后很可能是不同的}。在全局近邻模型中可以很容易加入时间信息:
bu(tui),bi(tui)是bu,bi的时间函数,详见博文”矩阵分解协同过滤“。 e−βu|tui−tuj|是指数衰退函数,如果用户u对item j的评分是在很久之前,那么item j的评分对现在的影响不大,用指数函数缩小其权重。其他项和原始的全局近邻模型一样,保持不变。
九、参考资料
Recommender Systems Handbook
- 顶
- 0
推荐系统笔记三、基于近邻的推荐系统进阶篇相关推荐
- 推荐系统笔记:基于矩阵分解(总结篇)
推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)_UQI-LIUWJ的博客-CSDN博客 推荐系统笔记:无任何限制的矩阵分解_UQI-LIUWJ的博客-CSDN博客 ...
- 推荐系统笔记:基于非负矩阵分解的协同过滤
1 非负矩阵分解 非负矩阵分解 (NMF) 可用于非负的评级矩阵. 这种方法的主要优势不一定是准确性,而是它在理解用户-项目交互方面提供的高度可解释性. 与其他形式的矩阵分解的主要区别在于因子 U 和 ...
- 笔记:基于标签的推荐系统、基于图的推荐算法、PersonalRank
笔记:基于标签的推荐系统.基于图的推荐算法.PersonalRank 发表于11个月前(2015-05-26 19:15) 阅读(44) | 评论(0) 2人收藏此文章, 我要收藏 赞0 原文:h ...
- 推荐系统笔记:基于SVD的协同过滤
1 奇异值分解 奇异值分解(SVD)是矩阵分解的一种形式,其中U和V的列被约束为相互正交 相互正交的优点是概念之间可以完全独立,并且可以用散点几何解释它们. 然而,这种分解的语义解释通常比较困难,因为 ...
- 推荐系统(3)—基于标签的推荐系统(Python)
1介绍 基于推荐系统(3)-基于标签的推荐系统的学习. 2基于标签的推荐系统意义 可解决冷启动问题:新用户APP下载后,选取感兴趣的关注标签,系统可自动推送筛选. 例如: 豆瓣的电影标签.书籍标签: ...
- 推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)
1 基本思想 基本思想是利用评分矩阵行和列的高度相关性.数据具有内在的丰富关联性,并且生成的数据矩阵通常可以通过各条目均有数值的低秩矩阵很好地近似. 潜在因子模型被认为是推荐系统中的最新技术.这些模型 ...
- 推荐系统笔记:基于贝叶斯的协同过滤
1 问题的限制 & 定义 在本文中,我们假设有少量不同的评级,每个评级都可以被视为一个离散的分类值. 因此,在以下讨论中将忽略评级之间的排序. 例如,三个评分(如"喜欢". ...
- 推荐系统笔记: 基于邻居的协同过滤问题 中的降维
1 介绍 降维方法可用于在质量和效率方面改进基于邻域的协同过滤方法. 特别是,在稀疏评分矩阵中很难稳健地计算成对相似性,但降维提供了在潜在因素方面的密集低维表示.因此,此类模型也称为潜在因子模型 la ...
- 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX
文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...
- python读取html内容 dom获取_python学习笔记十三 JS,Dom(进阶篇)
JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...
最新文章
- linux stdin STDIN_FILENO 区别
- 设置计算机的启动顺序CDROM.C.A,amibios怎么设置cdrom
- mysql 行列转换 动态_mysql 行列动态转换的实现(列联表,交叉表)
- 2015年,Web 进入移动时代
- pg10 10.3 1 linux64,Install Postgresql 10 In Ubutnu 16.04 LTS
- c语言程序100例第4题 参考了参考答案
- python 通配符域名_LeetCode-python 44.通配符匹配
- 【转帖】WEB架构师成长之路之一-走正确的路
- Activity与Fragment间的通信
- vbs if 不等于_(四)if 判断与逻辑运算符
- 已解决:setuna2在win10中使用,桌面会自动放大
- 【程序】STM32F407VE单片机驱动两片TJA1050 CAN收发器并进行双CAN通信
- 淘宝上传图片到淘宝 API 返回值说明(upload_img-上传图片到淘宝)
- 自动化运维工具-ansible入门(一)
- 网络分层流转---从浏览器请求到服务端响应究竟经历了什么?
- 手机通过IPV6访问电脑共享文件
- 麒麟820 soc鸿蒙系统,麒麟1020 SoC和麒麟820:华为下一代芯片?
- Sam Altman 山姆奥特曼:How To Invest In Startups如何投资初创公司
- 国外问卷调查是骗人的吗?
- egg框架结合egg-sequelize 建立数据库链接
热门文章
- Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
- ORACLE常用数值函数、转换函数、字符串函数【转】
- Page.IsPostBack
- web安全day20:今天讲清楚漏洞和木马的区别,最后一个实验演示通过445端口控制服务器
- k8s升级从1.13到1.16教程与采坑解决办法
- 读取P12格式证书的密钥
- Nginx https configuration backed Certbot
- CentOS 7部署Kafka和Kafka集群
- 理解和使用 Unity UI 系统(canvas和CanvasScaler )
- prototype.js之$A(iterable)