`
zhangxiong0301
  • 浏览: 360712 次
社区版块
存档分类
最新评论

使用LFM(Latent factor model)隐语义模型进行Top-N推荐

 
阅读更多

最近在拜读项亮博士的《推荐系统实践》,系统的学习一下推荐系统的相关知识。今天学习了其中的隐语义模型在Top-N推荐中的应用,在此做一个总结。

隐语义模型LFM和LSI,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他们在本质上是相通的,都是找出潜在的主题或分类。这些技术一开始都是在文本挖掘领域中提出来的,近些年它们也被不断应用到其他领域中,并得到了不错的应用效果。比如,在推荐系统中它能够基于用户的行为对item进行自动聚类,也就是把item划分到不同类别/主题,这些主题/类别可以理解为用户的兴趣。

对于一个用户来说,他们可能有不同的兴趣。就以作者举的豆瓣书单的例子来说,用户A会关注数学,历史,计算机方面的书,用户B喜欢机器学习,编程语言,离散数学方面的书, 用户C喜欢大师Knuth, Jiawei Han等人的著作。那我们在推荐的时候,肯定是向用户推荐他感兴趣的类别下的图书。那么前提是我们要对所有item(图书)进行分类。那如何分呢?大家注意到没有,分类标准这个东西是因人而异的,每个用户的想法都不一样。拿B用户来说,他喜欢的三个类别其实都可以算作是计算机方面的书籍,也就是说B的分类粒度要比A小;拿离散数学来讲,他既可以算作数学,也可当做计算机方面的类别,也就是说有些item不能简单的将其划归到确定的单一类别;拿C用户来说,他倾向的是书的作者,只看某几个特定作者的书,那么跟A,B相比它的分类角度就完全不同了。

显然我们不能靠由单个人(编辑)或team的主观想法建立起来的分类标准对整个平台用户喜好进行标准化。

此外我们还需要注意的两个问题:

  1. 我们在可见的用户书单中归结出3个类别,不等于该用户就只喜欢这3类,对其他类别的书就一点兴趣也没有。也就是说,我们需要了解用户对于所有类别的兴趣度。
  2. 对于一个给定的类来说,我们需要确定这个类中每本书属于该类别的权重。权重有助于我们确定该推荐哪些书给用户。

下面我们就来看看LFM是如何解决上面的问题的?对于一个给定的用户行为数据集(数据集包含的是所有的user, 所有的item,以及每个user有过行为的item列表),使用LFM对其建模后,我们可以得到如下图所示的模型:(假设数据集中有3个user, 4个item, LFM建模的分类数为4)

 

R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。对于一个user来说,当计算出他对所有item的兴趣度后,就可以进行排序并作出推荐。LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度

我们发现使用LFM后, 

  1. 我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
  2. 不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
  3. 对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
  4. 对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
  5. 对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。在定义损失函数之前,我们需要准备一下数据集并对兴趣度的取值做一说明。


数据集应该包含所有的user和他们有过行为的(也就是喜欢)的item。所有的这些item构成了一个item全集。对于每个user来说,我们把他有过行为的item称为正样本,规定兴趣度RUI=1,此外我们还需要从item全集中随机抽样,选取与正样本数量相当的样本作为负样本,规定兴趣度为RUI=0。因此,兴趣的取值范围为[0,1]。


采样之后原有的数据集得到扩充,得到一个新的user-item集K={(U,I)},其中如果(U,I)是正样本,则RUI=1,否则RUI=0。损失函数如下所示:

上式中的是用来防止过拟合的正则化项,λ需要根据具体应用场景反复实验得到。损失函数的优化使用随机梯度下降算法:

  1. 通过求参数PUK和QKI的偏导确定最快的下降方向;

  1. 迭代计算不断优化参数(迭代次数事先人为设置),直到参数收敛。



其中,α是学习速率,α越大,迭代下降的越快。α和λ一样,也需要根据实际的应用场景反复实验得到。本书中,作者在MovieLens数据集上进行实验,他取分类数F=100,α=0.02,λ=0.01。
               【注意】:书中在上面四个式子中都缺少了


综上所述,执行LFM需要:

  1. 根据数据集初始化P和Q矩阵(这是我暂时没有弄懂的地方,这个初始化过程到底是怎么样进行的,还恳请各位童鞋予以赐教。)
  2. 确定4个参数:分类数F,迭代次数N,学习速率α,正则化参数λ。

LFM的伪代码可以表示如下:

 

[python] view plaincopy
 
  1. def LFM(user_items, F, N, alpha, lambda):  
  2.     #初始化P,Q矩阵  
  3.     [P, Q] = InitModel(user_items, F)  
  4.     #开始迭代  
  5.     For step in range(0, N):  
  6.         #从数据集中依次取出user以及该user喜欢的iterms集  
  7.         for user, items in user_item.iterms():  
  8.             #随机抽样,为user抽取与items数量相当的负样本,并将正负样本合并,用于优化计算  
  9.             samples = RandSelectNegativeSamples(items)  
  10.             #依次获取item和user对该item的兴趣度  
  11.             for item, rui in samples.items():  
  12.                 #根据当前参数计算误差  
  13.                 eui = eui - Predict(user, item)  
  14.                 #优化参数  
  15.                 for f in range(0, F):  
  16.                     P[user][f] += alpha * (eui * Q[f][item] - lambda * P[user][f])  
  17.                     Q[f][item] += alpha * (eui * P[user][f] - lambda * Q[f][item])  
  18.         #每次迭代完后,都要降低学习速率。一开始的时候由于离最优值相差甚远,因此快速下降;  
  19.         #当优化到一定程度后,就需要放慢学习速率,慢慢的接近最优值。  
  20.         alpha *= 0.9  


本人对书中的伪代码追加了注释,有不对的地方还请指正。

 


当估算出P和Q矩阵后,我们就可以使用(*)式计算用户U对各个item的兴趣度值,并将兴趣度值最高的N个iterm(即TOP N)推荐给用户。

总结来说,LFM具有成熟的理论基础,它是一个纯种的学习算法,通过最优化理论来优化指定的参数,建立最优的模型。

分享到:
评论

相关推荐

    隐语义模型的图书推荐1

    隐语义模型(Latent Factor Model,LFM)是这类系统中的核心算法之一。LFM假设用户和物品之间存在隐藏的语义空间,通过学习这些隐藏因素,来解释用户与物品之间的交互。模型通过最小化用户对物品评分的误差来训练,...

    一个基于深度学习的人像识别及隐语义(LFM)推荐系统.zip

    在这个名为“一个基于深度学习的人像识别及隐语义(LFM)推荐系统.zip”的压缩包文件中,我们可以深入探讨两个关键的IT知识点:人像识别技术和隐语义模型(Latent Factor Model, LFM)在推荐系统中的应用。...

    基于SVD++隐语义模型的信任网络推荐算法.docx

    隐语义模型(Latent Factor Model, LFM)最初应用于文本挖掘领域,用于发现文本中的潜在语义结构。近年来,基于LFM的改进推荐算法在多个领域得到了广泛应用。然而,在信任网络中,此类模型的应用还相对较少,且效果...

    融合隐语义模型的聚类协同过滤

    而融合隐语义模型的聚类协同过滤算法则通过结合隐语义模型(Latent Factor Model,LFM)和聚类方法来优化这一过程。 首先,隐语义模型通过矩阵分解技术,如奇异值分解(SVD),将高维的用户-物品评分矩阵降维为低维...

    推荐算法中的LFM模型简介

    隐含语义模型(Latent Factor Model,LFM)是一种在推荐系统中广泛使用的机器学习技术,它通过降维的方法来处理评分矩阵的缺失值,从而实现个性化推荐。LFM的核心思想是假设用户和物品之间存在一些不可见的、潜在的...

    推荐系统recommendation-system.zip

    2. **隐语义模型(Latent Factor Model, LFM)** 隐语义模型是一种更复杂的推荐技术,它假设用户和物品都可以表示为多维潜在空间中的向量,通过学习这些向量来解释用户对物品的评分。LFM中最典型的是矩阵分解...

    LFM_lfm_

    《LFM_lfm_》是针对LFM(Latent Factor Model,潜在因子模型)基础知识的学习资料,非常适合那些在IT领域,尤其是推荐系统方面基础较为薄弱的学习者。LFM是一种广泛应用于推荐系统的机器学习方法,它通过揭示用户和...

    LFM算法 复杂网络相关

    LFM(Latent Factor Model)算法通常用于推荐系统,它基于隐因子模型来发现用户与物品之间的潜在关联,从而进行个性化推荐。然而,在这个特定的上下文中,LFM似乎被应用到了复杂网络分析中,特别是社区检测。社区...

    电影推荐系统,包括基于ALS、LFM的离线推荐、实时推荐,基于Spark.zip

    在这个项目中,我们将深入探讨两种主要的推荐算法——ALS(交替最小二乘法)和LFM(latent factor model,潜在因子模型),以及如何在Spark平台上实现离线推荐和实时推荐。 ALS(交替最小二乘法)是矩阵分解的一种...

    LFM_LFM推荐算法.zip

    LFM,全称为Latent Factor Model(潜在因子模型),是一种常用的推荐系统算法,它通过挖掘用户和物品之间的潜在特征来预测用户对未评价物品的兴趣。LFM在处理大规模数据集时表现出良好的性能,并且能够捕获用户的...

    AI人工智能课程 机器学习算法班第10讲:推荐系统原理与应用 共58页.pdf

    - Top-N推荐:根据推荐结果与用户真实选择之间的重叠情况来评估推荐的准确性。 2. **覆盖率**: - 衡量推荐系统对物品长尾部分的覆盖程度。 3. **多样性**: - 评估推荐结果列表中不同物品之间的差异性。 4. *...

    基于spark的电影推荐系统,包括基于ALS、LFM的离线推荐、实时推荐.zip

    在本项目中,我们将深入探讨一个基于Spark实现的电影推荐系统,该系统涵盖了基于ALS(交替最小二乘法)和LFM(latent factor model,潜在因子模型)的离线推荐以及实时推荐功能。 1. **Spark技术基础**:Apache ...

    基于邻域的个性化推荐算法LFM.zip

    在众多推荐算法中,基于邻域的个性化推荐算法LFM(Latent Factor Model)因其简单而有效的特性,被广泛应用在电商、音乐、电影等领域。本文将深入探讨LFM算法的原理、实现细节以及在实际应用中的价值。 LFM算法的...

    推荐系统实例、推荐系统实例

    **隐语义模型(LFM,Latent Factor Model)** 更为复杂,它假设用户和项目都可以表示为低维空间中的向量,这些向量的点积可以预测用户对项目的评分。LFM中最典型的是矩阵分解技术,如SVD(奇异值分解)。在Python中...

    一个关于个性化推荐的项目(UserCF,itemCF,LFM,PersonalRank)_Python_Jupyter.zip

    利用Python编程语言和Jupyter Notebook环境进行实现,主要涉及四种推荐算法:User-Based Collaborative Filtering(用户基协同过滤)、Item-Based Collaborative Filtering(物品基协同过滤)、Latent Factor Model...

Global site tag (gtag.js) - Google Analytics