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

文章目录

  • 目录
    • 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即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Head First设计模式》第九章(2)组合模式

组合模式 ​ 基于前一篇迭代模式的案例进行需求更新,餐厅的菜单管理系统需要有煎饼屋菜单和披萨菜单。现在希望在披萨菜单中能够加上一份餐后甜点的子菜单。 在迭代模式中,披萨菜单是用数组维护的,我们需要让披萨菜单持有一份子菜单&#xf…

Python(4)--Pycharm安装、使用小技巧

Pycharm安装1.专业版Pycharm 安装2.设置Pycharm桌面快捷图标3.Linux卸载一个软件4.教育版Pycharm的安装5.多文件项目演练(Pycharm针对学生和教师开发了免费使用版)1.专业版Pycharm 安装 1.官网下载安装包 .tar.gz 2.解压缩 tar -zxvf 文件名 3.移动解压…

推荐算法--推荐系统冷启动问题(03)

文章目录目录1.什么是冷启动问题?1.1冷启动问题1.2 冷启动问题的分类1. 用户冷启动2 物品冷启动3 系统冷启动2.如何解决冷启动问题?2.1利用用户注册信息2.2选择合适的物品启动用户的兴趣2.3利用物品的内容信息2.4 发挥专家的作用目录 1.什么是冷启动问题…

《Head First 设计模式》第十章-状态模式 状态模式

状态模式 策略模式和状态模式是双胞胎,在出生时才分开。你已经知道,策略模式是围绕可以互换的算法来创建成功业务的,然而,状态走的是更崇高的路,它通过改变对象内部的状态来帮助对象控制自己的行为。 定义状态模式 …

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

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

Python(5)-注释

Python注释1.单行注释2. 多行注释(块注释)3.注释的使用和代码规范pyhton 的注释 使用自己熟悉的语言(中文),解释代码。Python解释器在执行文件时不会执行井号右边边的内容。1.单行注释 # 井号后面跟着注释内容 灰灰的虚…

网络原理知识点总结

第一章: 计算机网络系统由资源子网和通信子网组成。 计算机网络系统主要由网络通信系统、操作系统和应用系统构成 互联网基础结构发展的三个阶段: 第一阶段:从单个网络 ARPANET 向互联网发展的过程。 第二阶段:建成了三级结构…

推荐算法--时效性(05)

时效性 推荐系统应该考虑时间效应,因为用户的兴趣是有时间变化的。用户一年前喜欢的东西现在不一定感兴趣,相比于推荐过去喜欢的物品,推荐用户近期喜欢的物品更有参考价值。而在新闻更是如此,推荐过去跟用户兴趣一致的新闻已经失去…

推荐算法--推荐系统架构(06)

外围架构一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。 从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界…

Python(6)-算数运算符

算数运算符1.算数运算符2.优先级1.算数运算符 加 减- 乘* 除/ 取商// 取余数% 幂**(能算n次方: 2**38,一直以为只能算平方) 扩展: 乘法用于字符串:字符串重复指定的次数,要拼接的次数很长时,用乘号很方便…

推荐算法--其他信息(07)

文章目录目录1.利用上下文信息1.1时间上下文1.2地点上下文2.利用网络社交数据2.1 获取网络社交数据途径2.2 社交网络数据2.3 基于社交网络的推荐2.4 推荐算法2.5 给用户推荐好友目录 1.利用上下文信息 1.1时间上下文 用户的兴趣是随着时间变化的,三天打鱼两天晒网…

Python(7)-程序执行的原理

程序执行的原理1.计算机中的三个核心部件2.程序执行的原理3.程序的作用1.计算机中的三个核心部件 CPU:中央处理区,超大规模的集成电路,负责处理数据、计算 内存:临时存储数据,断电数据消失,读取数据快 硬盘…

橙白oj 2017级《算法分析与设计》-练习02

注:A题我以为给新生出的,应该贼简单,是按顺序消灭,卡了十几分钟,成了最后一个ac的题,真是菜的真实。 Problem A: Description 白细胞是人体与疾病斗争的“卫士”。当病菌侵入人体体内时,白细胞…

python(9)-变量、input函数

变量、input函数1.变量的定义(不可变对象)2.变量的类型3.变量的命名规范4. 不同类型的数据计算5.类型转换函数6.input()7.Tips程序是用来处理数据的,而变量是用来存储数据的。 关于函数,是一个提前准备好的代码;可以直接使用,不用…

推荐算法--总结(08)

一、推荐系统结构二、推荐引擎算法(Algorithm)1、协同过滤推荐算法1.1 关系矩阵与矩阵计算1.1.1 用户与用户(U-U矩阵)1.1.2 物品与物品(V-V矩阵)1.1.3 用户与物品(U-V矩阵)1.1.4 奇异…

算法总结-1算法入门

1.0 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 …

FM系列算法解读(FM+FFM+DeepFM)

在计算广告中,CTR是非常重要的一环。对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列。这里我们来介绍一下FM系列。   在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的相互作用…

二叉树层序遍历

层序遍历序列为:ABCDEFG 思路:栈是先进后出的数据结构,而队列是先进先出的数据结构。 我们层序遍历,很明显,先遇到的节点先打印,不同于前中后序遍历,我们采用队列结构。 具体执行过程如下&…

深度学习(01)-- 基础学习

文章目录目录1. 深度学习基础1.1 深度学习总览1.2 深度网络训练过程1.2.1 传统神经网络的训练方法为什么不能用在深度神经网络1.2.2 deep learning训练过程1.3 数学知识:2. 九种深度学习模型2.1 受限玻尔兹曼机RBM2.2 自编码器AE(降维)2.3 深…

MachineLearning(1)-激活函数sigmoid、损失函数MSE、CrossEntropyLoss

损失函数1.激活函数2.损失函数2.1均方误差损失函数2.2交叉熵损失函数2.3 NLLLoss()2.4 BCELoss()1.激活函数 全连接网络又叫多层感知器,多层感知器的基本单元神经元是模仿人类神经元兴奋与抑制机制,对其输入进行加权求和,若超过某一阈值则该…