矩阵分解
矩阵分解算法为每个用户和物品生成一个隐向量,将用户和视频定位到隐向量空间中,距离相近的用户和视频表名兴趣点相近,就一年将距离相近的视频推荐给目标用户。
矩阵分解算法框架:
矩阵分解算法将mxn的共现矩阵R分解为mxk维的用户矩阵U和kxn维的物品矩阵V相乘的形式,其中m是用户数量,n是物品数量,k是隐向量的维度。k的大小决定了隐向量表达能力的强弱,k的取值越小,隐向量包含的信息越少,模型泛化能力越高,反之,k越大,包含的信息越大,模型的泛化能能力越小。此外,k的取值还与矩阵分解的求解复杂度直接相关。
基于用户矩阵U和物品矩阵V,用户u对物品i的预估值:
pu是用户u在用户矩阵U中的对应行向量,qi是物品i在物品矩阵V中的对应列向量。
2.3.2矩阵分解的求解过程
对矩阵分解的方法主要有三种:特征值分解、奇异值分解、和梯度下降,但是特征值分解只能用于方阵,不适用于用户-物品矩阵。
SVD分解的具体过程:
假设矩阵M是一个mxn的矩阵,则一定存在一个分解
,其中U是mxm的正交矩阵,V是nxn的正交矩阵,
是mxn的对角矩阵。取对角阵
中较大的k个元素作为隐含特征,删除
的其他维度及U和V中对应的维度,矩阵M被分解为
,至此完成了隐向量的维度为k的矩阵分解。
SVD的缺点:
1,奇异值分解要求原始的共现矩阵是稠密的,但,实际情况,用户-项目矩阵是稀疏的。如果应用奇异值分解,就必须对其进行缺失值填充。
2,传统的奇异值分解的计算复杂度达到了O(mn2)的级别,这对商品数量动辄上百万、千万的互联网几乎不可能接受。
SVD的目标函数:
SVD梯度下降求解目标函数
1,确定目标函数
2,对目标函数求偏导
结果:对qi求偏导:
对pu求偏导
3,利用2求导的结果,沿梯度的反方向更新参数:
4,当迭代达到上限n时,或者低于设定的阈值时,结束训练,否则循环第3步骤。
当矩阵分解完成分解过程后,即可得到用户和物品的隐向量。在对某用户进行推荐时,可以利用该用户的隐向量进行逐行统一內积运算,得出该用户对所有物品的评分预测,再次依次进行排序,得到最终的推荐列表。
因此矩阵分解较协同过滤有更好的泛化能力,由于隐向量的存在,使得任意的用户和物品之间都可以得到预测值,隐向量的生成其实是对共现矩阵进行全局拟合的过程,因此隐向量其实是利用全局信息生成的,有更强的泛化能力。
2.3.3消除用户和物品的打分偏差
为消除用户和物品之间存在的打分偏差则有
第一项是全局偏差,bi是物品偏差(物品i收到的所有评分的均值),bu是用户偏差(用户所有评分的均值),此时矩阵分解的目标函数为:
矩阵分解的优缺点:
优点:
1,泛化能力强,在一定程度上解决了数据稀疏的问题
2,空间复杂度低:不需要存储庞大的用户和物品的相似度矩阵,只需要存储用户和物品的隐向量。
3,更好的扩展性和灵活性:分解后得到用户和物品的隐向量,便于深度学习网络进行无缝结合。
缺点:
矩阵分解你不方便加入用户、物品和上下文相关特征,使得就还早呢分解丧失了利用很多有效信息的机会。同时缺乏对用户历史行为,无法进行有效的推荐。