最近一段时间隐语义模型(Latent Factor Model,LFM)在推荐系统中的应用越来越广泛,本文所介绍的矩阵分解方法也是基于这个隐语义模型。

这里需要说明的一点是,这里所说的矩阵分解并不是SVD,之前在这个问题纠结了很久,因为网上很多人还有周围的人都把矩阵分解就当成了SVD,实际上SVD也是矩阵分解的一种技术(SVD在推荐系统中的应用见http://blog.csdn.net/wuyanyi/article/details/7964883,这篇才是真正的SVD推荐的方法,而其他很多网上所指的SVD就是本文所介绍的)。

基本思想


矩阵分解的思想简单来说就是每一个用户和每一个物品都会有自己的一些特性,用矩阵分解的方法可以从评分矩阵中分解出用户——特性矩阵,特性——物品矩阵,这样做的好处一是得到了用户的偏好和每件物品的特性,二是见底了矩阵的维度。图示如下:

用用户对电影来举例子就是:每个用户看电影的时候都有偏好,这些偏好可以直观理解成:恐怖,喜剧,动作,爱情等。用户——特性矩阵表示的就是用户对这些因素的喜欢程度。同样,每一部电影也可以用这些因素描述,因此特性——物品矩阵表示的就是每一部电影这些因素的含量,也就是电影的类型。这样子两个矩阵相乘就会得到用户对这个电影的喜欢程度。

形式化描述


由于评分矩阵的稀疏性(因为每一个人只会对少数的物品进行评分),因此传统的矩阵分解技术不能完成矩阵的分解,即使能分解,那样计算复杂度太高,不现实。因此通常的方法是使用已存在评分计算出出预测误差,然后使用梯度下降调整参数使得误差最小。
首先说明一些符号的含义:戴帽子的rui表示预测u对i的打分,qi表示物品i每个特性的归属度向量,pu表示用户u对每个特性的喜欢程度的向量。因此,物品的预测得分为:

下面我们就需要根据已有的数据计算误差并修正q和p使得误差最小,误差的表示方式如下:

(2)式子可以利用评分矩阵中存在的评分数据,使用随机梯度下降方法进行参数的优化,在此不做介绍。注意第二项是正则式,是为了防止过拟合,具体原理也不太清楚。
计算完阐述后们对于未知的项目就可以使用(1)式子评分。

带偏置的矩阵分解


上面的式子是最基本的矩阵分解思想,但实际情况下,却并不是很好的衡量标准,比如有的网站中的用户偏向评价高分;有一些用户偏向评价高分(有的人比较宽容);有的物品被评价的分数偏高(也许由于等口碑原因)。因此在上面的式子中一般都会加入偏置项,u,bi,bu。综合用下面的式子表示

结果预测式子变成如下:

误差预测变成如下形式

带标签和历史隐式反馈的矩阵分解


由于现实的评分矩阵特别稀疏,因此,为了使得数据更加稠密,下面加入了历史的引述反馈数据(比如用户浏览过浏览过某个电影就可以当做一定成的喜爱的正反馈),隐式反馈表现出来的偏好用下面的式子表示,其中xi表示历史数据所表现出的偏好的向量,跟前面的向量维度相同。前面的权重表示这一项的可信任程度。

同样,我们也可以使用用户的标签(比如年龄,性别,职业)推测用户对每个因素的喜爱程度,形式化如下,ya表示标签所表现出的偏好向量。

加入上面因素后的评分估计表示如下:

带有时间因素的矩阵分解


现实生活中,我们每个人的爱好可能随着时间的改变而改变,每个项目的平均评分也会改变。因此,项目的偏差(即项目高于平均分还是低于平均分)bi,用户的评分习惯(即偏向于高分还是低分)bu,以及用户的喜好矩阵pu都是时间的函数。为了更加准确的表达评分,都需要表示成为时间的函数形式,如下(这里没有考虑历史标签等数据):

小结


矩阵分解在推荐系统中现在用的很广泛,主要是由于很好的扩展性,新的因素很容易添加到模型当中。并且网上有很多开源的库实现算法。
以上的内容根据这篇论文理解而来《MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS》

数据挖掘算法-矩阵分解在推荐系统中的应用相关推荐

  1. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  2. [转]矩阵分解在推荐系统中的应用

    矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性,因为要考虑多种因素的综合作用,往往需 ...

  3. 再谈矩阵分解在推荐系统中的应用

    本文将简单介绍下最近学习到的矩阵分解方法. (1)PureSvd 矩阵分解的核心是将一个非常稀疏的评分矩阵分解为两个矩阵,一个表示user的特性,一个表示item的特性,将两个矩阵中各取一行和一列向量 ...

  4. 浅谈矩阵分解在推荐系统中的应用

    为了方便介绍,假设推荐系统中有用户集合有6个用户,即U={u1,u2,u3,u4,u5,u6},项目(物品)集合有7个项目,即V={v1,v2,v3,v4,v5,v6,v7},用户对项目的评分结合为R ...

  5. 【机器学习的数学基础】(七)矩阵分解(Matrix Decomposition)(中)

    文章目录 4 矩阵分解(Matrix Decomposition)(中) 4.3 Cholesky分解 4.4 特征分解与对角化 4.5 奇异值分解 4.5.1 几何图解SVD 4.5.2 SVD的构 ...

  6. 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解

    矩阵奇异值分解特征值分解 Recently, after watching the Recommender Systems class of Prof. Andrew Ng's Machine Lea ...

  7. 推荐系统协同过滤算法——矩阵分解模型

    文章目录 一.简介 1.推荐系统的输入 1)显式反馈 2)隐式反馈 2.重点内容 3.关联用户与物品的两种CF技术 1)基于邻域的方法 2)隐语义模型 隐语义空间: 4.内容总结 二.预备知识 符号 ...

  8. 推荐算法矩阵分解实战——keras算法练习

    当今这个信息爆炸的社会,每个人都会面对无数的商品,无数的选择.而推荐算法的目的帮助大家解决选择困难症的问题,在大千世界中推荐专属于你的商品. 推荐系统算法简介 这里简单介绍下推荐系统中最为主要的协同过 ...

  9. 基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统

    本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷) 论文标题:Matrix factorization techniques for recommend ...

  10. 推荐算法——矩阵分解

    1.矩阵分解 矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积,实际推荐计算时不再使用大矩阵,而是用分解得到的两个小矩阵:一个是由代表用户偏好的用户隐因子向量组成,另一个是由代表物品语义主题的隐因子 ...

