文章目录

  • 目录
    • 1.什么是用户行为数据?
      • 1.1用户行为分类
    • 2.用户行为数据如何使用?
      • 2.1 用户活跃度和物品流行度的分布
    • 2.2 用户活跃度和物品流行度的关系
      • 2.3 协同过滤算法
    • 3.实验设计和算法评测
    • 4.基于邻域的的推荐算法
      • 4.1 基于用户的协同过滤算法
      • 4.2 基于物品的协同过滤算法
      • 4.3 userCF和itemCF的比较
    • 5.基于隐语义模型的推荐算法
    • 6.基于图模型的推荐算法

目录

1.什么是用户行为数据?

用户行为数据在网站上最简单的存在形式为日志。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志,其中会话表示一次用户行为和对应的服务。如电子商务网站记录的用户行为包括网页浏览、购买、点击、评分和评论等。

1.1用户行为分类

1.按照反馈的明确性分

  • 显示反馈行为
    对某些物品的喜欢、不喜欢;对某条事物的评论
  • 隐性反馈行为
    指的是那些不能明确反应用户喜好的行为。代表性的为页面浏览行为。用户浏览一个页面并不代表用户喜欢这个页面展示的物品,可能是因为页面链接显示在首页,用户更容易点击它,隐性反馈虽然不明确,但数据量更大。在很多网站中,可能只有隐性反馈而没有显性反馈。

下面是一个各代表网站中的一些对比:

2.按照反馈的方向分:

  • 正反馈
    用户的行为倾向于喜欢
  • 负反馈
    用户的行为倾向于不喜欢

2.用户行为数据如何使用?

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

长尾分布:
1 物品流行度的长尾分布
2 用户活跃度的长尾分布

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

  • 一般的,不活跃的用户要么是新用户,要么是只来过网站一两次的老用户。
  • 一般的,新用户倾向于浏览热门的物品,因为他们对网站不熟悉,只能点击热门物品 ,而老用户会逐渐开始浏览冷门的物品

2.3 协同过滤算法

  • 协同过滤算法:仅仅基于用户行为数据设计的推荐算法
  • 经协同过滤算法的深入研究,又提出了很多方法,比如基于邻域的方法(neghborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)

广泛应用并最著名的是基于邻域的方法,主要包含下面两种算法:

  • 1 基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品
  • 2 基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品

3.实验设计和算法评测

def  SplitData(data,M,k,seed):test = []train = []random.seed(seed)for user, item in data:if random.randint(0,M) == k:test.append([user,item])else:train.append([user,item])return train,test


召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中,而精确率描述最终 的推荐列表中有多少比例是发生过的用户—物品评分记录。下面两段代码给出了召回率和准确率 的计算方法

def   Recall(train ,test ,N):hit = 0all = 0for user in train.keys():tu =test[user]rank = GetRecommendation(user,N)for item,pui in rank:if item in tu:hit +=1all +=len(tu)return hit/(all * 1.0)def Precision(train, test, N): hit = 0  all = 0 for user in train.keys():  tu = test[user]  rank = GetRecommendation(user, N)   for item, pui in rank:  if item in tu:    hit += 1  all += N return hit / (all * 1.0)

def Coverage(train, test, N):  recommend_items = set()all_items = set()  for user in train.keys():for item in train[user].keys():  all_items.add(item)   rank = GetRecommendation(user, N)   for item, pui in rank:  recommend_items.add(item)  return len(recommend_items) / (len(all_items) * 1.0)

4.基于邻域的的推荐算法

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





性能分析指标:

  • 准确率和召回率 可以看到,推荐系统的精度指标(准确率和召回率)并不和参数K成线 性关系。在MovieLens数据集中,选择K=80左右会获得比较高的准确率和召回率。因此选 择合适的K对于获得高的推荐系统精度比较重要。当然,推荐结果的精度对K也不是特别 敏感,只要选在一定的区域内,就可以获得不错的精度。

  • 流行度 可以看到,在3个数据集上K越大则UserCF推荐结果就越热门。这是因为K决定 了UserCF在给你做推荐时参考多少和你兴趣相似的其他用户的兴趣,那么如果K越大,参 考的人越多,结果就越来越趋近于全局热门的物品。

  • 覆盖率 可以看到,在3个数据集上,K越大则UserCF推荐结果的覆盖率越低。覆盖率的 降低是因为流行度的增加,随着流行度增加,UserCF越来越倾向于推荐热门的物品,从 而对长尾物品的推荐越来越少,因此造成了覆盖率的降低。

