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

来源:互联网 发布:mac 流程图 免费 编辑:程序博客网 时间:2024/04/25 06:54

最近一段时间隐语义模型(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》

0 0
原创粉丝点击