3、隐语义模型

LFM核心思想在于通过隐含的特征联系用户兴趣和物品,即基于用户行为的统计数据来自动聚类,发现物品中隐含的类别,从而用于推荐。

3.1 基础算法

(1) 假设物品中隐含的类别(隐特征)有个,参数用来表征用户u的兴趣和第k个隐类的关系,参数用来表征第i个物品和第k个隐类之间的关系,从而LFM定义了用户u对物品i的兴趣度量方式:。那么显然LFM核心在于通过用户行为数据得到参数,从而利用兴趣度量公式为每个用户推荐物品。
(2) 参数的获取,LFM是通过机器学习的方法,即优化下述损失函数:

采用随机梯度下降法,很容易得到递推公式为

然后完成推荐程序即可。
(3) Python实现代码如下:
### Select the negative samples
### in implicit feedback dataset & TopN recommandation ###
def extendDataset(items_interacted, items_candidated):# the frequency of occurrence of certain item in the candidated items pool# is proportional to its popularityretDataset = dict()# positive samplesfor ii in items_interacted.keys():retDataset[ii] = 1# negative samplesfor ii in range(0, len(items_interacted)*3):# the upper bound len(items_interacted)*3 is for ensuring that# the number of negative samples is nearly same as positive samplesitem = items_candidated[random.randint(0, len(items_candidated)-1)]if item in retDataset:continueretDataset[item] = 0n += 1if n > len(items_interacted):breakreturn retDatasetdef LFM(user_items, K, alpha, lam, maxIter):[P, Q] = InitModel(user_items, K)for iter in range(maxIter):for user, items in user_items.items():samples = extendDataset(items)for item, rui in samples.items():eui = rui - Predict(user, item)for k in range(K):P[user][k] += alpha*(eui*Q[item][k]-lam*P[user][k])Q[item][k] += alpha*(eui*P[user][k]-lam*Q[item][k])alpha *= 0.9def Recommend(user, P, Q):rank = dict()for item in Q.keys():for k, qik in Q[item].items():puk = P[user][k]if item not in rank:rank[item] += puk*qikreturn rank

3.2 性能评价

(1)这里首先讲述下上面程序中样本扩展的内容。由于此书的重点在于讨论隐反馈数据集下TopN推荐的问题,显然其中一个特点就是原数据集只有正样本而没有负样本,这对于LFM中的算法学习显然是不可行的,因此,必须在原数据集上想办法为每个用户生成负样本。这里采用以下原则:对于每个用户,从那些热门物品且他没有过行为的物品中采样出一些作为负样本,采样时,要保证每个用户的正负样本数目相当。

(2)在完成样本扩充之后,LFM在TopN推荐中的性能实际上由四个参数影响:隐特征的个数K,学习速率alpha,正则化参数lambda和负/正样本比例ratio。实验证明,参数ratio对LFM性能影响最大。

(3)由LFM算法可以看出,LFM在每次训练时,即计算参数,都是在所有用户行为记录上进型的,而且为了效果更好,还要反复迭代,所以每次训练很耗时间和资源,一般实际应用中都是每天训练一次,很难实现实时更新。雅虎在新闻推送中为了解决LFM非常明显的冷启动问题,对兴趣计算公式采取了一些改进,有兴趣可以细读。

3.3 LFM与基于领域方法的比较

(1) 理论基础:LFM具有比较好的理论基础,是一种学习方法。基于领域的方法是一种基于统计的方法,没有学习的过程。

(2) 离线计算的空间复杂度:假设系统有M个用户和N个物品,基于领域的方法需要维护一张离线的相关表,可能这张表还是一张比较稠密的临时相关表,对于UserCF,用户相关表需要O(M*M)的空间,对于ItemCF,物品相关表需要O(N*N)的空间。对于有K个隐类的LFM来说,则需要O(K*(M+N))的存储空间。

(3) 离线计算的时间复杂度:进一步假设系统内每个用户对一件物品有F条评论的话,UserCF计算用户相关表需要的时间复杂度为O(N*(F/N)^2),而ItemCF的物品相关表为O(M*(F/M)^2),对于迭代S次的LFM来说,则是O(K*F*S)。一般情况下,LFM的时间复杂度稍高于基于领域的方法,但没有质的差别。

