0、写在前面

基于用户行为数据的应用其实早在个性化推荐系统诞生之前就已经在互联网上非常流行了,其中最典型的就是各种各样的排行榜。这些排行榜包括热门排行榜和趋势排行榜等。尽管这些排行榜应用仅仅基友简单的用户行为统计,但他们在互联网上得到了很多用户的青睐。因此,用户行为数据的分析是很多优秀产品设计的基础,个性化推荐算法通过对用户行为的深度分析,可以给用户带来更好的网站使用体验。

用户行为数据在网站上最简单的形式就是日志。网站在运行过程中都会产生大量原始日志,并将其存储在文件系统中。很多互联网会把多种原始日志按照用户行为汇总成会话日志,其中每个会话表示一次用户行为和对应的服务。

用户行为在个性化推荐系统中一般分为两种:显性反馈行为和隐性反馈行为。显性反馈行为包括用户明确表示对物品的喜好,例如打分和喜欢。隐性反馈行为是指不能明确反应用户喜好的行为,例如页面浏览行为和购买行为等。

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入的研究,提出了很多方法,比如基于邻近的方法(neighborhood-based)、隐语义模型、基于图的随机游走算法等。在这些方法中,最著名的在业界得到最广泛应用的算法就是基于邻近的方法。接下来将会介绍基于邻近的推荐方法。

1、基于邻近的推荐算法

基于邻近的推荐算法是推荐系统中最基本的算法。基于邻近的算法分为两类:一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。

1.1基于用户的协同过滤算法 
所谓的基于用户的协同过滤算法(user-based collaborative filtering)是,在一个个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。 
基于用户的协同过滤算法(UserCF)主要包括两个步骤: 
(1)找到和目标用户兴趣相似的用户集合 ;
(2)找到这个集合中该用户喜欢的,且目标用户没有听说过的物品推荐给目标用户 。
步骤(1)的关键是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用用户行为的相似度计算兴趣的相似度。给定用户u,v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)表示用户v曾经有过的正反馈的物品集合。那么可以通过Jacccard公式或者余弦相似度计算两个用户u,v之间的兴趣相似度: 
Jaccard:      
余弦相似度:

