推荐系统笔记二、矩阵分解协同过滤
来源:互联网 发布:淘宝怎么养好 编辑:程序博客网 时间:2024/05/15 23:54
参考:http://blog.csdn.net/wangjian1204/article/details/50465109
一、概述:
矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。通常推荐系统可以用于模型训练的信息主要有用户的显式反馈、隐式反馈和时间信息等。显式反馈(explicit feedback):用户直接表明对item的兴趣,例如评分[1,2,3,4,5]. 隐式反馈(implicit feedback):通过观察用户行为得到的信息,例如浏览历史、搜索记录等。
二、符号定义和度量标准:
- U:用户集合;I:item集合;
- R:评分集合,
rui 表示用户u∈U 对itemi∈I 的评分;r̂ ui 表示预测评分; - K:(u,i)集合,且评分
rui 已知; tui :用户u对item i评分的时间;Ui :已经给item i打分的用户集合;Iu :已经被用户u打分的item集合;
评价推荐系统时最重要的两个问题是评分准确率和Top-N推荐问题。评分准确率问题常用的度量标准有Root Mean Squared Error (RMSE),Precision,Recall等。Top-N推荐常用的度量标准有NDCG,Average Reciprocal Hit-Rank(ARHR)等。
三、偏置项:
矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。但是,仅仅这样是不够的,例如A和B两个用户的偏好类似,但是A比较容易满足,倾向于给item打高分;而B倾向于给item打低分(Item上也有类似的情况)。为了解决这个问题,需要为每个用户和item增加一个偏置项。评分
其中
正则化项
另外还有一种简单的偏置项计算方法,如下所示:
式子中的
四、SVD矩阵分解:
在推荐系统矩阵分解的发展历程中,有研究员提出先对评分矩阵进行补全,从而可以对一个dense矩阵进行分解。但是这样做有两个缺点:一是补全数据和dense 矩阵分解大大增加了计算量;二是不精确的评分补全会导致结果有较大的偏差。所以目前的研究工作都建议使用原始的稀疏评分矩阵,并且使用正则化项来避免过拟合。
假设用户u投影到f维隐空间后的向量表示为
模型参数
可以用梯度下降方法或迭代的最小二乘算法求解。在迭代最小二乘算法中,首先固定
bu←bu+α(rui−r̂ ui−λbu) bi←bi+α(rui−r̂ ui−λbi) qi←qi+α((rui−r̂ ui)pu−λqi) pu←pu+α((rui−r̂ ui)qi−λpu)
其中
五、SVD++:
用户的隐式反馈可以提供额外的偏好信息,能在一定程度上提高预测准确性。例如SVD++把用户是否对item打分作为一种隐式反馈。
对于用户u打分的item,增加一个隐偏好属性
模型参数
与SVD类似,可以通过梯度下降方法求解参数。
如果要加入多种隐式反馈信息,如收藏、租借等,则在用户偏好属性中加入多个隐式反馈项即可:
六、加入时间信息:
时间信息在推荐中有很重要的地位。一个用户对某个item的评价可能在一年后会发生很大的变化。时间信息可以告诉我们用户在某个时间点对item的喜好程度以及随着时间推移用户偏好的改变。
在SVD模型中,容易随时间发生变化的参数有:
bi项:
和
bu项:
首先构建用户评分偏置的线性渐变模型(例如用户u的平均评分可能越来越高):定义用户u评分的平均时间为
参数
式
式
同样的,
pu项:
随着时间的改变,用户的喜好也在发生变化,所以把用户的偏好
有了前面三项的时间函数,timeSVD++的预测函数如下:
最后有个问题,预测函数中如何设定未来某一天的参数,如
七、参考资料
Recommender Systems Handbook
- 推荐系统笔记二、矩阵分解协同过滤
- 推荐系统笔记二、矩阵分解协同过滤
- 推荐系统笔记二、矩阵分解协同过滤
- 协同过滤-矩阵分解推荐 java实现
- 矩阵分解在协同过滤推荐算法中的应用
- 矩阵分解在协同过滤推荐算法中的应用
- 推荐系统(二)协同过滤
- 推荐系统学习笔记之二 基于内容的推荐系统(CBRS)+Collaborative Filtering 协同过滤
- 推荐系统-协同过滤
- 推荐系统协同过滤
- 《推荐系统》--协同过滤推荐
- 利用SVD分解做协同过滤推荐
- 推荐系统学习(二)——协同过滤算法
- Machine Learning第九讲[推荐系统] --(二)协同过滤
- [推荐系统]协同过滤介绍
- 推荐系统 --- 协同过滤算法
- 推荐系统之协同过滤
- 协同过滤 推荐系统实战
- ZSTU 4274 约素 约数,不是因子啊!
- 关于 Java 权限修饰符 的问题总结
- C++ Primer 第5版--练习10.24
- 运行程序,提示找不到共享库
- 东方红大厦
- 推荐系统笔记二、矩阵分解协同过滤
- Cocos2D-X入门知识-windows上利用vs2010进行安装、项目创建v2.2.5
- [LeetCode]100. Same Tree
- 使用CSS3属性(@media)制作网站响应式布局
- 推荐系统笔记三、基于近邻的推荐系统(进阶篇)
- 关于LinkedList和LinkedListNode
- Unreal 入门-创建人物,实现基本走、跑、跳操作。
- WebView学习
- 深入剖析Android内存泄露原理-视频个人笔记