协同过滤-矩阵分解算法
- 1.奇异值分解
- 2.梯度下降
- 3.矩阵分解方法的优缺点
《深度学习/推荐系统》读书笔记
(其实矩阵分解和协同过滤已经没有特别大的联系了)
2006年,在Netfilx举办的推荐算法竞赛中Netflix Prize Challenge中,以矩阵分解为主的推荐算法大放异彩,拉开了矩阵分解算法在业界流行的序幕。
Netflix 推荐场景–利用用户的行为历史,在Netflix视屏应用中为用户推荐喜欢的电影、电视剧或者纪录片。
矩阵分解算法基本思路–将用户和视频都表示成一个隐向量,计算每个用户隐藏向量和所有视频隐向量之间内积,将内积最大的topK的视屏推荐给目标用户。
m∗nm*nm∗n维共现矩阵RRR,分解成m∗km*km∗k维用户矩阵U,和k∗nk*nk∗n维物品矩阵VVV
R=U∗VR=U * VR=U∗V
则用户uuu对物品i的重构评分为(pup_upu-U矩阵的行向量,qiq_iqi-V矩阵的列向量):
r^ui=qiTpu(2.6)\hat{r}_{ui}=q^T_ip_u\tag{2.6}r^ui=qiTpu(2.6)
- 迷惑点1:用户隐藏向量和所有视频隐向量之间内积,其实就是重构用户对每一部电影的品评分,推荐重构评分高的电影 是如何 实现了用户对未评分电影的预测的呢?
- 矩阵分解中缺失值该怎么处理呢?就是用户没有评分的项目。
矩阵分解的方法:特征值分解、奇异值分解、梯度下降
特征值分解–只能作用于方阵,不适用于分解用户-物品矩阵
1.奇异值分解
Singular Value Decomposition-SVD
M=Um∗mΣm∗nVn∗nM= U_{m*m}\Sigma_{m*n} V_{n*n}M=Um∗mΣm∗nVn∗n
近似分解:
M≈Um∗kΣk∗kVk∗nM\approx U_{m*k}\Sigma_{k*k} V_{k*n}M≈Um∗kΣk∗kVk∗n
缺点:不适用于大规模稀疏矩阵的分解
- SVD要求原始共现矩阵是稠密的,需要对缺失的元素进行填充。
- SVD时间复杂度高(O(mn2)O(mn^2)O(mn2))
2.梯度下降
SVD的缺点使得研究者门另求他路–梯度下降法(矩阵分解的主要方法)
基本思路–参数化qiTpuq^T_ip_uqiTpu,使其和原始评分ruir_{ui}rui的差距尽量小
正则化目标函数:
minq∗,p∗∑(u,i)∈K(rui−qiTpu)2+λ(∣∣qi∣∣2+∣∣pu∣∣2)(2.8)\min_{q^*,p^*}\sum_{(u,i)\in K}(r_{ui}-q^T_ip_u)^2+\lambda(||q_i||^2+||p_u||^2)\tag{2.8}q∗,p∗min(u,i)∈K∑(rui−qiTpu)2+λ(∣∣qi∣∣2+∣∣pu∣∣2)(2.8)
为了消除用户和物品打分的偏差,修正目标函数:
minq∗,p∗∑(u,i)∈K(rui−μ−bu−bi−qiTpu)2+λ(∣∣qi∣∣2+∣∣pu∣∣2+bu2+bi2)\min_{q^*,p^*}\sum_{(u,i)\in K}(r_{ui}-\mu-b_u-b_i-q^T_ip_u)^2+\lambda(||q_i||^2+||p_u||^2+b_u^2+b_i^2)q∗,p∗min(u,i)∈K∑(rui−μ−bu−bi−qiTpu)2+λ(∣∣qi∣∣2+∣∣pu∣∣2+bu2+bi2)
其中:μ\muμ是全局偏差常数,bib_ibi是物品偏差系数(物品i收到的平均评分),bub_ubu用户偏差系数(用户u给出评分的均值)
3.矩阵分解方法的优缺点
优点:
- 泛化能力强–数据稀疏时的相似度也能衡量
- 空间复杂度低
- 扩展性和灵活性–用户物品隐向量,与Embedding的思想相似,可以与其他特征进行拼接。
缺点:
矩阵分解还是下共现矩阵的基础下进行的。共现矩阵缺点–一个矩阵只能表征用户和物品之间的一种作用关系(点击,购买,评分),特征表示能力弱。不便加入用户、物品的上下文相关特征。