(4) 在线实时推荐:由于基于领域的方法可以将相关表缓存在内存中,可实施在线实时预测,由于LFM生成用户推荐列表速度太慢,因而不能执行在线实时计算,即当用户有了新的行为后,他的推荐列表并不会发生变化。

(5) 推荐解释:显然,LFM是没法提供推荐解释的。

推荐系统(三) —— 利用用户行为数据 —— 隐语义模型相关推荐

  1. 推荐系统实践-利用用户标签数据(4)

    4.1 UGC标签系统的代表应用 标签应用一般分为两种,一种是作者或者专家来给物品打标签,另外一种是让普通用户打标签即UGC(User Generated Content),当用户给物品打标签时,一方 ...

  2. 【推荐系统(二)】协同过滤之隐语义模型(LFM)

    文章目录 一.引例 二.LFM 主要思想 训练样本构造 损失函数定义 参数学习 调参相关 三.小结 优点 缺点 基于用户行为分析的推荐算法一般称为协同过滤算法.所谓协同过滤,就是指众多的用户可以齐心协 ...

  3. 《推荐系统实践》样章:如何利用用户标签数据

    <推荐系统实践>样章:如何利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖于不同的媒介.GroupLens在文章1中认为目前流行的推荐系统基本上通过三种方式来联系用 ...

  4. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  5. 【读书笔记】推荐系统实践·第四章·利用用户标签数据

    代码方面,主要实现了4.3和4.2.2的一个验证统计,4.4的代码本来准备写一下的,后来因为杂碎的统计工作太多就放弃了.代码和笔记的word版放在https://github.com/littleli ...

  6. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  7. 推荐系统实践读书笔记-02利用用户行为数据

    推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...

  8. [推荐系统读书笔记]利用用户标签数据

    推荐系统的目的是联系用户的兴趣和物品,这种联系需要以来不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系童虎兴趣和物品. 第一种方式是利用用户喜欢过的物品,给用户推 ...

  9. 【推荐系统】第二章 利用用户行为数据

    2.1 用户行为数据简介 用户行为在个性化推荐系统种一般分为两种,显性反馈和隐形反馈.显示反馈包含明确的用户喜好行为,如点赞和讨厌等.隐形反馈是不明确的,如用户浏览记录等. 2.2 用户行为分析 2. ...

最新文章

  1. NLP.TM | GloVe模型及其Python实现
  2. 用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)--生成SSL证书请求...
  3. 51Nod 蜥蜴和地下室(搜索)
  4. iOS微博项目(七)发微博和定位
  5. P5290-[十二省联考2019]春节十二响【贪心,堆】
  6. Java 11将包含更多功能
  7. 我不是在吓你,但是区块链,可能真的是普通人弯道超车的最后一个机会了。
  8. C#中IEnumerableT.Aggregate()的简单使用
  9. Android px pt dp sp...
  10. 零基础转行自学前端,怎么学习更系统?
  11. UAC在注册表中的对应位置
  12. 转 markdown编写规则、语法
  13. HTML的div标记为何设置背景色无效?
  14. 【嵌入式】Libmodbus源码分析(四)-RTU相关函数分析
  15. 优趣短视频解析客户端小程序源代码
  16. ol+天地图+geoserver_天地图离线瓦片的打包与发布(GeoServer)
  17. 前端vue实现图片压缩并且将其转换为jpg格式图片;前端转换图片格式;前端使用js转换图片格式;前端使用canvas将png格式图片转成jpg格式
  18. golang 实现HTTP代理和反向代理
  19. Binder的Native实现libbinder
  20. java定时从数据库抓取数据库,java查询数据库java如何实现定时从数据库查询新增的数据?...

热门文章

  1. 笔记 | Java 虚拟机
  2. 如何做数据竞赛·优秀案例学习(DC03)
  3. 最老程序员创业开发实训12---Android---在MVC架构下Activity设计及实现
  4. 在JBuilder中生成EXE、可执行jar、带shell窗口的EXE
  5. Java高级深入与JVM
  6. 计算机输入密码不满足密码策略,密码不满足密码策略的要求windowsserver2008/2012...
  7. 上架被拒后如何再重新上传
  8. python ipo模式包括什么_什么是IPO?
  9. php 文本编辑器 ueditor
  10. 小数除法用计算机探索规律教学反思,小数除法教学反思