推荐系统初学者系列(3)-- 隐语义模型(LFM)与矩阵分解模型

上一篇:
推荐系统初学者系列(2)– SVD奇异值分解
下一篇:
推荐系统初学者系列(4)– 一篇长文教你学会推荐系统的矩阵分解

目录:

简介

最近这几年做机器学习和数据挖掘研究的人经常会看到下面的各种名词,即隐含类别模型( Latent Class Model )、隐语义模型( Latent Factor Model )、 pLSA 、 LDA 、 Topic Model 、 Matrix Factorization 、 Factorized Model 。
这些名词在本质上应该是同一种思想体系的不同扩展。在推荐系统领域,提的最多的就是潜语义模型和矩阵分解模型。其实,这两个名词说的是一回事,就是如何通过降维的方法将评分矩阵补全。

LFM和基于邻域的方法的比较

**—– UserCF LFM
理论基础 更多的是一种基于统计的方法,并没有学习过程 有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标建立最优的模型
离线计算的空间复杂度 需要维护一张离线的相关表。假设有 M 个用户和 N 个物品,在计算相关表的过程中,我们可能会获得一张比较稠密的临时相关表,那么假设是用户相关表,则需要 O(M*M) 的空间,而对于物品相关表,则需要 O(N*N) 的空间 如果是 F 个隐类,那么它需要的存储空间是 O(F*(M+N)) ,这在M 和 N 很大时可以很好地节省离线计算的内存
离线计算的时间复杂度 假设有 M 个用户、 N 个物品、 K 条用户对物品的行为记录。那么,UserCF 计算用户相关表的时间复杂度是 O(N * (K/N)^2) ,而 ItemCF 计算物品相关表的时间复杂度是 O(M*(K/M)^2) 如果用 F 个隐类,迭代 S 次,那么它的计算复杂度是 O(K * F * S)。如果K/M>F*S ,则说明 ItemCF 的时间复杂度低于 LFM。总体上,这两种算法在时间复杂度上没有质的差别
在线实时推荐 UserCF 和 ItemCF 在线服务算法需要将相关表缓存在内存中,然后可以在线进行实时的预测。以 ItemCF 算法为例,一旦用户喜欢了新的物品,就可以通过查询内存中的相关表将和该物品相似的其他物品推荐给用户。因此,一旦用户有了新的行为,而且该行为被实时地记录到后台的数据库系统中,他的推荐列表就会发生变化 LFM 在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排名,返回权重最大的 N 个物品。那么,在物品数很多时,这一过程的时间复杂度非常高,可达 O(M*N*F) 。因此, LFM 不太适合用于物品数非常庞大的系统,如果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用LFM 重新排名。另一方面, LFM 在生成一个用户推荐列表时速度太慢,因此不能在线实时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此, LFM 不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。
推荐解释 利用用户的历史行为解释推荐结果 计算出的隐类虽然在语义上确实代表了一类兴趣和物品,却很难用自然语言描述并生成解释展现给用户

1. 传统的SVD分解

对于如何补全一个矩阵,历史上有过很多的研究。一个空的矩阵有很多种补全方法,而我们要找的是一种对矩阵扰动最小的补全方法。那么什么才算是对矩阵扰动最小呢?一般认为,如果补全后矩阵的特征值和补全之前矩阵的特征值相差不大,就算是扰动比较小。所以,最早的矩阵分解模型就是从数学上的 SVD (奇异值分解)开始的。 给定 m 个用户和 n 个物品,和用户对物品的评分矩阵R。首先需要对评分矩阵中的缺失值进行简单地补全,比如用全局平均值,或者用户 / 物品平均值补全,得到补全后的矩阵 R’ 。接着,可以用 SVD 分解将 R’ 分解成如下形式:
这里写图片描述

2. Simon Funk的SVD分解

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

3. 加入偏置项的LFM

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/dooonald/article/details/80269073