大数据推荐算法之隐语义模型(lfm)进行Top-N推荐

隐语义模型LFM(Latent Factor Model):
和LSI,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他们在本质上是相通的,都是找出潜在的主题或分类,
然后分类存在理解上的偏差:
1. 编辑很难控制分类的粒度
2. 编辑很难给一个物品分属多个分类
3. 编辑很难决定一个物品在某一个分类中的权重
之隐语义模型(lfm)
 
用户对于一个item的喜好程度 = 用户对于某些分类的喜好程度 * 这个item在这些分类中的权重
我们不需要关心分类的⾓度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那一个类。
对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。
之隐语义模型(lfm)
建立Users对于Items的关系矩阵来
进行训练获取P以及Q的参数
训练样本:用户感兴趣的为1,不感兴趣的
选取时隐性反馈数据的收集:
1 和正样本数量相当
2 选取那些热门但是用户没有操作的样本
我们就是要求解P以及Q矩阵中的参数
之隐语义模型(lfm)
 
计算不断优化参数,直到参数收敛,核心代码:
01 def latenFactorModel(classCount, iterCount, alpha, lamda):
02     '''
03     隐语义模型计算参数p,q
04     :param frame: 源数据
05     :param classCount: 隐类数量
06     :param iterCount: 迭代次数
07     :param alpha: 步长
08     :param lamda: 正则化参数
09     :return: 参数p,q
10     '''
11     P, Q = initModel(classCount)
12      
13     for step in range(0, iterCount):
14         for user, uitems in user_items.items():
15                 samples=RandSelectNegativeSamples(uitems)
16                 for item, rui in samples.items():
17                     eui = rui - Predict(P, Q, user, item)
18                     for in range(0, classCount):
19                         P[user][f] += alpha * (eui * Q[f][item] -lamda * P[user][f])
20                         Q[f][item] += alpha * (eui * P[user][f] -lamda * Q[f][item])
21              
22         alpha *= 0.9
23          
24     return P, Q
 
本例采用了movielens的一个数据作为测试例子,运行结果如下:
之隐语义模型(lfm)
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值