一、矩阵分解介绍
上一节介绍了协同过滤算法,针对协同过滤算法的头部效应较为明显,泛化能力弱的问题,矩阵分解算法被提出。矩阵分解在协同过滤算法中“共现矩阵”的基础上,加入了隐向量的概念,加强了模型处理稀疏矩阵的能力,针对性地解决了协同过滤存在的主要问题。下面就通过一张图来看矩阵分解算法和协同过滤算法的原理。
矩阵分解算法希望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上(如图2-4(b)所示),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。例如,如果希望为图2-4(b)中的用户Dave推荐视频,可以发现离Dave的用户向量最近的两个视频向量分别是“Ocean’s 11”和“The Lion King”,那么可以根据向量距离由近到远的顺序生成Dave的推荐列表。
在“矩阵分解”的算法框架下,用户和物品的隐向量是通过分解共现矩阵得到的,如下图
矩阵分解算法将mxn维的共现矩阵R分解为m xk维的用户矩阵U和kxn维的物品矩阵V相乘的形式。其中m是用户数量,n是物品数量,k是隐向量的维度。k 的大小决定了隐向量表达能力的强弱。k 的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。此外,k的取值还与矩阵分解的求解复杂度直接相关.
那么基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如下:
其中 p,是用户u在用户矩阵U中的对应行向量,qi是物品i在物品矩阵V中的对应列向量。
对矩阵进行矩阵分解的主要方法有三种:特征值分解(Eigen Decomposition ).奇异值分解( Singular Value Decomposition ,SVD)和梯度下降( GradientDescent)。
二、特征值分解
1.特征值与特征向量
特征值与特征向量是线代里面的知识,他们数学描述如下:
如果 A 是 n 阶方阵,数 λ 和 n 维非零列向量 x 是 A 的对应于特征值的特征向量,有:
A
x
=
λ
x
Ax=λx
Ax=λx
则矩阵A可以分解成
A
=
P
Λ
P
−
1
A=P\Lambda P^{-1}
A=PΛP−1其中,P是这个矩阵 A 的特征向量组成的矩阵,Λ 是特征值组成的对角矩阵,当然对角阵Λ 特征值的摆放顺序要与特征向量一一对应。
由于特征值分解仅适用于方阵,因此不适用于用户-物品矩阵,下面讲解奇异值分解。
三、奇异值分解
1.定义与定理
矩阵的奇异值分解是指,将一个非零的mxn实矩阵A,表示为三个实矩阵乘积的运算,即进行矩阵的影子分解:
其中,U是m阶正交矩阵,V是n阶正交矩阵,∑是由降序排列的非负对角线元素组成的mxn矩形对角矩阵,满足
2.分解过程
由于公式不好编辑,这里直接附上周志华老师《统计学习方法》的截图,特征值讲的很细致,大家可以参考这本书来理解。
可以说,奇异值分解似乎完美地解决了矩阵分解的问题,但其存在两点缺陷,使其不宜作为互联网场景下矩阵分解的主要方法。
(1)奇异值分解要求原始的共现矩阵是稠密的。
(2)传统奇异值分解的计算复杂度达到了o(mn^2)的级别,由于上述两个原因,传统奇异值分解也不适用于解决大规模稀疏矩阵的矩阵分解问题。
下一节讲解逻辑回归模型。