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

http://blog.csdn.net/fjssharpsword/article/details/78257126

基于上篇再优化。

1、回顾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后, 不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算:

l 不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细

l 对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类

l 对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。

l 对于每一个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。损失函数如下所示:

上式中的

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

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值