隐语义模型LFM(Latent Factor Model)是主题模型中的一种,跟其他主题模型一样,LFM也需要定义若干“主题”,来表示个中隐含的关系,这些“主题”是模糊而不是明确的,通过统计用户行为的方式聚类计算得出。在LFM的推荐例子中,“主题”就可以认为代表item的分类,而分类的个数,需要事先定义。

更直观地理解,假设我们定义隐因子的个数是30个,则在item候选集中,每一个item都会根据这30个分类去分配相关度(取值为0~1),比如说这个item是“午夜凶铃”,那么会被分配到“惊悚”分类0.98,“剧情”分类0.62,“喜剧”分类0.005等等(当然这个只是随便举的例子,而且分类也并不会那么不重叠),这表示的是物品与分类的关系得分,需要注意的是这里每个分类的分数是独立的,加起来不等于1。如果某个分类的值是1,则可以认为这个物品就是为这个分类而生的,就是这个分类的代名词。

有了物品与“主题”的关系得分,那么我们只需要再计算用于对于分类的偏好程度就可以用这两者计算用户对于某个item的偏好得分了。这种推荐的方式相当于是基于兴趣爱好的推荐。除此之外,基于兴趣推荐的方式可以通过找到有共同爱好的人(User-CF),或者用户喜欢的item相近的其他item(Item-CF),基于物品标签推荐(Tag-Based)等等多种方式,这里不展开,下面重点讲下公式原理。

上面就是LFM的损失函数,其中D为user与item之间行为的集合,为行为的label,举个例子,有过点击行为的为为1,只有曝光没有点击行为的为0,为通过隐因子计算出来的得分,介乎0~1之间,通常情况下,表示的是用隐因子计算出来的用户与物品之间的cosine距离,公式如下:

分子当中,每个f维的向量中,我们会初始化0~1之间的值,表示用户(物品)对于某个分类的偏好程度(相关程度),0表示毫不相关,1表示完全相关,因此分子相乘后得到的是正数;分母计算后,由于模计算后都是正数,因此cosine距离,也就是用以表示的也是一个正数。此外,我们回想cosine距离物理含义,表示的是两个向量之间的余弦夹角,夹角越小,代表两者越接近,最大夹角是当两个向量方向相反时候,也就是180°夹角,因此在0到π之间,cosine值也只会在0~1之间。回到损失函数,则其定义的是真实的label与计算出来的cosine距离用以衡量模型的拟合程度,最后加上两个向量的正则项用以惩罚复杂度。

默认我们运用梯度下降法来迭代向量值,由于用户向量与物品向量是同理,因此下面只分析的求导。我们知道梯度下降的原理是自身减去自身求偏导,不停迭代下去知道满足条件,则

其中1式为梯度下降迭代用户向量,2式为求偏导的过程,α为正则项,β为学习率

这样,在经过若干次的迭代后,达到了某个停止迭代的条件,则最终的我们能够获得每个user对于每个分类的”相关系数“(user向量),以及每个item对于每个分类的”相关系数“(item向量),我们最后通过计算user向量与item向量之间的cosine距离,则会得到用户与item之间的偏好分数,从而进行下一步的推荐动作。

按照经验,我们在构造样本训练数据的时候,一般会按正负样本1:1构造(经验所谈,保证样本平衡性),另外负样本要选取一些有充分曝光但是没有过点击行为的物品,这样可以避免选取了一些过于冷门导致根本不会有点击行为的商品。另外随着负样本/正样本比例逐渐增大,准确率和召回率都在增大,但是覆盖率却逐渐降低。说明1:1的样本比例有助于挖掘长尾兴趣。另外,在隐因子数量选择上,经验上为10到30,因具体数据而已。在十分稀疏的数据上,LFM效果会大幅下降甚至不如User-CF/Item-CF。

我们知道基础的基于物品的协同过滤(Item-CF)和基于用户的协同过滤(User CF)是一种传统的基于邻域的统计方法,有效地在海量的用户和物品群中发现近似的人群或物品群,LFM则是提出一种类似于基于兴趣爱好的召回方法,是对User-CF和Item-CF的有效补充。他们之间的比较有如下几点:

1.LFM有学习迭代的过程,有较好的理论基础;而User-CF/Item-CF是基于统计的方法,没有学习过程

2.LFM在空间复杂度上更小,假设用户物品矩阵为M*N,则空间复杂度只有O(F*(M+N));而User-CF需要O(M*M),Item-CF需要O(N*N),在M和N很大的时候,能有效节省空间。

3.LFM不适合在线预测,因为其需要通过迭代得到的user向量和item向量计算用户与物品之间的偏好得分,在线的动作加入后,如果重新迭代计算用户向量和物品向量,则会消耗大量时间,不适合在线预测;而User-CF和Item-CF则因为把预先计算的相关矩阵存在内存中,当用户有新的行为(例如点击了某个物品),则可以实时获取该物品所对应的相似物品来在线更新推荐列表。

