协同过滤Collaborative Filtering (CF)算法是推荐算法的一个大分支,基本思想是推荐相似的物品,或者推荐相似用户(隐式或者显式)评分过的物品。CF方法主要可以分为两类:基于邻域和基于隐语义。

①基于邻域的方法利用“两个用户共同评分过的物品”(user-based)或者“共同评价两个物品的用户”(item-based)分别计算用户间的相似度和物品间的相似度。而相似度的计算有余弦相似度,皮尔逊相似度和一种被称为“Conditional Probability-Based“的Similarity[4]。[4]中指出,第三个方法的弊端在于由于每个物品(人)邻域的大小不同,流行物品或评分多的用户会引起问题。皮尔逊系数与余弦相似度的不同在于,皮尔逊系数还能捕捉负关系。因此,实际中一般采用带权的皮尔逊相似度(P. 2) [2]。但基于邻域方法的缺点是:由于实际用户评分的数据是十分稀疏,用户之间可能根本没有相同的评论;而且用启发式的方法很难考虑全面用户和物品之间的所有关系。具体可以参看项亮的《推荐系统实践》。

By the way,item-based模型较user-based模型有一下优点:更好的精确度,更容易对推荐产生解释,参数更少(因为用户一般比物品多)。另外,[3]中指出,在user-based模型中集成隐式评分矩阵的效果没有在item-based模型中的好。

②基于隐语义的方法则不依赖于共同评分。其基本思想是将用户和物品分别映射到某种真实含义未知的feature向量。用户feature代表用户对不同类别电影的喜好程度(如:动作片5,惊悚片5),物品feature代表电影中大致属于哪类电影(如:爱情片3,喜剧片5)。然后通过两个feature向量的内积来判断用户对一个物品的喜好程度。虽然这个方法不要求共同评分,但推荐系统还是面临很大的数据稀疏问题。

下面具体介绍几个隐语义模型。

Probabilistic Matrix Factorization

[1]中作者提出了Probabilistic Matrix Factorization,它与一般FM十分类似。它假设评分的真实值和预测值间的误差是服从高斯分布的,并假设不同评分之间是相互独立的(即并非采用混合高斯模型)。同时,用户特征向量U和物品特征向量V都加上了zero-mean spherical Gaussian priors。为了自动设置Hyperparameters,该模型为Hyperparameters也引入了priors。这个模型被作者成为”PMF”。进一步,作者提出了”Constrained PMF”。它在用户的特征向量上做了限制:看的电影类似的用户,他们的特征向量也应该是类似的。据论文显示,Constrained PMF在用户评分很少的情况下(20-)能取得显著高于其他模型的performance。文章还指出,单单知道用户评论了哪些物品(但不知道其评分,相当于0-1评分)也能得到比推荐average rating高的performance。通过混合,作者在Netflix数据集上得到的最高performance是0.8861。不过他最好单模型Constrained PMF只有0.9016。

Asymmetric-SVD

[2] 是Koren 2008年的文章,作者首先提出改良的item-based CF模型。传统的neighbourhood定义是user-specific的:假设求用户u对物品i的评分,那么物品i的neighbourhood定义为”用户u评过分的物品中与物品i最相似的前k个物品”。而新模型中,neighbourhood定义为A与B的交集(其中A是用户u评过分的物品,B是与i最相似的前k个物品)。有了全局的neighbourhood,就可以使用机器学习的方法来训练物品相似度。接着作者指出将相似度看成一种增益,如此一来集成隐式评分也是自然而然的事情(P. 4)。 其中,作者还对累计的增益值做归一化,因为用户的评分数有多有少。然后,使用矩阵分解和使用物品表示用户的思想,作者提出了“Asymmetric-SVD”。使用物品表示用户的好处有两个好处:①能处理新来的用户,因为所有参数都是基于物品的。②一般来说用户数要大于物品数,因此这样还能减少参数个数。值得一提的是Asymmetric-SVD既保留了基于领域方法的特点,又能获得不错的performance。Koren指出,他在竞赛中学到的一个lesson是隐语义模型与邻域模型捕捉的是很不一样的两类关系:其中隐语义模型善于捕捉物品间的整体关系,而领域模型则擅长捕捉个别之间的强联系。最后,Asymmetric-SVD获得的RMSE是0.9000

SVD++

