1.2 矩阵分解算法
基于共线矩阵的协同过滤算法能够通过用户的历史信息产生推荐列表,可是又受到现实中共现矩阵存在的稀疏性以及头部效应的制约。于是基于矩阵分解的算法,通过将共现矩阵进行分解,将原本的高维表示向量(用户向量和物品向量)嵌入到稠密低维空间,从而实现以 向量内积(评分) 为推荐判断标准的方法。
矩阵分解算法:(A:共线矩阵→U:用户矩阵 V: 物品矩阵)
a. 特征分解(只能用于方阵)。
b.奇异值分解(时间复杂度高 O ( m n 2 ) O(mn^2) O(mn2)。但已有处理稀疏矩阵的方法,但受制于现实共现矩阵维度非常高)
c. 基于梯度下降的共线矩阵分解(✔)。
基于梯度下降的共线矩阵分解:
值得注意的是,基于矩阵分解的算法,是将用户 u i u_i ui对物品 v j v_j vj的原始评分 s ( i , j ) s_(i,j) s(i,j)分解成用户向量 u i \textbf{u}_i ui和物品向量 v j \textbf{v}_j vj的内积。
于是我们将这一思想沿用,并作为目标函数,即在k维向量空间中寻找n个用户的向量表示 U = { u i ∣ i = 1 , . . . , n } \textbf{U}=\{\textbf{u}_i|i=1,...,n\} U={ui∣i=1,...,n}以及m个物品的向量表示 V = { v j ∣ j = 1 , . . . , m } \textbf{V}=\{\textbf{v}_j|j=1,...,m\} V={vj∣j=1,...,m}, 使得下列目标函数(含正则项,避免过拟合)最小化(为了简化公式表示,暂时默认所有评分值都存在,当不存在时可以不计算对应部分):
m i n U , V f ( U , V ) = ∑ i = 1 , … , n ; j = 1 , … , m ( s ( i , j ) − u i T v j ) 2 + λ ∑ i = 1 , … , n ∣ ∣ u i ∣ ∣ 2 + λ ∑ j = 1 , … , m ∣ ∣ v j ∣ ∣ 2 min_{\mathbf{U},\mathbf{V}}\quad f(\mathbf{U},\mathbf{V})=\quad{\sum_{i=1,\dots,n;j=1,\dots,m}(s(i,j)-\mathbf{u_i}^T\mathbf{v_j})^2+\lambda\sum_{i=1,\dots,n}||\mathbf{u}_i||^2+\lambda\sum_{j=1,\dots,m}||\mathbf{v}_j||^2} minU,Vf(U,V)=i=1,…,n;j=1,…,m∑(s(i,j)−uiTvj)2+λi=1,…,n∑∣∣ui∣∣2+λj=1,…,m∑∣∣vj∣∣2
其中 ∣ ∣ ∗ ∣ ∣ ||*|| ∣∣∗∣∣表示向量的二范数。
为了进行梯度下降,我们对目标函数进行求导,可得,
∂ f ∂ u i = 2 λ u i + ∑ j = 1 , … , m 2 ( s ( i , j ) − u i T v j ) v j \frac{\partial f}{\partial \mathbf{u}_i}=2\lambda\mathbf{u}_i+\sum_{j=1,\dots,m}{2(s(i,j)-\mathbf{u}_i^T\mathbf{v}_j)\mathbf{v}_j} ∂ui∂f=2λui+j=1,…,m∑2(s(i,j)−uiTvj)vj
∂ f ∂ v j = 2 λ v j + ∑ i = 1 , … , n 2 ( s ( i , j ) − u i T v j ) u i \frac{\partial f}{\partial \mathbf{v}_j}=2\lambda\mathbf{v}_j+\sum_{i=1,\dots,n}{2(s(i,j)-\mathbf{u}_i^T\mathbf{v}_j)\mathbf{u}_i} ∂vj∂f=2λvj+i=1,…,n∑2(s(i,j)−uiTvj)ui
在实际应用中,不同商品的评分标准和不同用户的评分标准可能存在差异,所以我们添加上全局偏差 μ \mu μ,各个用户i的偏差 μ u i \mu_{ui} μui以及各个物品j的偏差 μ v j \mu_{vj} μvj进目标函数。即建模拟合问题为,
s ^ ( i , j ) = μ + μ u i + μ v j + u i T v j \hat{s}(i,j)=\mu+\mu_{ui}+\mu_{vj}+\mathbf{u}_i^T\mathbf{v}_j s^(i,j)=μ+μui+μvj+uiTvj
算法总结:
- 优点:泛化能力得到了增强(易于表达未知用户-商品对的评分),在一定程度上解决了数据稀疏问题(e.g. 稀疏向量推荐误差)。空间复杂度比共线矩阵低: O ( k × ( n + m ) ) O(k\times(n+m)) O(k×(n+m))。具有更好的扩展性和灵活性(相当于将用户的历史数据进行了Embedding),有利于结合深度学习。
- 缺点:该算法与协同过滤算法一样,无法结合用户的个人信息以及物品的属性,上下文相关特征,当用户历史信息缺失时,无法进行有效推荐。
附录:
附1,SVD分解基本思路:
存在一个 n × m n\times m n×m矩阵 A \mathbf{A} A, 由于 A A T \mathbf{AA}^T AAT是实对称矩阵,实对称矩阵一定可以进行特征分解,则利用特征分解分解 A A T \mathbf{AA}^T AAT得到奇异值和 U \mathbf{U} U矩阵,再利用奇异值和 A T A \mathbf{A}^T\mathbf{A} ATA得到 V \mathbf{V} V矩阵。