博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
推荐系统第二章-利用用户行为数据
阅读量:4164 次
发布时间:2019-05-26

本文共 1904 字,大约阅读时间需要 6 分钟。

个性化推荐算法通过对用户行为的深度分析,可以给用户带来更好的网站使用体验。

算法设计人员的角度来看,用户行为数据中蕴含着很多不是那么显而易见的规律,而个性化推荐算法的任务就是通过计算机去发现这些规律,从而为产品的设计提供指导,提高用户体验。
协同过滤算法是基于用户行为分析的算法。
解释:用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品。

1用户行为数据简介

用户的行为数据包括显性反馈行为和隐性反馈行为。

显性反馈行为表示用户与网站进行有意识的反馈交互,隐性反馈行为表示用户与网站进行无意识的反馈交互。
用户行为常可用六部分概括:产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。

2用户行为分析

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

满足PowerLaw的分布,即长尾分布,由Zipf研单词词频时候发现。

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

用户越活跃,越倾向于冷门的物品。

仅仅基于用户的行为数据设计的推荐算法称为协同过滤算法。应用最广泛的是基于邻域的方法。而基于邻域的方法主要包含基于用户的协同过滤算法基于物品的协同过滤算法。其他的方法包括隐语义模型和基于图的随机游走算法。

2.3实验设计与算法测评

离线实验

数据集:
实验设计:将数据集按照均匀分布随机分成M份,采用留一法进行测试评估。避免过拟合。
评价指标:TopN推荐、覆盖率(发掘长尾的能力)和新颖度(平均流行度度量)。

3基于邻域的算法

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

算法概述(实际应用不多)

1找到和目标用户兴趣相似的用户集合
2找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
用户相似度计算公式:Jaccard公式、余弦相似度计算公式。
复杂度:O(|U|*|U|)
用户对物品感兴趣程度:P(u,i)即用户U相关的用户 之间的相似度和对物品i感兴趣的程度的加权和。
结果:推荐结果的各个指标与推荐个数K息息相关。
改进:计算用户兴趣相似度时考虑物品的流行度对提升推荐结果的质量有帮助。

3.2基于物品相似度的协同过滤算法

算法概述(应用广泛)

1计算物品之间的相似度
2根据物品的相似度和用户的历史行为给用户生成推荐列表。
物品相似度计算:首先建立用户-物品倒排表,之后将物品列表中的物品两两在共现矩阵C中加1,之后合并贡献矩阵C,最后将C矩阵归一化可以得到物品之间的余弦相似度矩阵W。
用户对物品的兴趣:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
结果:推荐结果的各个指标与推荐个数K息息相关。
改进:计算物品相似度时考虑用户的活跃度对提升推荐结果的质量有帮助。倒数+对数+余弦相似度。
改进:归一化物品相似度矩阵W。热门物品类间相似度高,统一相似度量纲后,可提升推荐的多样性。

3.3UserCF和ItemCF比较

UserCF的推荐更加社会化(热门程度+时效性),反应了用户所在小型兴趣群体中物品的热门成都,

ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。(覆盖率与新颖度不高)。
当具体工程应用时,需要考虑:是否需要提供解释,实现的代价,离线指标和在线指标不一定成正比。

4隐语义模型

面临问题

1:如何给物品进行分类
2:如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度。
3:对于给定的一个类,选择哪些属于该类的物品推荐给用户,以及如何确定这些物品在一个类中的权重。
解决方法
隐语义模型、LDA、pLSA、隐含类别模型、隐含主题模型和矩阵分解等。
隐语义模型需要对样本进行采样,生成负样本,应该注意:
对每个用户,要保证正负样本的平衡
对每个用户采负样本时,要选取那些很热门,而用户却没有行为的物品。
类似于聚类并找住类别中比较重要的点。
实验设计
数据集:MovieLens数据集。
预测模型:LFM
预测指标:TopN推荐,覆盖率,流行度

对比内容 LFM 基于邻域
理论基础 建模 统计
离线计算的空间复杂度 内存消耗大 很好节省离线计算内存
离线计算的时间复杂度 -没有质的区别- -没有质的区别-
在线实时推荐 可在线进行实时预测 不能进行在线实时预测
推荐解释 很好的推荐解释 无法提供解释

5基于图的模型

基于随机游走的方式,每个物品结点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

在时间复杂度上有明显的缺点。
解决方法:减少迭代次数与转化为矩阵形式。

参考文献

项亮. 推荐系统实践[M]. 人民邮电出版社, 2012.

转载地址:http://qmlxi.baihongyu.com/

你可能感兴趣的文章
C++:插入排序算法实现代码
查看>>
C++:快速排序法的代码实现
查看>>
4、ROS下播放激光点云bag数据并可视化
查看>>
5、激光雷达bag文件和转PCD文件
查看>>
2、关于点云格式的碎碎念
查看>>
ROS初始化时候sudo rosdep init rosdep update出现的各种问题亲测成功的解决办法(2020.12.29已解决!)
查看>>
6、ubuntu16.04 下 pcl的vogelgrid降采样处理 过程
查看>>
8、在ubuntu16.04 、ROS下使用 rviz 显示octomap_sever 构建的三维栅格地图
查看>>
如何在ubuntu16.04下运行第一个C++和python程序,以helloworld为例
查看>>
古月居 PyTorch入门:一起从零搭建神经网络一、PyTorch环境搭建
查看>>
古月居 PyTorch入门:一起从零搭建神经网络二、PyTorch基础知识
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 三、快速搭建一个简单的神经网络
查看>>
用函数实现判断一个数是不是素数
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 六、PyTorch车牌字符识别项目三
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 七、PyTorch车牌字符识别项目四
查看>>
搜索旋转排序数组 II
查看>>
最大子序和
查看>>
爬楼梯
查看>>
汉明距离
查看>>
二叉树的最大深度
查看>>