隐性数据集上应用LFM解决Top-N推荐问题
来源:互联网 发布:qt windows 编辑:程序博客网 时间:2024/05/16 05:08
1 最近在看线性代数的相关知识,昨晚看到矩阵QR分解,然后后面又介绍了一个LFM的分解,说是矩阵能分解出k隐含维数据,看了一眼后面用梯度下降推的公式,感觉好复杂,就没有再往下面看。
2.坐在几个搞推荐的大神旁边,整天听到“转化率”,“反馈”什么的,因为本身不是搞这个方向的,所以听起来挺神奇。
3.刚好在CSDN上看到一篇讲LFM隐语义应用在推荐系统上的文章,想到能复习一下线代上将的内容又能了解一下推荐系统,就做了下面的研究。推到了公式,但是算法还没有具体实现,后面会附上参考伪代码
浅谈推荐系统
之前很早就听说过关于推荐的那个“啤酒尿布”的故事,这次学习推荐系统了解到:
专业术语解释:
- UserCF:User Collaborative Filter(用户协同过滤)
- itemCF:Item Collaborative Filter(项/元素协同过滤)
- 显性反馈:用户行为的一种反馈,包含正样本和负样本
- 隐性反馈:只包含正样本,不包含负样本
关于推荐的几个思路:
- UserCF:给用户B推荐的商品是和用户B相似的用户A相关的商品
- ItemCF:给用户推荐的商品是根据用户之前拥有的商品决定的
- 兴趣分类:
3.1. 传统分类不适合复杂场景
3.2. LFM(隐含语义分析)接下来要讲的内容
隐性语义
因为之前做的项目,有幸了解到NLP
领域隐含主题模型LDA
,模型认为一片文章讲道理是由多个主题构成的,而多个主题下面又包含关于这个主题的词语,即:doc-topic-word。利用该模型能够挖掘到文章之间隐含的主题关系,根据隐含主题的关联关系可以确定出文章之间的关系。和LDA
相关的叫做隐含语义分析技术。隐含语义分析技术采用基于用户行为统计的自动聚类,挖掘出a-latent-b的关系。
- 依据用户行为自动的进行分类,而非认为的确定类别个数
- 可以确定要分类的类别数量,数量多,粒度细
- 可以计算出物品属于某个类别的权重,哪个物品能够更好的代表这个类别,实现软分类
应用实例
在豆瓣图书推荐栏目,根据用户浏览的,购买的,收藏的关于图书的行为记录数据,要推荐给用户合适的图书。怎么实现图书推荐呢?这里主要根据LFM原理进行解释。假设有关于用户喜爱书籍的表格如下所示:
|
|——-|——–|——–|——-|
|user1: |侦探小说|科普 |计算机 |
| user2:| 数学 |机器学习| |
| … | … | … | … |
LFM矩阵分解
根据线性代数中的知识可知:将一个 latent factor
。
现假定有3个用户user1,user2,user3。他们各自分别对标记为item1,item2,item3,item4的图书(商品)的喜爱程度可形成一个
根据前面讲的LFM关于矩阵分解的知识,我们可以将这个
故,对用户商品user-item矩阵
让我们梳理一下逻辑
- 现要依据
P,Q 参数矩阵来估计R 矩阵中的某个估计量r¯u,i ,总体思路采用损失函数最小化来求取参数矩阵P,Q 。 - 这里对
R 矩阵中样本的选取要注意:由于采用的是隐性反馈,只有正样本,没有负样本,所以要依据一定的原则选取合适数量的负样本。在样本选定后进行参数估计。
样本选取原则:1.样本中包含正,负标记的样本数量相当;2.在推荐系统中负样本侧重选择热门商品中用户没有点击的那些
故,对
其中:
1 第一个等号右边的表达式总体上表示了标记实际值
2 后面带
3 这里损失函数最小化可以使用梯度下降法求得对应
我们对上面的损失函数
通过确定学习速率
总结
由此可以看出模型需要确定的几个参数:
1. 隐变量的个数
2. 梯度下降法迭代的次数:
3. 梯度下降学习速率:
4. 正则化项对应的参数:
最后贴上python版本的伪代码:
def LFM(user_items, F, N, alpha, lambda): [P, Q] = InitModel(user_items, F) For step in range(0, N): for user, items in user_item.iterms(): samples = RandSelectNegativeSamples(items) for item, rui in samples.items(): eui = eui - Predict(user, item) for f in range(0, F): P[user][f] += alpha * (eui * Q[f][item] - lambda * P[user][f]) Q[f][item] += alpha * (eui * P[user][f] - lambda * Q[f][item]) alpha *= 0.9
- 隐性数据集上应用LFM解决Top-N推荐问题
- 大数据推荐算法之隐语义模型(lfm)进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- 【推荐系统系列】使用LFM(Latent factor model)隐语义模型进行Top-N推荐 (转载)
- 推荐系统之LFM
- Top-N推荐算法-简介
- SELECT TOP N 问题
- oracle top n 问题
- Runnable接口 和 同步代码块synchronized
- 从输入URL到页面显示的过程
- jQuery美化滑块
- solr schema.xml 加入中文分析器 IKAnalyzer 就找不到solrcore
- Java 动态代理机制分析及扩展
- 隐性数据集上应用LFM解决Top-N推荐问题
- ios 微信支付集成完结--总结
- 只因,在人群中多看了你一眼 (小说)
- 线程的启动方式
- Oracle 忘记 sys和system用户的密码 解决方法
- cookie持久化的库
- 中华牌香烟
- Android 监听电话去电接通瞬间[非来电]
- js数据类型 ——引用类型(Array).2/3