推荐算法之矩阵分解

协同过滤详见:https://blog.csdn.net/qq_38375203/article/details/124518238?spm=1001.2014.3001.5502

一、协同过滤的下一步发展

协同过滤是一个非常直观且可解释性很强的模型,但是它并不具备泛化的能力。或者说协同过滤无法将两个物品相似这一信息转换到别的物品上。这就会产生头部效应,即热门的物品会有着丰富的矩阵向量参数,而冷门的物品的矩阵向量就很稀疏,这就导致了冷门物品很少被推荐,这就是我们常说的冷启动问题。

为了解决这个问题,增加模型的泛化能力,于是提出了矩阵分解的技术

二、矩阵分解原理

矩阵分解期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上,距离相近的用户和视频表明兴趣特点相似。那么如何得到这个隐向量呢?在矩阵分解算法框架下,用户和物品的隐向量是通过分解协同过滤算法生成的共现矩阵得到的。如图所示

推荐算法之矩阵分解_第1张图片

 矩阵分解算法将m×n的共现矩阵R分解为m×k的用户矩阵U和k×n的物品矩阵V,其中m是用户数量,n是物品数量,k是隐向量的维度。k的大小决定了隐向量表达能力的强弱。k的取值越小,隐向量包含的信息越少,模型的泛化能力越高,k取值越大,反之。如何找到一个合理的k值就需要进行多方位衡量。

基于用户矩阵U和物品矩阵V,用户u对物品i的评分如公式所示:

推荐算法之矩阵分解_第2张图片

 三、矩阵分解如何求解

对矩阵进行分解的主要方法有三种:特征值分解、奇异值分解(SVD)和梯度下降。其中特征值分解只能用于方阵,显然在这里不适用。

(1)奇异值分解

而对于奇异值分解,其具体描述为:假设矩阵M是一个m*n的矩阵,则一定存在一个分解  ,其中U是m*m的正交矩阵,V是n*n的正交矩阵,Σ是m*n的对角阵,可以说是完美契合分解评分矩阵这个需求。其中,对角阵Σ还有一个特殊的性质,它的所有元素都非负,且依次减小。这个减小也特别快,在很多情况下,前10%的和就占了全部元素之和的99%以上,这就是说我们可以使用最大的k个值和对应大小的U、V矩阵来近似描述原始的评分矩阵。

但是奇异值分解有两点缺陷。一点就是要求共现矩阵必须是稠密的,但是用户-物品共现矩阵往往是非常稀疏的。第二点就是奇异值分解的复杂度达到了O(mn²)级别,对于几百万个用户、商品数量是不可以接受的。

(2)梯度下降

由于奇异值分解的缺陷,梯度下降成为了主要的方法。

推荐算法之矩阵分解_第3张图片

接下来 进行一段简单的手动梯度下降进行模拟矩阵分解的过程。

推荐算法之矩阵分解_第4张图片

四、消除打分偏差

由于不同用户打分偏差(比如A用户认为五分已经很高了,三分很低。而B用户认为三分很高了,一分才很低),不同物品的衡量保准也有所不同。这就导致了矩阵分解的时候有一些偏差引入。为了决解这个问题,在进行矩阵分解的时候加入了用户和物品的偏差向量,即:

与此同时,矩阵分解目标函数也要在上述的基础上发生改变:

 

矩阵分解有着泛化能力强,空间复杂度低,良好的扩展性和灵活性等优点,但是再推荐算法中,没有加入用户物品和上下文的特征,并且并且没有时效性,无法对信息进行充分的推荐。但是可以和深度学习融合起来使用。

参考:《深度学习推荐系统》 

 

 

 

你可能感兴趣的:(推荐算法,矩阵,机器学习)