006. (4.3-4.4) 第二章 利用用户行为数据

学习参考书籍:《推荐系统实践》–项亮


基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为 协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

2.1 用户行为数据简介

*用户行为数据在网站上最简单的存在形式就是日志。
*会话日志通常存储在分布式数据仓库中。
*用户行为在个性化推荐系统中一般分两种——显性反馈行为和隐性反馈
行为。
*不同的网站需要根据自己的特点设计评分系统。
*不同的数据集包含不同的行为,本章使用的数据集基本是无上下文信息的隐性反馈数据集(每一条行为记录仅仅包含用户ID和Item ID)。

2.2 用户行为分析

2.2.1 用户活跃度和物品流行度的分布

一般都满足长尾分布。

2.2.2 用户活跃度和物品流行度的关系

*规律显示,一般用户越活跃,越倾向于浏览冷门的物品。

*协同过滤算法有许多方法,如:基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。
*基于邻域的方法主要包含基于用户(给用户推荐与他兴趣相似的其他用户喜欢的物品),和基于物品(给用户推荐与他之前喜欢的物品相似的物品)。

2.3 实验设计和算法评测

数据集---->训练集、测试集---->定指标,选择几种方法

相关代码涉及知识笔记:

*random.seed()方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。 当seed()没有参数时,每次生成的随机数是不一样的,而当seed()有参数时,每次生成的随机数是一样的,同时选择不同的参数生成的随机数也不一样

>>> random.seed(1)
>>> for i in range(5):
	print(random.randint(0,5))

	
1
4
0
2
0
>>> random.seed(1)
>>> for i in range(5):
	print(random.randint(0,5))

	
1
4
0
2
0
>>> 

*sorted(list, key, reverse=False) ##可以接收一个key函数来实现自定义的排序,reverse默认为False。
*dict.keys():返回一个字典所有的键。
*dict.items():返回可遍历的键, 值。
*math.log()、math.sqrt()
*set.add()
*object of type ‘int’ has no len()

2.4 基于邻域的算法

2.4.1 基于用户的协同过滤算法

(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

2.4.2 基于物品的协同过滤算法

(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。

对于基于用户的协同过滤算法,随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难。
在这里插入图片描述
*每个用户的兴趣列表都对物品的相似度产生贡献可能不同,而用户活跃度对此有一定影响。
*相似度的归一化可以提高推荐的多样性。一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类的物品,因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。

2.4.3 UserCF和ItemCF的综合比较

*从前面提到的算法原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点(社会化),而ItemCF的推荐结果着重于维系用户的历史兴趣(个性化)。
*UserCF需要维护一个用户相似度的矩阵,而ItemCF需要维护一个物品
相似度矩阵。

*关于选择,视不同环境而定。

如: 个性化新闻推荐 更加强调抓住新闻热点,热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要。UserCF在这一方面能做得更让人满意。此外,作为一种物品,新闻的更新非常快,每时每刻都有新内容出现,而ItemCF需要维护一张物品相关度的表,如果物品更新很快,那么这张表也需要很快更新,这在技术上很难实现。

又如: 在图书、电子商务和电影网站ItemCF则能极大地发挥优势。首先,用户的兴趣 和 同类物品之间的相似度相对固定持久。此外,这些系统中的用户可能不太需要行度来辅助他们判断一个物品的好坏,而是可以通过自己熟悉的知识判断物品质量。同时,用户有新行为,容易导致推荐结果的实时变化。

*要指出的是,离线实验的性能在选择推荐算法时并不起决定作用。首先应该满足产品的需求,比如如果需要提供推荐解释,那么可能得选择ItemCF算法。其次,需要看实现代价,若用户太多,很难计算用户相似度矩阵,这个时候可能不得不抛弃UserCF算法。最后,离线指标和点击率等在线指标不一定成正比。

*算法都可以进行各种各样的改进。一般来说,这两种算法经过优化后,最终得到的离线性能趋近。

*两个不同领域的最热门物品之间往往具有比较高的相似度。此时,我们只能依靠引入物品的内容数据解决这个问题,比如对不同领域的物品降低权重等。这些就不是协同过滤讨论的范畴了。

2.5 隐语义模型

核心思想:通过隐含特征联系用户兴趣和物品
LFM(latent factor model):隐语义模型
隐性反馈数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本。

2.5.1 基础算法

为了解决合理分类问题,可从数据出发,自动地找到那些类,然后进行个性化推荐。于是,隐含语义分析技术(latent variable analysis)出现了。它采取基于用户行为统计的自动聚类,能解决对应问题:

 编辑的意见不能代表各种用户的意见,但隐含语义分析技术的分类来自对用户行为的统计,代表了用户对物品分类的看法。

 编辑很难控制分类的粒度,但隐含语义分析技术允许我们指定最终有多少个分类,这个数字越大,分类的粒度就会越细,反正分类粒度就越粗。

 编辑很难给一个物品多个分类,但隐含语义分析技术会计算出物品属于每个类的权重,因此每个物品都不是硬性地被分到某一个类中。

 编辑很难给出多维度的分类,但隐含语义分析技术给出的每个分类都不是同一个维度的,它是基于用户的共同兴趣计算出来的,如果用户的共同兴趣是某一个维度,那么LFM给出的类也是相同的维度。

 编辑很难决定一个物品在某一个分类中的权重,但隐含语义分析技术可以通过统计用户行为决定物品在每个类中的权重,如果喜欢某个类的用户都会喜欢某个物品,那么这个物品在这个类中的权重就可能比较高。
在这里插入图片描述
*在隐性反馈数据集上应用LFM应关注如何给每个用户生成负样本

 对每个用户,要保证正负样本的平衡(数目相似)。
 对每个用户采样负样本时,主要选取那些很热门,而用户却没有行为的物品。

2.5.3 LFM和基于邻域的方法的比较

*LFM具有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标
建立最优的模型。基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。

*LFM节省了训练过程中的内存。

*LFM模型在实际使用中有一个困难,那就是它很难实现实时的推荐。 经典的LFM模型 每次训练时都需要扫描所有的用户行为记录,这样才能计算出用户隐类向量和物品隐类向量。而且LFM的训练需要在用户行为记录上反复迭代才能获得比较好的性能。

*LFM无法提供像ItemCF一样的解释,它计算出的隐类虽然在语义上确实代表了一兴趣和物品,却很难用自然语言描述并生成解释展现给用户。

2.6 基于图的模型

用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中。

可以把基于邻域的模型看做基于图的模型的简单形式。
以二元组为例:
在这里插入图片描述
将用户行为表示为二分图模型后,就在二分图上给用户进行个性化推荐。如果将个性化推荐算法放到二分图模型上,那么给用户u推荐物品的任务就可以转化为度量用户顶点Vu 和 与Vu 没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。可以关注以下因素:

 两个顶点之间有很多路径相连;
 连接两个顶点之间的路径长度都比较短;
 连接两个顶点之间的路径不会经过出度比较大的顶点。

相关性高的一对顶点一般具有以上特征。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值