Processing math: 100%

ALS数学点滴

 

 

 

其中,nui表示用户i评分的电影数目,nmj表示对电影j评分的用户数目。设Ii表示用户i所评分的电影集合,则nuiIi的基数,同样的,Ij表示对电影j评分的用户集合,nmjIj的基数。这对应于Tikhonov正则化中的ΓU=diag(nui)ΓM=diag(nmj)

 

U=[ui]为用户特征矩阵,M=[mj]为电影特征矩阵。

 

我们在M给定的情况下来求解UU中某一列ui是通过求解一个正则化线性最小二乘问题确定的,该问题的求解需要已知的用户i的评分,以及用户i参与评分的电影的特征向量mj.

 

用户特征矩阵的每一列的解ui如下:
ui=A1iVi
该解对应的原始方程为:Aiui=Vi

其中,Ai=MIiMTIi+λnuiEVi=MIiRT(i,Ii)E是一个nf×nf单位矩阵。MIi是电影特征矩阵的一个子矩阵,其中只选取jIi的列。Ii是用户i所评分的电影集合。R(i,Ii)是原始user-movie矩阵R中第i行的向量,该行中只选取jIi的列中的元素。

 

同样的,更新电影特征矩阵M的公式为:

mj=A1jVj,j

其中,Aj=UIjUTIj+λnmjEVj=UIjR(Ij,j)UIj是用户特征矩阵U的子矩阵,其中只选取iIj的列。Ij表示对电影j评过分的用户集合。R(Ij,j)是原始user-movie矩阵R的第j列向量,该列中只选取iIj的行中的元素。

设用户矩阵和电影矩阵的特征数量为nf,对电影j评过分的用户有k个,则UIj为一个nf×k的矩阵,R(Ij,j)为一个k×1的列向量。Vj=UIjR(Ij,j)为一个f×kk×1=f×1的矩阵。

 

设用户数量nu=3,电影数量nm=4,用户以及电影的特征维度nf=2。则user-movie评分矩阵R(Rating)为:

R=[r11r12r13r14r21r22r23r24r31r32r33r34]

若矩阵R是稀疏的,那么其形式可能如下:
R=[r12r13r14r21r24r32r33]

用户特征矩阵U为:
U=[u11u12u13u21u22u23]

电影特征矩阵M为:
M=[m11m12m13m14m21m22m23m24]

显然,我们要求解的是用户特征矩阵U和电影特征矩阵M

求解用户特征矩阵U的时候要固定电影特征矩阵M,用求得的U再去求M,如此迭代,直到RMSE在设定范围之内即可,此时UM收敛到一个局部最优解。

可将U表为U=[ui],i=1,2,3。即:
U=[u1u2u3]

 

调用上面的求解公式ui=A1iVi,其中Ai=MIiMTIi+λnuiEVi=MIiRT(i,Ii),则:
u1=A11V1
以上面的稀疏矩阵为例,求解[ui],i=1,2,3时,I1={2,3,4}I2={1,4}I3={2,3}nu1=3,表示用户u1评过分的电影有3部,设用户ui评过分的电影有k部,那么Ii的个数为kMIi为一个nf×k的矩阵,MIiMTIi为一个nf×nf的矩阵。R(i,Ii)ui所对应的评分向量,该向量的维度为k,因为只取了jIi中的元素,所以R(i,Ii)1×k行向量,RT(i,Ii)k×1列向量。

例如:
A1=MI1MTI1+λnu1E=[m12m13m14m22m23m24][m12m22m13m23m14m24]+λnu1[1001]V1=MI1RT(1,I1)=[m12m13m14m22m23m24][r12r13r14]T=[m12m13m14m22m23m24][r12r13r14]

这样即可求出u1,类似可求出u2,u3

 

好了,这样就求出了U,此时在用U去求解M,求解公式为:mj=A1jVj,j。其中,Aj=UIjUTIj+λnmjEVj=UIjR(Ij,j)。需要注意的是这里的Ij与上面的Ii指代的内容有所区别,上面的Ii表示用户ui所评分的电影集合,Ii中的元素个数小于等于电影的总数,即size(Ii)nm,而这里的Ij表示对电影j评过分的用户个数,所以Ij中的元素个数小于等于用户的总数,即size(Ij)nu

这次以求解m3为例。I3={1,3}nm3=2表示给电影m3评过分的用户有2个。

A3=UI3UTI3+λnm3E=[u11u13u21u23][u11u13u21u23]T+λnm3[1001]V3=UIjR(Ij,j)[u11u13u21u23][r13r33]

 

如此,便可求出m3=A13V3。类似可求出m1,m2,m4

 

 

原始论文:http://www.grappa.univ-lille3.fr/~mary/cours/stats/centrale/reco/paper/MatrixFactorizationALS.pdf

posted @   月圆天心  阅读(578)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示