ALS数学点滴
其中,nui表示用户i评分的电影数目,nmj表示对电影j评分的用户数目。设Ii表示用户i所评分的电影集合,则nui是Ii的基数,同样的,Ij表示对电影j评分的用户集合,nmj是Ij的基数。这对应于Tikhonov正则化中的ΓU=diag(nui)和ΓM=diag(nmj)
设U=[ui]为用户特征矩阵,M=[mj]为电影特征矩阵。
我们在M给定的情况下来求解U。U中某一列ui是通过求解一个正则化线性最小二乘问题确定的,该问题的求解需要已知的用户i的评分,以及用户i参与评分的电影的特征向量mj.
用户特征矩阵的每一列的解ui如下:
ui=A−1iVi
该解对应的原始方程为:Aiui=Vi
其中,Ai=MIiMTIi+λnuiE ,Vi=MIiRT(i,Ii)。E是一个nf×nf单位矩阵。MIi是电影特征矩阵的一个子矩阵,其中只选取j∈Ii的列。Ii是用户i所评分的电影集合。R(i,Ii)是原始user-movie矩阵R中第i行的向量,该行中只选取j∈Ii的列中的元素。
同样的,更新电影特征矩阵M的公式为:
mj=A−1jVj,∀j
其中,Aj=UIjUTIj+λnmjE,Vj=UIjR(Ij,j)。UIj是用户特征矩阵U的子矩阵,其中只选取i∈Ij的列。Ij表示对电影j评过分的用户集合。R(Ij,j)是原始user-movie矩阵R的第j列向量,该列中只选取i∈Ij的行中的元素。
设用户矩阵和电影矩阵的特征数量为nf,对电影j评过分的用户有k个,则UIj为一个nf×k的矩阵,R(Ij,j)为一个k×1的列向量。Vj=UIjR(Ij,j)为一个f×k⋅k×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在设定范围之内即可,此时U和M收敛到一个局部最优解。
可将U表为U=[ui],i=1,2,3。即:
U=[u1u2u3]
调用上面的求解公式ui=A−1iVi,其中Ai=MIiMTIi+λnuiE ,Vi=MIiRT(i,Ii),则:
u1=A−11V1
以上面的稀疏矩阵为例,求解[ui],i=1,2,3时,I1={2,3,4},I2={1,4},I3={2,3}。nu1=3,表示用户u1评过分的电影有3部,设用户ui评过分的电影有k部,那么Ii的个数为k,MIi为一个nf×k的矩阵,MIiMTIi为一个nf×nf的矩阵。R(i,Ii)为ui所对应的评分向量,该向量的维度为k,因为只取了j∈Ii中的元素,所以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=A−1jVj,∀j。其中,Aj=UIjUTIj+λnmjE,Vj=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=A−13V3。类似可求出m1,m2,m4。
原始论文:http://www.grappa.univ-lille3.fr/~mary/cours/stats/centrale/reco/paper/MatrixFactorizationALS.pdf
去吧,去吧,到彼岸去吧,彼岸是光明的世界!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人