为了避免全部推送的都是热门的产品,我们需要对热门的产品进行惩罚


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






4.3 userCF和itemCF的比较

UserCF的推荐更社会化,反映了用户所在的 小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承

在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。即使是个性 化,也是比较粗粒度的,比如有些用户喜欢体育新闻,有些喜欢社会新闻,而特别细粒度的个性 化一般是不存在的。比方说,很少有用户只看某个话题的新闻,主要是因为这个话题不可能保证 每天都有新的消息,而这个用户却是每天都要看新闻的。因此,个性化新闻推荐更加强调抓住 新闻热点,热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要。因 此,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热 点和时效性的同时,保证了一定程度的个性化。这是Digg在新闻推荐中使用UserCF的最重要 原因。
UserCF适合用于新闻推荐的另一个原因是从技术角度考量的。因为作为一种物品,新闻的更 新非常快,每时每刻都有新内容出现,而ItemCF需要维护一张物品相关度的表,如果物品更新很 快,那么这张表也需要很快更新,这在技术上很难实现。绝大多数物品相关度表都只能做到一天 一次更新,这在新闻领域是不可以接受的。而UserCF只需要用户相似性表,虽然UserCF对于新 用户也需要更新相似度表,但在新闻网站中,物品的更新速度远远快于新用户的加入速度,而且 对于新用户,完全可以给他推荐最热门的新闻,因此UserCF显然是利大于弊。
但是,在图书、电子商务和电影网站,比如亚马逊、豆瓣、Netflix中,ItemCF则能极大地发 挥优势。首先,在这些网站中,用户的兴趣是比较固定和持久的。一个技术人员可能都是在购买 技术方面的书,而且他们对书的热门程度并不是那么敏感,事实上越是资深的技术人员,他们看 的书就越可能不热门。此外,这些系统中的用户大都不太需要流行度来辅助他们判断一个物品的 好坏,而是可以通过自己熟悉领域的知识自己判断物品的质量。因此,这些网站中个性化推荐的 任务是帮助用户发现和他研究领域相关的物品。因此,ItemCF算法成为了这些网站的首选算法。 此外,这些网站的物品更新速度不会特别快,一天一次更新物品相似度矩阵对它们来说不会造成 太大的损失,是可以接受的。
同时,从技术上考虑,UserCF需要维护一个用户相似度的矩阵,而ItemCF需要维护一个物品 相似度矩阵。从存储的角度说,如果用户很多,那么维护用户兴趣相似度矩阵需要很大的空间, 同理,如果物品很多,那么维护物品相似度矩阵代价较大。 在早期的研究中,大部分研究人员都是让少量的用户对大量的物品进行评价,然后研究用 户兴趣的模式。那么,对于他们来说,因为用户很少,计算用户兴趣相似度是最快也是最简单 的方法。但在实际的互联网中,用户数目往往非常庞大,而在图书、电子商务网站中,物品的 数目则是比较少的。此外,物品的相似度相对于用户的兴趣一般比较稳定,因此使用ItemCF是 比较好的选择。当然,新闻网站是个例外,在那儿,物品的相似度变化很快,物品数目庞大, 相反用户兴趣则相对固定(都是喜欢看热门的),所以新闻网站的个性化推荐使用UserCF算法的 更多。

新闻网站的个性化推荐使用UserCF算法的 更多

5.基于隐语义模型的推荐算法

