matirx-factorization-for-RS

矩阵分解技术在推荐系统中的应用

潜在因子分解最成功的案例是基于矩阵分解的,在其基本形式中,矩阵分解对商品评价来推断出用户和item的隐藏因子向量。item和user之间的高匹配会导致推荐。
推荐系统通常依赖的数据防止在矩阵中,其中一个维度是用户,一个维度是感兴趣的项目。通常这个矩阵是稀疏的,因为单个用户可能仅仅评估了项目中一小部分。
矩阵分解的优势在于,它允许结合其他的信息。当显示反馈不可用时候,推荐系统可以根据隐式的反馈意见判断用户偏好。
隐式反馈通过观察用户行为间接反映意见,包括购买历史,浏览历史,搜索模式,甚至鼠标移动。 隐式反馈通常表示事件的存在或不存在,因此它通常由密集填充的矩阵表示。

基础的MF模型

item i对应的向量为$q_i$,用户u对应的隐向量为$p_u$,两者之间的感兴趣程度可以表示为
$$ r_{ui}=q_i^T p_u $$

然后,可以计算得到一个用户最感兴趣的商品。

这个模型的方法最相关是SVD。但是,在使用SVD时候,是需要被分解的矩阵是完整的,但是实际中的用户-项目矩阵是稀疏且有大量missing value。所以,不能直接使用SVD。

有一些方法是直接建模去拟合已经有的用户打分数据。

使用惩罚系数$\lambda$来控制隐藏因子矩阵,防止过拟合。

学习算法

SGD

alternating least squares
因为两个向量都是位置的,所以公式2是非凸的问题,所以,如果我们固定其中一个向量,优化另外一个,就可以进行优化。

ALS方法就是交替性的固定某个向量,优化另外一个向量,直到收敛为止。

Add Bias

观察到的评级大小的变化是由于用户和项目相关的影响,称为偏差,与任何交互无关。在实际中,某些用户比其他用户更倾向打高分,某些项目更容易获得更高的评分等。
我们可以通过增加bias来解决:


其中,$\mu$表示整体的平均打分值。$b_u$ $b_i$分别表示用户u的偏差和项目i的偏差。

额外的输入

通常,一个系统必须要解决冷启动问题。
解决这个问题的方法是合并有关用户的其他信息源。

随时间动态变化

矩阵分解方法非常适合对时间效应建模,这可以显著提高准确性。将评级分解为:

可变置信度的输入

并非所有的评级都是具有相同的权重和置信度。

使用$c_{iu}$表示评价$r_{iu}$的置信度