基于矩阵分解的推荐算法已经在工业界被广泛应用。
这类算法希望用同一个空间的维度来描述推荐过程中两个实体(用户、物品)的隐语义的特征。
无论是基于数值的矩阵分解如PMF[SVD],还是基于概率的矩阵分解如PLSA、LDA,都是如此。
只不过,用于PMF分解的评分矩阵中包含了用户对所访问物品的评分,而PLSA、LDA面对的数据则只能是用户有过某种访问行为的物品集合。
仅从信息量的角度看,PMF分解的评分矩阵中含有更多的用户行为信息。
而把数据从矩阵的角度看,与PMF相比,LDA、PLSA面对的则是一个评分全为1的矩阵。
我们的问题:
今天我们讨论的也是一个类似的问题,我们需要将推荐中的两个实体(用户、物品)映射到同一个隐语义空间。但问题在于,我们拿到的数据既不是像PMF所面对的用户评分矩阵,也不像LDA、PLSA面对的集合数据。而是介于两者之间的一个0-1矩阵。
当然我们可以将它视为用户评分矩阵的退化版(评分值域仍为连续空间,只不过取值只有0,1),也可以把它看成一个二分类问题的类别标签(0,1非同一个维度上的评分大小,而代表两种不同的判别类型)。
基于数值评分矩阵分解的方法:
如果我们将它看作一个退化(只有0,1评分)的评分矩阵,则可利用PMF直接对其分解。
但不要忘了,PMF或SVD采用最小二乘的方式来拟合矩阵评分,前提是假设评分误差服从正太分布。
虽然也可以大胆假设,但总觉的怪怪的。感觉有点像面对label只有0,1的数据时用线性回归来搞一样的别扭。
基于概率矩阵分解的方法:
当然,我们可以尝试使用一些LDA的变种算法来支持这样的数据。我们可以将该数据看成是两份数据,用文档-词主题模型领域行话来讲则叫做"语料库"。
而0,1 分别是这两个语料库的标识。这样我们可以使用算法:Collective Latent Dirichlet Allocation 来对该矩阵进行分解。
盒模型如下:
该方法假设多个语料库之间的topic可以共享,相比传统LDA的每个topic则只需要维护一个在不同word上的分布,该方法还需要为每个topic维护一个在不同语料库上的多项式分布。
此时,0,1被看做离散变量,其本身不代表任何用户对物品的偏好信息。既然这样,该方式就不限于二值离散表达,C变量可以是0,1。也可以使0,1,2...N,或者是A,B,C,,,。
该方法的好处是可以同时使用多个同领域的语料库来对topic进行约束,语料库越多,效果越好。但面对这份0-1矩阵数据,这种优势则较难体现。相反,数据中0,1之间的相对关系则被忽略。
我们的方法:
我们希望从一个新的视角来审视拿到的数据:
首先:0,1评分本身作为评分是有意义的,其体现了用户对物品的喜欢[讨厌]信息。
其次:0,1评分代表了用户对物品偏好的两个维度[方向],而不是一个维度上的两个值。
参考逻辑回归的实现,我们将每一个[0-1]评分过程看成一个(n=1)的n重的伯努利实验。
则,我们的优化目标即是最大化如下公式:——假设每条数据之间独立同分布。
其中,theta就是我们要求解的模型。
使用似然函数将上述目标具体化之后,得到:
取对数之后:
展开之后:
进一步合并推导:
又因为有:
因此,我们的问题就变为:
对应的最小化问题为:
我们采用SGD的方法来求解该最小化问题,则分别对"u"和“i"求偏导,如下:
偏导即为梯度下降的方向,剩下的就只是迭代求解了,迭代公式如下:
与PMF的对比:
- 其与PMF的本质差异就在于似然函数的选择,PMF假定残差服从高斯分布,则似然函数为:
这也是PMF使用最小二乘优化的根本。
以上。
相关推荐
0计算方法及MATLAB实现简明讲义课件PPS5-1矩阵三角分解.pps
LU矩阵分解的程序#include #include #define N 200 FILE *fp1,*fp2; void main() { int i,j,k,n; float temp; float a[N][N],b[N],x[N],y[N],L[N][N],U[N][N]; fp1=fopen("input3.txt","r"); //由文件...
0, 0, 0, ax1, ay1, -1, -ax1*by1, -ay1*by1; 0, 0, 0, ax2, ay2, -1, -ax2*by2, -ay2*by2; 0, 0, 0, ax3, ay3, -1, -ax3*by3, -ay3*by3; ax4, ay4, 1, 0, 0, 0, -ax4*bx4, -ay4*bx4; 人们可以轻松地将其修改为...
函数[x] = SOR_HW(A,b,x_0,omega)% 输入... L =-tril(A,-1); U = -triu(A,1); a = (D-欧米茄*L); 对于 i=1:N x = a\(((1-omega)*D + omega*U)*x_0) + omega*(a\b); 如果范数(x-x_0)<tol 休息; 结尾x_0=x; 结尾结尾
设S是实数集R的一个非空子...利用可S-因子分解矩阵的S-秩以及因子宽度,引入相对因子宽度的定义,给出了一些可{0,1}-因子分解矩阵的相对因子宽度与因子分解之间的关系,最后利用S-秩和相对因子宽度,刻画了一类矩阵.
基于护士与病人的对应关系,设计了0/1矩阵作为算法编码;采用矩阵编码进化算法(EAs with Matrix Coding)框架对矩阵编码进行迭代。基于求同存异的思想,运用随机编码部分介入技术实现了矩阵型染色体的变异算子。...
对基于矩阵分解的词向量方法进行了研究,发现降维前相似度矩阵质量与词向量质量存在线性相关性,提出了一种基于中心化相似度矩阵的方法。该方法使得相似(不相似或弱相似)词间的相似程度相对增强(减弱)。在WS-353...
非负矩阵分解的变换学习的可识别性。 IEEE信号处理信函。 2020年。 使用Python(3.6)安装软件包TLNMF python setup.py install 本文方程(9)的结果 python examples/tlnmf2_gcm_d4.py 输出应该是一个(随机)矩阵...
能量动量张量的矩阵元素的结构在确定形状因子A(q2),B(q2)和C(q2)的属性中起着重要作用,这些形状因子出现在矩阵元素的Lorentz协变量分解中。 在本文中,我们对庞加莱生成器的矩阵元素采用严格的帧无关的分布...
型,并将其引入到多层非负矩阵分解(AL0-MLNMF)的高光谱解混中,将观测矩阵进行多层次稀疏分.解,提高非负矩阵分解高光谱解混的精度,提升算法的收敛性。仿真数据和真实数据实验表明:该算.法能够避免陷入局部极值,...
nmf的matlab代码使用非负矩阵分解对音频进行时间尺度修改 该存储库包含用于重现以下方法的代码: Roma, G., Green, O. & Tremblay, P. A., Time scale modification of audio using non-negative matrix ...
通过矩阵分解(第 1 部分)以及 nlp 和图形技术(第 2 部分)在简单 recsys 上的个人项目的未记录代码。 作为聚会的一部分进行分享。 相关文章: 第 1 部分: 第 2 部分: 谈话和幻灯片: 数据 使用了来自电子...
Gx = [ 1 0 0; 0 c -s; 0秒]; Gy = [ c 0 s; 0 1 0; -s 0 c]; Gz = [ c -s 0; 0; 0 0 1]; Ax = A * Gx 将 Ax(3,2) 设置为零。 Axy = Ax * Gy 将 Axy(3,1) 设置为零。 R = Axyz = Axy * Gz 将 Axyz(2,1) 设置为零...
display = i-1; else error('The ''display'' parameter value must be a string.'); end % ------------------------------------------------------------------ % 输入参数K的控制 if k == 1 error('The ...
矩阵分解使用MATLAB内置的Levenberg Marquardt(或awful.codeplex.com的简单LM)的低秩矩阵分解的简单实现。 用法: %1。 获得M,W,例如 [M,W] = load_giraffe;%2。 选择初始估计值A0,B0 A0 = rand(size(M,1), 6...
基于MATLAB的几种潮流计算-P_Q.m ...请输入各节点参数形成的矩阵:B2=[0 0 1.05 1.05 0 1;0 3.7 1.3i 1.05 0 0 2;0 2 1i 1 0 0 2;0 1.6 0.8i 1.05 0 0 2;5 0 1.05 1.05 0 3] 请输入P-Q节点数:na=3
三对角矩阵划分matlab代码Mech105-projectCode 这是Mech 105(机械工程问题解决)的所有项目文件 特殊矩阵 该程序将创建一个具有两个输入数字的特殊矩阵。 我操作了二维数组的各种单元格,同时过滤整个数组...分解。 作
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方...
忽必烈为矩阵实现截断矩阵分解的 Clojure 库。 忽必烈使用来实现这些分解。 该库独立于所使用的core.matrix实现。 要将其包含在您的项目中:动机请参阅用法要运行截断的对称特征分解: user> ( def M ( matrix [[ 1 ...
仿真实验表明, 在1000 mm×1000 mm×400 mm的范围内, 当像点检测误差在0-1pixel和0-2pixel内, 所重建三维点的误差分别为0. 1530 mm和0. 6712 mm。在500 mm×500 m×200 mm下, 真实实验重构三维点的误差在0. 3 mm以内...