1.2基于物品的协同过滤算法 
基于物品的协同过滤算法(item-based collaborative filtering)是目前业界应用最多的算法。所谓的基于物品的协同过滤算法(ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。比如,你购买过《数据挖掘导论》会给你推荐《机器学习》。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。 
基于物品的协同过滤算法主要分为两步: 
(1)计算物品之间的相似度 ;
(2)根据物品的相似度和用户的历史行为给用户生成推荐列表 。
同样的,计算物品之间的相似度可以用下面的公式: 
 
N(i)是喜欢物品i的用户数,N(i)N(j)分子代表同时喜欢物品i和j的用户数。但是这里有一个问题。如果一个物品很热门,很多人喜欢它,那么Wij就会很大,接近1.因此该公式造成任何物品都会和热门的物品有很大的相似度,这对致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的产品,可以用下面的公式: 
 
这个公式惩罚了物品j的权重,因此可以减轻热门物品和很多物品相似的可能性。从上面的定义可以看出,在协同过滤中两个物品的相似度是因为它们共同被很多用户喜欢,也就是说每个用户都可以通过他们的历史兴趣列表给物品贡献相似度。这里面蕴含着一个假设,就是每个用户的兴趣局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于多个用户的兴趣列表,那么它们就有可能属于同一个领域。

2、隐语义模型

隐语义模型(LFM)是最近几年推荐系统领域最为热门的研究话题,它的核心思想是通过隐含特征联系用户兴趣和物品。隐语义分析技术从诞生到至今产生了很多著名的模型和方法,pLSA、LDA、MF等,是一类概念,其中很多方法可以用于个性化推荐系统。在推荐系统中它能够基于用户的行为对item进行自动聚类,也就是把item划分到不同类别或主题,而这些主题或类别可以理解为用户的兴趣。

对于一个用户来说,他们有着不同的兴趣。列如豆瓣书单来说,用户A会关注计算机、数学、历史方面的书,用户B喜欢机器学习、算法、编程语言方面的书。那么我们在推荐的时候肯定向用户推荐他感兴趣的类别下的书。那么前提是我们要对所有的item进行分类,可是分类标准是因人而异的,每个用户的想法都不一样。所以,我们不能靠由单个人(编辑)或team的主观想法建立起来的分类标准对整个平台用户喜好进行标准化。

此外我们还需要注意的两个问题: 
我们在可见的用户书单中归结出3个类别,不等于该用户就只喜欢这3类,对其他类别的书就一点兴趣也没有。也就是说,我们需要了解用户对于所有类别的兴趣度。 
对于一个给定的类来说,我们需要确定这个类中每本书属于该类别的权重。权重有助于我们确定该推荐哪些书给用户。

而LFM从用户的行为数据出发, 自动找到那些类然后进行个性化推荐。如下图所示: 
 
R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。对于一个user来说,当计算出他对所有item的兴趣度后,就可以进行排序并作出推荐。LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度: 
 
使用了LFM后我们发现:

  • 我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
  • 不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
  • 对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
  • 对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
  • 对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。优化损失函数可以定义如下: 
 
至于怎么求解这个函数,一般有最小交替二乘(ALS)或者随机梯度下降(SGD)。这里就不具体说明怎么求解,请自行上网查询或者参考《推荐系统实践》。

3、基于图的模型

用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中去。其实研究中,这种方法被扩展的并不算很多相比较前面介绍的两种模型。因此这里就不过多介绍基于图的模型,有兴趣的同学可以去参考《推荐系统实践》这本书。

【2】基于用户行为的推荐方法相关推荐

  1. 论文研读-AI4VIS-可视化推荐-VizML: 一种基于机器学习的可视化推荐方法

    VizML: 一种基于机器学习的可视化推荐方法 1 论文概述 1.1 摘要 1.2 引言 2 问题陈述 3 相关工作 3.1 基于规则的可视化推荐系统 3.2 基于机器学习的可视化推荐系统 4 数据 ...

  2. 基于用户的音乐推荐平台

    中国石油大学(北京)现代远程教育 毕 业 设 计(论文) 基于用户的音乐推荐平台 姓    名: 学    号: 性    别:

  3. php调用mahout包,mahout实现基于用户的Mahout推荐程序

    /* * 这里做的是一个基于用户的Mahout推荐程序 * 这里利用已经准备好的数据. * */ package byuser; import java.io.File; import java.io ...

  4. 基于用户喜爱生成推荐电影

    基于用户喜爱生成推荐电影 目录 基于用户喜爱生成推荐电影 集合说明 代码描述 代码 总结 集合说明 用户集:该集合是通过代码生成 电影集:kaggle.com上面的数据集,filmtv_movies ...

  5. 推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法

    概述 历史 1992年,Goldberg.Nicols.Oki及Terry提出 基本思想 爱好相似的用户喜欢的东西可能也会喜欢 优点 共享朋友的经验,提高推荐的准确度 根据爱好相似的用户喜欢的视频进行 ...

  6. 基于用户场景设计产品的方法

    节选自<场景化设计>一书 基于用户场景设计产品,其实只要牢牢抓住用户场景分析的四要素就可以了. ● 用户因素.分析使用产品的目标人群有哪些特征,通过数据积累能够刻画用户的标签, 最终实现千 ...

  7. Oracle 基于用户管理恢复的处理

    -- Oracle 基于用户管理恢复的处理 --================================ Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整.除了使用R ...

  8. “泰迪杯”挑战赛 - 基于用户协同过滤算法的电影推荐系统(附算法代码)

    目录 第 1 章 绪论 1.1.研究背景 1.2.国际发展形势第 2 章 基于用户协同过滤推荐技术 第 2 章 基于用户协同过滤推荐技术 2.1 电子商务推荐系统概述 2.2 协同过滤推荐技术 第 3 ...

  9. 传统推荐方法相关论文和代码

    目录 一 协同过滤方法 1.1 论文 1.2 代码 二 矩阵分解方法 2.1 论文 2.2 代码 三 因子分解机方法 3.1 论文 3.1.1 FM(Factorization Machines) 3 ...

最新文章

  1. 重置管理员密码linux,grafana重置管理员密码
  2. ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)
  3. WebGL Shader 环境搭建
  4. 2020年数据中心行业研究报告
  5. 理科卷math·english·chinese·biology·chemistry·physics
  6. vb外部调用autocad_AutoCAD教程之图块的各种相关操作和概念
  7. srt编辑的文件在linux显示乱码,解决看本地视频srt字幕乱码问题教程-srt文件
  8. 共享内存及其用mmap实现共享内存
  9. itextpdf将带复选框的html_HTML基础知识
  10. java sql结果写入csv文件_java在处理大数据的时候一些小技巧
  11. springboot 物联网_【阿里云生活物联网架构师专题】基于在 SpringBoot Java私有云上对接阿里云物联网,实现M2M设备数据流转。...
  12. Java 会是未来第一编程语言吗?
  13. 语言-英语-美国英语:美国英语
  14. smtp中mailfrom是必须的吗_人脸识别在建筑工地实名制系统中扮演着什么样的角色,是必须的吗?...
  15. 枯燥的寒假生活(二) 武汉大学老教务系统提交表单时的密码加密方式
  16. 安装bluefish
  17. c语言程序图像抠图,Opencv使用鼠标任意形状的抠图
  18. 如何使用Pixelmator Pro处理图片?mac pixelmator使用教程
  19. 交通-地铁客流量python时间序列预测
  20. 蓝牙遥控器连接流程分析

热门文章

  1. 携号转网,用户最关心的还是网络质量
  2. ASP.NET2.0文件上传以及图片处理总结篇 [转]
  3. 数据状态更新时的差异 diff 及 patch 机制
  4. 玩转Nodejs日志管理log4js
  5. docker-compose.yml配置文件详解
  6. Docker快速搭建Taiga敏捷开发项目管理平台
  7. GIT关联本地仓库与远端仓库
  8. “System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results fro
  9. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)
  10. 文件从头开始读函数_如何从头开始编写自己的Promisify函数