LFM(latent factor model)隐语义模型的核心思想是通过隐含特征(latent factor)联系用户兴趣和物品,采取基于用户行为统计的自动聚类。

    隐含语义分析技术的分类来自对用户行为的统计,代表了用户对物品分类的看法。隐含语义分析技术和ItemCF在物品分类方面的思想类似,如果两个物品被很多用户同时喜欢,那么这两个物品就很有可能属于同一个类。隐含语义分析技术允许我们指定最终有多少个分类,这个数字越大,分类的粒度就会越细,反正分类粒度就越粗。隐含语义分析技术会计算出物品属于每个类的权重,因此每个物品都不是硬性地被分到某一个类中。隐含语义分析技术给出的每个分类都不是同一个维度的,它是基于用户的共同兴趣计算出来的,如果用户的共同兴趣是某一个维度,那么LFM给出的类也是相同的维度。隐含语义分析技术可以通过统计用户行为决定物品在每个类中的权重,如果喜欢某个类的用户都会喜欢某个物品,那么这个

物品在这个类中的权重就可能比较高。

    LFM通过如下公式计算用户u对物品i的兴趣:


这个公式中p(u,k)和q(i,k)是模型的参数,其中p(u,k)度量了用户u的兴趣和第k个隐类的关系,而q(i,k)度量了第k个隐类和物品i之间的关系。这两个参数是从数据集中计算出来的。要计算这两个参数,需要一个训练集,对于每个用户u,训练集里都包含了用户u喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模型参数。推荐系统的用户行为分为显性反馈和隐性反馈。LFM在显性反馈数据(也就是评分数据)上解决评分预测问题并达到了很好的精度。不过这里主要讨论的是隐性反馈数据集,这种数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。对负样本采样时应该遵循以下原则:
对每个用户,要保证正负样本的平衡(数目相似)。

   对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

下面的Python代码实现了负样本采样过程:


def RandomSelectNegativeSample(self, items):ret = dict()for i in items.keys():ret[i] = 1n = 0for i in range(0, len(items) * 3):item = items_pool[random.randint(0, len(items_pool) - 1)]if item in ret:continueret[item] = 0n + = 1if n > len(items):break

def LatentFactorModel(user_items, F, N, alpha, lambda):[P, Q] = InitModel(user_items, F)for step in range(0,N):for user, items in user_items.items():samples = RandSelectNegativeSamples(items)for item, rui in samples.items():eui = rui - Predict(user, item)for f in range(0, F):P[user][f] += alpha * (eui * Q[item][f] - lambda * P[user][f])Q[item][f] += alpha * (eui * P[user][f] - lambda * Q[item][f])alpha *= 0.9def Recommend(user, P, Q):rank = dict()for f, puf in P[user].items():for i, qfi in Q[f].items():if i not in rank:rank[i] += puf * qfireturn rank

综上在LFM中,重要的参数有4个:隐特征的个数F;学习速率alpha;正则化参数lambda;负样本/正样本比例 ratio。通过实验发现,ratio参数对LFM的性能影响最大。

6.基于图模型的推荐算法

如上,用户A对物品a,b,d有行为。

表示成二分图之后,给用户u推荐物品可以转化为度量用户顶点vuvu没有边直连的物品节点在图上的相关性,相关性越高的物品在推荐列表中权重越高。顶点的相关性主要体现在如下方面:
两个顶点之间的路径数
两个顶点之间路径的长度
两个顶点之间的路径经过的点

相关性高的一对顶点有如下特征:

两个顶点之间有很多路径相连
连接两个顶点之间的路径长度都比较短
连接两个顶点之间的路径不会胫骨出度较大的顶点

利用随机游走的personalRank算法来为用户推荐物品:
假定要给用户u进行个性化推荐,可以从用户u对应的节点vuvu节点重新游走,如果继续游走,那么从当前节点指向的节点按照均匀分布随机选择一个节点作为游走下次经过的节点。
这样重复之后,每个物品节点被访问的概率收敛到一个数,最终的推荐列表中物品的权重就是物品节点的访问概率。

缺点时间复杂度方面有明显的缺点,在为每个用户推荐的时候都需要在整个二分图上迭代,直到整个图上的PR(v)收敛,耗时。解决
减少迭代次数,但是会影响精度
从矩阵论出发重新设计算法

