基于矩阵分解的推荐算法已经在工业界被广泛应用。
这类算法希望用同一个空间的维度来描述推荐过程中两个实体(用户、物品)的隐语义的特征。
无论是基于数值的矩阵分解如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使用最小二乘优化的根本。
以上。
相关推荐
MATLAB 矩阵分解 MATLAB 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有 LU 分解、QR 分解、Cholesky 分解、Schur 分解、Hessenberg 分解、奇异分解等。 1. LU 分解...
#### 四、矩阵分解与广义逆的应用 **题目背景:** 针对给定矩阵 \(A\) 和向量 \(b\),考察了QR分解、广义逆及其在求解线性方程组中的应用。 **1. QR分解** - QR分解将矩阵 \(A\) 分解为正交矩阵 \(Q\) 和上三角...
0计算方法及MATLAB实现简明讲义课件PPS5-1矩阵三角分解.pps
通过连续应用这些变换矩阵,可以得到从基坐标系到末端执行器坐标系的整体变换矩阵\(H_0^n\),进而计算出末端执行器的位置和姿态。 #### 三、总结 D-H表示法提供了一种标准化的方法来描述串联机器人的运动学特性,...
在数值分析领域,矩阵分解是一种基础且重要的技术,它被广泛应用于线性代数、机器学习、信号处理和许多其他领域。本节我们将探讨几种关键的矩阵分解方法,特别是旋转变换、反射变换、Householder反射和Givens旋转,...
在数学中的线性代数领域,矩阵三角分解是一种重要的技术手段,用于将一个矩阵分解为几个更简单的矩阵的乘积。其中,LDR分解是三角分解的一种类型,它将一个矩阵表示为一个单位下三角矩阵(L)、一个对角矩阵(D)和...
5. SVD(奇异值分解):将任意矩阵分解为一个单位酉矩阵、一个对角矩阵和另一个单位酉矩阵的乘积,这是矩阵论中最强大的分解之一,广泛应用在数据压缩、统计建模等领域。 通过深入学习这些概念,你可以掌握矩阵论的...
0-1整数规划是运筹学领域的一个重要分支,主要应用于决策问题,尤其是在资源有限、选择二元(是或否)的情况下优化决策。MATLAB作为一种强大的数学计算和建模工具,非常适合解决这类问题。本资源包含了一段MATLAB...
在IT领域,矩阵分解是数值计算中的核心概念,它在科学计算、数据分析、机器学习等多个领域有着广泛应用。这里,我们主要关注的是用Fortran语言实现的矩阵分解算法,包括LU分解、QR分解和奇异值分解。 首先,让我们...
1. 非负定性:\( \langle \mathbf{u}, \mathbf{u} \rangle \geq 0 \),且只有在\( \mathbf{u} = \mathbf{0} \)时才等于0。 2. 齐次性:\( \langle \alpha \mathbf{u}, \mathbf{v} \rangle = \alpha \langle \mathbf{...
在进行矩阵并行计算时,我们通常会将大矩阵分解为小块,然后在不同的线程或任务中处理这些子矩阵。这可以通过任务并行库(TPL)中的Parallel类实现,它提供了Parallel.For和Parallel.ForEach等方法,可以方便地对...
0-1背包问题是一种经典的组合优化问题,在计算机科学和运筹学中有着广泛的应用。它描述的是这样的场景:你有一组物品,每种物品都有一个重量和一个价值,你有一个容量有限的背包,你需要决定哪些物品应该放入背包,...
若矩阵$A$满足$A^3=A$,可以通过其Jordan分解证明存在非奇异矩阵$X$,使得$X^{-1}AX=I_r-I_s0t$。这里的$I_r$、$I_s$和$0$分别代表单位矩阵和零矩阵。因为$A^3=A$,所以Jordan块必须是1、-1或0,从而推导出结论。 ...
6. **逆矩阵**:如果一个方阵A有逆矩阵,记为A^-1,那么AA^-1 = A^-1A = I。逆矩阵的存在性是解决线性方程组的关键。 7. **行列式**:对于方阵,行列式是一种特殊的数值,它反映了矩阵的性质,如行列式的值为0意味...
- **矩阵对角化**:如果矩阵A有n个线性无关的特征向量,则存在一个可逆矩阵P使得P^-1AP为对角矩阵。 - **主成分分析**:在数据科学和机器学习中,通过对协方差矩阵或相关矩阵的特征值分解来实现数据降维。 ### 四、...
消元过程中,对于每一列,代码从主对角线开始,将下面的元素用0替换,并确保主对角线上的元素为1。与此同时,更新上三角矩阵U和下三角矩阵L的对应元素。 在实验结果部分,输出了三个不同输入矩阵的U、L矩阵以及对应...
此外,0Ax的通解可以用IA的广义逆A^(-1)表示。 8. **相似对角化与实数特征值**: - 证明了一类矩阵可以与对角矩阵相似,并且所有特征值均为实数。 9. **可逆矩阵的性质**: - 如果矩阵A和B满足11, BAA,则可以...
概率矩阵分解是推荐系统中的经典算法之一,它源于矩阵分解的原理,通过将用户-物品交互矩阵分解为两个低秩矩阵的乘积,来捕获用户和物品之间的潜在特征。这种方法的优点在于能够处理稀疏数据,因为用户和物品的交互...
\[ L_{ij} = \frac{A_{ij} - \sum_{k=0}^{j-1} D_{kk} L_{ik} U_{kj}}{D_{jj}}, \quad (i > j) \] #### 三、C++程序实现 下面是对称矩阵LDU分解的C++实现代码详解: 1. **类定义**:首先定义了一个名为`matrix`...
奇异值分解(Singular Value Decomposition,简称SVD)是一种线性代数中的矩阵分解方法,具有广泛的理论和应用价值。在本实验中,我们将深入理解SVD的原理,并通过Python实现对简单矩阵的分解以及图像的压缩。 一、...