# 矩阵分解
协同过滤是很直观、可解释性强的模型,但它并不具备很强的泛化能力,有一个严重的问题:热门的物品有很强的头部效应,而尾部的物品由于特征向量稀疏,很少与其他物品产生相似性,导致很少被推荐
为了解决这个问题,增加模型的泛化性,矩阵分解被提出,在协同过滤的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和特征,在一定程度上弥补了协同过滤处理稀疏矩阵能力不足的问题
协同过滤仅仅利用了用户和物品之间的交互,无法有效引入年龄、性别、商品描述、商品分类等一些用户特征、物品特征、上下文特征,导致有效信息的遗漏
# 矩阵分解算法
矩阵分解基本方法有三种:特征值分解、奇异值分解、Funk-SVD
求解方法有梯度下降法,最小二乘法
# 特征值分解
# 奇异值分解
一个M*N的矩阵,一定可以分解为
其中U是m*m的正交矩阵,V是n*n的正交矩阵,是m*n的对角矩阵,对角线上的元素被称为奇异值
SVD解决了特征值分解只用于方阵的问题,但是也存在问题
- SVD需要原始矩阵是稠密的,如果矩阵稀疏,则求出的奇异值效果很差,而在推荐系统中,很少有数据稠密的状态,这就使得奇异值分解在应用前需要进行数据填充
- 传统的SVD在求奇异值时,计算复杂度很高
# LFM隐语义模型
详解请点击 LFM隐语义模型
# 优缺点
# 优点
- 泛化性强,在一定程度上解决了数据稀疏的问题
- 空间复杂度低,不再需要存储协同过滤模型服务阶段多需要的庞大的用户相似和物品相似的矩阵,只需要存储用户和物品的隐向量
- 更好的扩展性和灵活性,矩阵分解产生的是隐向量,这与embedding的思想相似
# 局限性
- 与协同过滤一样,矩阵分解不方便加入用户、物品、上下文的相关特征,这是矩阵分解丧失了利用有效信息的机会
- 缺乏用户历史行为时,无法进行有效推荐