最新文章

  1. Linux中listen()系统调用的backlog参数分析
  2. 「情报局41」人工智能的下一个目标是什么?了解业务用例
  3. 【学无止境】基于ThinkPHP的OAuth2.0实现 ------ OAuth2.0个人学习笔记 One
  4. 开发加速使用maven国内源,感谢阿里技术团队,良心团队!
  5. java byte char io流_吃透Java IO:字节流、字符流、缓冲流
  6. Django从理论到实战(part15)--自定义path转换器
  7. BZOJ.1024.[SCOI2009]生日快乐(记忆化搜索)
  8. Hibernate3.x,hibernate3.x,Hibernate3.x整合Spring3.x不能实现自动创建表结构的解决办法:...
  9. 【记录】有关parseInt的讨论
  10. python 装机配置_Python实现自动装机功能案例分析
  11. 数据管理之元数据管理
  12. 红包算法 递归 php,【杂谈】PHP递归算法(二)
  13. 手机如何将图片缩小到20k?怎么指定压缩图片大小?
  14. 计算机学院的迎新晚会,计算机学院举办“互联青春,拾梦翱翔”迎新晚会
  15. 亚马逊又为卖家解锁新功能,最高提升10%转化的它不可忽略!
  16. Python爬虫实战——反爬机制的解决策略【阿里】
  17. 二次型哈密顿量的矩阵对角化方法
  18. C语言程序设计————学习知识归纳总结(四)
  19. Nimbus线上AMA内容记录-第四期
  20. 2015-4-23 bav总结

热门文章

  1. [iphone-游戏]游戏中常用的数据组织方式和解析
  2. 在Ubuntu上面使用华为EC3372
  3. h3c,nat网络地址转换
  4. 【读】这一次,让我们再深入一点 - TCP协议
  5. List转换为数组Array的方法
  6. I.MX6 Parallel RGB LCD Datasheet描述
  7. 再谈设计模式之-1.单例模式
  8. [CTO札记]雅虎主页改版使用户停留时间增加20% -
  9. matlab 分级聚类,Matlab学习系列23. 模糊聚类分析原理及实现
  10. 输入输出运算符的重载