4.LFM因为其中的隐因子(分类)通常来讲会含糊不清,因此不能有很好的解释性;而User-CF和Item-CF由于是基于统计的方法,因此有相对较好的解释性。

参考文献:

推荐系统实践,项亮 2012
慕课网 - BAT大牛亲授 个性化推荐算法实战
https://www.cnblogs.com/earendil/p/8194875.html

隐语义模型LFM(Latent Factor Model)相关推荐

  1. python实现lfm_【知识发现】隐语义模型(LFM,Latent Factor Model)推荐算法python实现

    1.隐语义模型: 物品:表示为长度为k的向量q(每个分量都表示  物品具有某个特征的程度) 用户兴趣:表示为长度为k的向量p(每个分量都表示  用户对某个特征的喜好程度) 用户u对物品i的兴趣可以表示 ...

  2. 隐语义模型( LFM )

    基于模型的协同过滤思想         ●基本思想                 -用户具有一定的特征,决定着他的偏好选择;                 -物品具有一定的特征,影响着用户需是否选 ...

  3. 推荐系统(5)—隐语义模型(LFM)

    https://www.toutiao.com/a6663676280782717454/ 2019-03-02 14:27:17 基本概念 LFM(latent factor model)隐语义模型 ...

  4. python实现lfm_推荐系统之隐语义模型(LFM)

    一 基本概念 LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF有什么不同呢?这里可以做一个对比: 对于Use ...

  5. 推荐系统学习笔记之三 LFM (Latent Factor Model) 隐因子模型 + SVD (singular value decomposition) 奇异值分解

    Low Rank Matrix Factorization低阶矩阵分解 在上一篇笔记之二里面说到我们有五部电影,以及四位用户,每个用户对电影的评分如下,?表示未评分. Movies\User User ...

  6. 推荐算法之隐语义模型(LFM)矩阵分解梯度下降算法实现

    推荐算法之隐语义模型(LFM)矩阵分解梯度下降算法实现 基于协同过滤的推荐一般分为基于近邻的推荐和基于模型的推荐,其中,基于近邻是指预测时直接使用用户已有的偏好数据,通过近邻数据来预测新物品的偏好.而 ...

  7. 【知识发现】隐语义模型LFM算法python实现(三)

    http://blog.csdn.net/fjssharpsword/article/details/78257126 基于上篇再优化. 1.回顾LFM原理,可以更好地理解代码 对于一个给定的用户行为 ...

  8. 【知识发现】隐语义模型LFM算法python实现(一)

    1.隐语义模型: 物品:表示为长度为k的向量q(每个分量都表示  物品具有某个特征的程度) 用户兴趣:表示为长度为k的向量p(每个分量都表示  用户对某个特征的喜好程度) 用户u对物品i的兴趣可以表示 ...

  9. 【知识发现】隐语义模型LFM算法python实现(二)

    http://blog.csdn.net/fjssharpsword/article/details/78015956 基于该篇文章中的代码优化,主要是在生成负样例上提高执行速度,代码参考如下: # ...

最新文章

  1. Entity Framework快速入门笔记第四篇—ModelFirst
  2. JBoss EAP应用获取运行模式、相关路径及节点信息
  3. displaynone符合html5标准,javascript – JS HTML5验证“display:none”必需的输入元素
  4. 部署testlink报错,安装wampserver时提示丢失MSVCR110.dll
  5. boost::hana::ext::std::vector_tag用法的测试程序
  6. visual studio 2010 开发net 2.0 3.5项目
  7. OnLongClickListener长按事件设置墙纸
  8. php mysql导入excel_如何从PHP导入Excel文件到mysql数据库
  9. 第二次作业刘惠惠2.6,2.15
  10. Zephyr学习(一)Zephyr介绍
  11. js控件封装之tree
  12. prolog与python_讲解:SENG201、Software、Python,Java/c++Web|Prolog
  13. 微信小程序的版本更新机制是什么?
  14. C++ 模板函数的使用
  15. IE浏览器浏览网页提示证书错误,Chrome、360浏览器显示“不安全”的原因
  16. 对12306车票数据的提取
  17. Android 解决 adapter.notifyDataSetChanged() 不起作用
  18. 沁恒触摸蓝牙模块方案测试体验(CH582)
  19. 微信分享 微信对图片文字大小的限制 代码如下
  20. 基于 Flink + Kafka 的实时数仓建设实践(附源码)

热门文章

  1. DingTalk获取webhook
  2. P6软件如何进度纠偏
  3. 垃圾分类 小程序完整项目!
  4. 联想微型计算机安装系统,联想笔记本做系统,手把手教你联想笔记本安装win10系统...
  5. 新版标准日本语中级_第十课
  6. 脑电功率谱分析matlab,基于matlab的功率谱分析方法研究 毕业论文.doc
  7. 复数类 complex
  8. Google电面狂出难题,春招比秋招难多了……
  9. 互联网医院网络安全等保建设方案(附PPT全文)
  10. docker 安装easyMock