讲PR转换成为矩阵的形式,令M为用户物品二分图的转移概率矩阵,即:

M(v,v,)=1|out(v)|M(v,v,)=1|out(v)|

只需要计算一次(1−αMT)−1(1−αMT)−1即可。

推荐算法--利用用户行为数据(02)相关推荐

  1. 推荐算法--利用用户标签数据(04)

    文章目录 流行的推荐系统通过3种方式联系用户兴趣和物品 (1):利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这是基于物品的算法. (2):利用和用户兴趣相似的其他用户,给用户推荐那些和 ...

  2. 推荐算法(3):利用用户标签数据

    推荐算法(1):协同过滤总结 推荐算法(2):基于内容的推荐 推荐算法(3):利用用户标签数据 推荐算法(4)利用上下文信息 推荐算法(5)利用社交网络数据 推荐算法(6) 实例 推荐算法(7)缺失的 ...

  3. 推荐系统实践读书笔记-02利用用户行为数据

    推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...

  4. 《推荐系统实践》样章:如何利用用户标签数据

    <推荐系统实践>样章:如何利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖于不同的媒介.GroupLens在文章1中认为目前流行的推荐系统基本上通过三种方式来联系用 ...

  5. 机器学习-推荐系统-利用用户标签数据

    在之前的博文中介绍了三种方法给用户推荐物品. 1)UserCF:给用户推荐和他们兴趣爱好相似的其他用户喜欢的物品. 2) ItemCF:给用户推荐与他喜欢过的物品相似的物品. 3) LFM:通过一些特 ...

  6. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  7. [推荐系统]利用用户行为数据

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

  8. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  9. 推荐系统——利用用户行为数据

            用户的行为不是随机的,而是蕴含着很多模式.就好比如"啤酒与尿布"和"瑞雪兆丰年"两个数据挖掘的经典案例.用户行为数据中蕴涵着很多不是那么显而易见 ...

最新文章

  1. 【翻译】将Ext JS Grid转换为Excel表格
  2. 虚拟手柄控制的小车 air3.4 Android IPones4s 下运行正常
  3. iphone开发基础:loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
  4. 【数理知识】《矩阵论》方保镕老师-第1章-矩阵的几何理论
  5. 深度对比Python的3种“字符串格式化”方法,看看你喜欢哪一种?
  6. 在 Excel 中如何使用宏示例删除列表中的重复项
  7. 【linux】设置镜像源
  8. 生产环境实施 VMware 虚拟化基础架构,千万不要犯 4 个错误
  9. 小白学习MVC5+EF6遇到的问题一
  10. SQLServer如何取得随机获取的数据库记录
  11. python模块--hashlib
  12. 封装Selenium2Library
  13. 推荐一款插件layim.js 阿里大牛贤心制作的一款webim聊天插件
  14. qpython3h手机版怎么发短信_阿里云短信 python3代码发送短信
  15. jenkins编译java项目时无法读取pom.xml文件
  16. 如何正确理解SEO优化与搜索引擎优化之间的关系
  17. IDEA免费教育申请(不需要教育邮箱,只要你是学生!!!)
  18. 阿里云云原生数据湖体系全解读——元原生数据湖体系
  19. MATLAB数组相除
  20. [转载]軟件測試方法

热门文章

  1. python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...
  2. 丰田pcs可以关闭吗_丰田新款卡罗拉变化这么大 让老车主陷入沉思
  3. python爬虫程序自动结束-在linux下python爬虫进程发生异常时自动重启直至正常结束的方法...
  4. 【转】坐标系变换矩阵推导
  5. 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)
  6. [你必须知道的.NET]第十九回:对象创建始末(下)
  7. SharePoint 站点结构及概念
  8. 数据结构 - 递归 回溯算法(八皇后问题)
  9. 【机器学习】 - 目标检测 - VOC格式数据集介绍与自己制作
  10. 【CodeForces - 674B 】Bear and Two Paths(贪心,思维,水题)