隐性数据集上应用LFM解决Top-N推荐问题

本文介绍了如何运用LFM(矩阵分解)解决推荐系统的Top-N问题,结合隐性反馈数据,详细阐述了LFM的矩阵分解原理,并探讨了推荐系统中的用户协同过滤、物品协同过滤等策略。通过实例分析了LFM在图书推荐中的应用,讨论了损失函数最小化和负样本选择策略,最后提出了模型优化的参数设置。
摘要由CSDN通过智能技术生成

1 最近在看线性代数的相关知识,昨晚看到矩阵QR分解,然后后面又介绍了一个LFM的分解,说是矩阵能分解出k隐含维数据,看了一眼后面用梯度下降推的公式,感觉好复杂,就没有再往下面看。

2.坐在几个搞推荐的大神旁边,整天听到“转化率”,“反馈”什么的,因为本身不是搞这个方向的,所以听起来挺神奇。

3.刚好在CSDN上看到一篇讲LFM隐语义应用在推荐系统上的文章,想到能复习一下线代上将的内容又能了解一下推荐系统,就做了下面的研究。推到了公式,但是算法还没有具体实现,后面会附上参考伪代码

浅谈推荐系统

之前很早就听说过关于推荐的那个“啤酒尿布”的故事,这次学习推荐系统了解到:

专业术语解释:
  • UserCF:User Collaborative Filter(用户协同过滤)
  • itemCF:Item Collaborative Filter(项/元素协同过滤)
  • 显性反馈:用户行为的一种反馈,包含正样本和负样本
  • 隐性反馈:只包含正样本,不包含负样本
关于推荐的几个思路:
  1. UserCF:给用户B推荐的商品是和用户B相似的用户A相关的商品
  2. ItemCF:给用户推荐的商品是根据用户之前拥有的商品决定的
  3. 兴趣分类:
    3.1. 传统分类不适合复杂场景
    3.2. LFM(隐含语义分析)接下来要讲的内容

隐性语义

因为之前做的项目,有幸了解到NLP领域隐含主题模型LDA,模型认为一片文章讲道理是由多个主题构成的,而多个主题下面又包含关于这个主题的词语,即:doc-topic-word。利用该模型能够挖掘到文章之间隐含的主题关系,根据隐含主题的关联关系可以确定出文章之间的关系。和LDA相关的叫做隐含语义分析技术。隐含语义分析技术采用基于用户行为统计的自动聚类,挖掘出a-latent-b的关系。

  • 依据用户行为自动的进行分类,而非认为的确定类别个数
  • 可以确定要分类的类别数量,数量多,粒度细
  • 可以计算出物品属于某个类别的权重,哪个物品能够更好的代表这个类别,实现软分类

应用实例

在豆瓣图书推荐栏目,根据用户浏览的,购买的,收藏的关于图书的行为记录数据,要推荐给用户合适的图书。怎么实现图书推荐呢?这里主要根据LFM原理进行解释。假设有关于用户喜爱书籍的表格如下所示:

|
|——-|——–|——–|——-|
|user1: |侦探小说|科普 |计算机 |
| user2:| 数学 |机器学习| |
| … | … | … | … |

LFM矩阵分解

根据线性代数中的知识可知:将一个 mn 的矩阵 Amn 可以分解为具有 k 个隐变量的 UmkVkm的矩阵。这里的维数 k 就是隐含变量的个数,也就是latent factor

Amn=UmkVkm

现假定有3个用户user1user2user3。他们各自分别对标记为item1item2item3item4的图书(商品)的喜爱程度可形成一个 34 user-item兴趣矩阵 R34

这里写图片描述

根据前面讲的LFM关于矩阵分解的知识,我们可以将这个 34 user-item矩阵 R34 分解为含有3个隐含变量的 P33Q34 的矩阵,其中 P33 表示用户对隐含类别的兴趣矩阵user-latent,而 Q34 表示图书(商品)在隐含类别中所占权重的矩阵。即:

R34=P33Q34

这里写图片描述

故,对用户商品user-item矩阵 R 中的每一个ru,i(用户u对商品i的喜爱程度),可以通过矩阵分解式

ru,i=puqi=k=1Kpu,kqki
进行表示。

让我们梳理一下逻辑
  1. 现要依据 P,Q 参数矩阵来估计 R 矩阵中的某个估计量r¯u,i,总体思路采用损失函数最小化来求取参数矩阵 P,Q
  2. 这里对 R 矩阵中样本的选取要注意:由于采用的是隐性反馈,只有正样本,没有负样本,所以要依据一定的原则选取合适数量的负样本。在样本选定后进行参数估计。

样本选取原则:1.样本中包含正,负标记的样本数量相当;2.在推荐系统中负样本侧重选择热门商品中用户没有点击的那些

故,对k个样本集中的样本 (u,i) 以及对应的标记 ru,i ,有下面的损失函数表示:

c=(u,i)k(ru,ir¯u,i)2=(u,i)k(ru,ik=1Kpu,kqki)2+λpu2+λqi2

其中:
1 第一个等号右边的表达式总体上表示了标记实际值 ru,i 与估计值 r¯u,i 之间差值平方,我们的目标就是将这个损失函数最小化,求得在最小化值下的 P,Q 参数矩阵。

2 后面带 λ 的两项为正则化项,是用来防止过拟合的。这里解释一下两个竖线表示2范数

3 这里损失函数最小化可以使用梯度下降法求得对应 pu,k qi,k 的偏导数,利用一个 α 学习速率每次迭代 pu,k qi,k 的值,直至达到阈值。

我们对上面的损失函数 c 分别对pu,k qi,k 求偏导数,得:

这里写图片描述

通过确定学习速率 λ ,来对 pu,k qi,k 进行优化:

这里写图片描述

总结

由此可以看出模型需要确定的几个参数:
1. 隐变量的个数 F
2. 梯度下降法迭代的次数:N
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  
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值