从SVD、SVD++到因子分解机
来源:互联网 发布:数据资源共享交换平台 编辑:程序博客网 时间:2024/06/05 09:47
什么是因子分解?在本文的含义表示:矩阵分解、因子分解机等等。而什么是矩阵分解、因子分解机?看完这篇文章你将会有答案。
传统推荐系统中的矩阵分解
在很多情况下,数据的一小段携带了数据集中的大部分信息,其他信息则要么是噪声,要么就是毫不相关的信息。矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式是两个或多个矩阵的乘积。
假设存在以下user和item的数据矩阵,这是一个极其稀疏的矩阵,这里把这个评分矩阵记为R,其中的元素表示user对item的打分。“?”表示未知的,也就是要你去预测的,现在问题来了:如何去预测未知的评分值呢?可以证明,对任意一个矩阵A,都有它的满秩分解:
有方法证明,对任意一个矩阵A,都有它的满秩分解。
那么刚才的评分矩阵R也存在这样一个分解,所以可以用两个矩阵P和Q的乘积来表示评分矩阵R:
上图中的U表示用户数,I表示商品数。然后就是利用R中的已知评分训练P和Q使得P和Q相乘的结果最好地拟合已知的评分,那么未知的评分也就可以用P的某一行乘上Q的某一列得到了:
这是预测用户u对商品i的评分,它等于P矩阵的第u行乘上Q矩阵的第i列。这个是最基本的SVD算法。
举例:
具体来说,对于一个给定的用户行为数据集(数据集包含的是所有的user、item,以及每个user有过行为的item列表),使用矩阵分解建模后,我们可以得到如下模型:
R矩阵是user-item矩阵,Rij表示的是user i 对item j的兴趣度,这正是我们需要的值。P是user-class矩阵,Pij表示的是user i对class j的兴趣度;Q是class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。\(q_i^T!p_u\)表示用户u和项目i的相互作用,也就是用户对项目表现出的感兴趣的程度。
总结:
矩阵分解把一物多类、多维度的类别、类别权重这几类问题都解决了!
SVD:加入预测基准的矩阵分解
问题:
以上的矩阵分解只考虑到用户对各类别的偏好、物品在各类别上的权重。却并没有考虑到,用户宽松度(用户总是倾向给更低或更高分数)、电影口碑对用户评分结果的影响。
Baseline Predictors:
平均评分记作全局平均数u,使用向量
则预测分数值:
举例:
预测用户
SVD++:一种加入隐式反馈的SVD模型
隐式反馈
以上只是针对评分矩阵,用户直接给物品此时推荐打分的称之为显示反馈。存在一种隐式反馈,用户没有对物品进行过打分评价,但却有其他隐性的表示用户对该物品喜好的行为,比如浏览、收藏、点赞等行为。
在式中,隐式反馈被作为附加的项目隐因子加入模型中,附加的隐式反馈将每一个项目i与因子向量\({y_i}\in{R^f}\)联系起来,用于表示用户是否对该项目有过打分。
具体模型如下:
集合中R(u)包含了用户评价过的项目。在式中,用户被建模为
举例说明如下:
用户的有两种隐式反馈行为,一种为租赁历史,用\({N_1}(u)\)表示,另一种为浏览历史,用\({N_2}(u)\)表示。
那么SVD++的模型可以写为:
因子分解机(FM)
因子分解机,借鉴了隐因子模型和矩阵分解的思想,但是将隐因子之间的内积表示为因子之间的交互关系。它是2010年提出来的新模型,它可以在极其稀疏的情况下预测可信赖的参数。
因子分解机就是一种通用模型,它的提出可以改变传统很多因式分解算法不足,因为传统的模型在遇到一个任务都需要进行模型建立,然后训练参数。因式分解机列出了的变量交互,使用了特征工程法来变换大部分因子分解的模型。的模型方程式可以在线性时间内被计算出来。而且它依赖于线性数量的参数。这样可以进行参数的直接优化和存储并且不需要存储大量的训练数据来进行预测。因子分解机也适用于所有的数据类型,可以用来预测任何的实值特征向量。相对于其他的矩阵分解模型来说,因子分解机是一个通用模型。
回顾一下多元多项式回归(加入了自相关项、交互项):
因子分解机模型
三阶及以上的FM模型不仅对每对变量间的相互作用进行建模,还对每三个变量之间的交互作用进行建模估计。首先去掉了自相关项,其次类别变量间的相互作用被因子分解。在多项式回归中,类别变量间的相互作用
将变量间的交互作用投射到隐空间
定义V_i为超参数,他表示了有k个属性因子的第i个变量。其中,
这样使得
线性时间复杂度
时间复杂度直接计算的话是
重新组合和优化之后,该函数模型的时间复杂度降低到了线性时间
模型参数求解
此时,模型的参数变为
同任何一种有监督学习一样,为优化模型参数,需要定义损失函数来最小化观测数据S与模型之间的误差,对观测数据集中的每一对,求出观测值y与预测值
损失函数
对于二值分类问题,一般定义逻辑斯蒂损失:
另一方面,
优势:
1.在稀疏数据进行参数预测失败的情况下,可以良好地预测。
2.有线性时间复杂度.
3.因子分解机适用于所有的数据类型,可以用来预测任何的实值特征向量。
4.传统的因子模型,每遇到一种新问题,都需要在矩阵分解的基础上建立一个新模型,并在学习参数过程中调节各种参数。FM可以进行参数的直接优化和存储并且不需要存储大量的训练数据来进行预测。
参考博客&文献:
http://blog.csdn.net/u010146543/article/details/48347683
http://blog.sina.com.cn/s/blog_628cc2b70102w4t3.html
http://blog.csdn.net/wjmishuai/article/details/71191945
余秋宏,《基于因子分解机的社交网络关系推荐研究》
向宇川,《基于因子分解模型的移动上下文推荐系统研究》
- 从SVD、SVD++到因子分解机
- 从几何解释SVD分解
- 从几何解释SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- SVD分解
- svd分解
- SVD分解
- 从SVD到LSA&PLSA
- 矩阵分解 SVD分解
- git学习笔记
- C++进阶—>函数模板
- 扩展欧几里得
- Spring入门
- C语言宏定义中##,#,#@,\,不定参的用法
- 从SVD、SVD++到因子分解机
- 算法——矩阵快速幂 求第N个斐波那契数
- 浅谈分块(未完,待续)
- Java多线程2
- android 进程间通信 实现原理
- 关于HttpSession对象
- 简单的加法口诀表(新手学C)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛---Half-consecutive Numbers
- Qt笔记_16