孙远帅. 基于大数据的推荐算法研究[D]. 厦门大学, 2014.
读的一篇论文的总结(4)
矩阵分解的主要工作是利用分布式编程技术将矩阵分解算法并行化。
矩阵分解算法
矩阵分解技术的目标是,对每个用户和项目构建一个向量因子模型,由k维向量表示,其中每个分量代表用户在一个因子上的偏好程度或者项目在一个因子上的侧重程度。
假设用户对项目的评分矩阵是M,用户因子矩阵是U,项目因子矩阵V,则矩阵分解算法可表示为:M=UV
实现该矩阵分解,即解下面的最优化问题:
由于评分矩阵的稀疏性,为了避免过拟合,通常在公式中加入正则项(常用正则项为二范式)。
其中λu表示用户模型向量模的权重,λv人表示项目模型向量模的权重。
矩阵分解解法
梯度下降法
优化时,当不满足终止条件(损失函数值收敛,即前后两次迭代损失函数值变化不大,在一定范围内,或者固定迭代次数)
梯度下降法缺点:损失函数值越接近局部极值时,步长应设定的越小,因而收敛速度较慢。因此,在很多工作中,采取固定循环迭代次数,每隔一轮倍缩步长的方法,但这样只能得到目标函数的近似解。交替下降法(只适用于公式5.3)
交替下降法的实质就是固定U令f对V的偏导等于零,更新V;然后固定V,令f对U的偏导等于零,更新U。
即
矩阵分解的并行化
对梯度下降方法的进行近似求解,利用Hadoop技术将矩阵分解算法并行化。
把用户因子模型矩阵和项目因子模型矩阵的更新规格修改成矩阵乘除的形式:
从用户因子模型U和项目因子模型V更新公式定义可以看出,实现矩阵分解算法,重点在矩阵乘法的实现。
- 内积法的Hadoop实现
矩阵C=AB(左矩阵行与右矩阵列的内积)(C矩阵是m*n,A是m*s,B是s*n)
此方法只有在右矩阵B是小矩阵时计算效率很高 - 外积法
通过左矩阵列和右矩阵行的外积来计算(基于外积法的mapreduce实现的最大并发粒度是s)
- 分块内积:当Reduce节点的内存不能存放下左矩阵的一行(列)和右矩阵的一列(行)时,上面的两种方法就不能有效地解决问题。此时可以采用分块矩阵的方法实现,将左矩阵划分为m1*s1的等大小矩阵,将右矩阵划分为s1*n1的等大小矩阵来进行计算
在通过内积法来计算