同样是在[2]中,作者学到的另一个lesson是:应集成用户不同的输入。于是,他在传统的FM模型里加入了隐式评分信息,称之为SVD++。它取得了0.8911的成绩。

PS. 其实[2]中,用物品来表示用户就已经实现了[1]中constrain的效果。

参考文献:

[1] Probabilistic Matrix Factorization

[2] Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model

[3] Factor in the Neighbors Scalable and Accurate Collaborative Filtering

[4] Evaluation of Item-Based Top-N Recommendation Algorithms

协同过滤算法的几篇文章PFM/svd/ svd++相关推荐

  1. 协同过滤算法 R/mapreduce/spark mllib多语言实现

    用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化 ...

  2. spark MLlib平台的协同过滤算法---电影推荐系统

    又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实 ...

  3. 基于Spark MLlib平台的协同过滤算法---电影推荐系统

    协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,协同过滤算法按照数据使用 ...

  4. 文章召回-基于ALS的协同过滤算法实践及评估

    文章召回-基于ALS的协同过滤算法 本项目完整源码地址:https://github.com/angeliababy/ALS_col 项目博客地址: https://blog.csdn.net/qq_ ...

  5. 探秘推荐引擎之协同过滤算法小综述

    数学大神.统计学大神和数据挖掘推荐大神请关注. 一.数学期望的理解 早些时候,法国有两个大数学家,一个叫做布莱士·帕斯卡,一个叫做费马.帕斯卡认识两个赌徒,这两个赌徒向他提出了一个问题.他们说,他俩下 ...

  6. [机器学习] 推荐系统之协同过滤算法(转)

    [机器学习]推荐系统之协同过滤算法 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题. 1. 什么是推荐算法 推荐算法最 ...

  7. 协同过滤算法_机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第29篇文章,我们来聊聊SVD在上古时期的推荐场景当中的应用. 推荐的背后逻辑 有没有思考过一个问题,当我们在淘宝或者是 ...

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

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

  9. win7下使用Taste实现协同过滤算法

    如果要实现Taste算法,必备的条件是: 1) JDK,使用1.6版本.需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量. 2) Maven,使用2 ...

  10. Python基于用户协同过滤算法电影推荐的一个小改进

    之前曾经推送过这个问题的一个实现,详见:Python基于用户协同过滤算法的电影推荐代码demo 在当时的代码中没有考虑一种情况,如果选出来的最相似用户和待测用户完全一样,就没法推荐电影了.所以,在实际 ...

最新文章

  1. Linux初步——常用简单命令
  2. 常用的数据结构-数组
  3. 未来城市的无人机送货系统是怎样的?
  4. 华大基因回复深交所:“14万中国人基因大数据”项目与外方机构无关
  5. mysql 慢查询 定位过程,和order by有关
  6. 数组和矩阵问题:奇数下标都是奇数或者偶数下标都是偶数
  7. Oracle(一):简介、安装、DDL、DML、JDBC、导入导出
  8. 让IE6-IE8 支持HTML5
  9. LeetCode 473. 火柴拼正方形
  10. TypeScript 令我苦不堪言
  11. Ajax用户名验证、服务条款加载、验证码生成
  12. linux下如何关闭防火墙、查看当前的状态、开放端口
  13. 2017年广东省乡级行政区划数据介绍
  14. Mac安装 MySQL 及可视化工具
  15. 【饭谈】自动化有三宝:工资高,福利好,代码和人总有一个能跑
  16. 手撸架构,Java基础 面试100问
  17. 一篇关于大黄蜂的鸡汤文的杂想
  18. NOIP2012 普及组 T4 文化之旅
  19. 《时代》2022年全球最具影响力100家公司榜单公布,防弹少年团、亚马逊新CEO登上封面 | 美通社头条...
  20. Android 开发小仓库

热门文章

  1. 使用索引的技巧知识点
  2. Security+ 学习笔记4 社会工程攻击
  3. CICD详解(六)——SVN+Jenkins项目控制实战
  4. Ansible详解(二)——Ansible安装与命令
  5. 解决Ubuntu18.04下VLC打不开的问题
  6. HDOJ--3790--最短路径问题(双权值问题)
  7. js JQuery 获取元素和遍历
  8. java 正则表达式提取字符串
  9. Windows中文编码显示问题集锦
  10. 多域名证书的签名和自签名流程