1 基于相似性的推荐流程

用户偏好如何收集

用户偏好如何整合

大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式:

不同的行为分组
一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。

加权操作

根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,比如:“关注”,“加入购物车”,“下订单后取消”,“付款”反应用户的喜好度不同。但这也因应用而异。

2 相似度如何计算

收集了用户行为数据,经过一定的预处理和归一化,得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值

在用户–物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个矢量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个矢量来计算物品之间的相似度

相似度和距离在定义上是相反的概念

常用到的相似度计算





都为0 S为不相关数

3 协同过滤(Collaborating Filtering)

协同过滤是利用集体智慧的一个典型方法。

协同(Collaborating)是群体行为,过滤(filtering)则是针对个人的行为。

协同过滤基于如下基本假设:如果一个人A在一个问题上和另一个人B持相同观点,那么对于另外一个问题,比起
随机选择的一个路人甲,A更有可能同B持相同观点。

生活中如果你想去看电影,一般会问问周围的朋友,看看最近有什么好看的电影推荐,我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

协同过滤推荐算法是诞生最早,并且较为著名的推荐算法,具体又可分为两类:

Item-based CF:
• 通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐
• 物以类聚

User-based CF:
• 通过不同用户对item的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐
• 人以群分

关联规则 vs 协同过滤

关联规则:
• 回答问题:某消费者购买商品A,那么他还可能买什么商品?
• 特征:直接的推荐,从整体的数据中挖掘潜在关联,与单个人的偏好无关

协同过滤:
• 回答问题:与A客户相似的客户群是谁?将客户群中的物品推荐给A(A没有的物品);与A物品相似的物品群是什么?
对某用户,若其已经购买或收藏A,则推荐该用户与A相似的物品群

• 特征:间接推荐,即先找到相似的人(user based)或物(item based),然后再根据品味相似的人的偏好进行推荐
• 协同过滤= 协同(集体智慧的部分)+过滤(针对具体某个人又做了一次个性化)

4 基于用户(User-based)的协同过滤算法

基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐

简单概括:给用户推荐和他兴趣相似的其他用户喜欢的物品


基于用户(User-based)的协同过滤算法—应用

如图1,矩阵是用户对商品的一个评级列表,横轴是商品(书本),纵轴是用户,对应的值是用户对商品的评级,最高5分,最低1分,评级越高说明用户对该商品越喜爱,空则代表用户没有对商品进行评级。






基于用户的协同过滤的基本思想很简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。

计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到相似邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户对没有涉及的物品的偏好,计算得到一个排序的物品列表作为推荐。

图给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居用户C,然后将用户C喜欢的物品D推荐给用户A。

5 基于物品(Item-based)的协同过滤算法

基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。

简单概括:给用户推荐和他之前喜欢的物品相似的物品。




基于物品的原理和基于用户类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品进行推荐

从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐

上图给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A 的用户都喜欢物品C,得出物品A和物品C 比较相似,而用户C喜欢物品A,那么可以推断出用户C可能也喜欢物品C

User-based CF vs Item-based CF

对于电子商务和电影音乐的推荐网站,考虑到用户数量一般大大超过商品数量,此时基于物品的协同过滤推荐计算复杂度相对较低,是应用比较广泛的推荐算法

对于如新闻推荐等物品增长很快,实时性较高的场合,更适合采用基于用户的协同过滤

对于比如微博这样的社交网站,一方面考虑到内容的数量和更新速度,基于用户的协同过滤是一个更不错的选择,再加上社会网络信息,可以增加用户对推荐解释的信服程度

6 案例:基于物品的协同过滤

案例背景
该网站为互联网用户提供个性化电影推荐服务
数据:
网站提供所有电影信息
网站收集用户行为数据,包括浏览、评分和评论等各种行为数据
目标
网站帮助用户找到还没有看过并符合他兴趣的电影列表

数据样本

测试数据集: • 每行3个字段,依次是用户ID,电 影ID,用户对电影的评分(0-5分,每0.5分为一个评分点)

实现步骤

  1. 建立物品的同现矩阵
  2. 建立用户对物品的评分矩阵
  3. 矩阵计算推荐结果

步骤1:建立物品的同现矩阵

步骤2:建立用户对物品的评分矩阵

步骤3:矩阵计算推荐结果

同现矩阵*评分矩阵=推荐结果
协同(集体行动)+过滤(针对个人偏好)=个性化推荐

7 协同过滤的优缺点

• 优点
• 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。
• 共享其他人的经验,避免了内容分析的不完全和不精确
• 有推荐新信息的能力。可以发现内容上完全不相似的信息,可以发现用户潜在的但自己尚未发现的兴趣偏好。

• 缺点
• 冷启动问题
• 数据稀疏问题
• 热门物品的干扰,两个不同领域的最热门物品之间具有较高的相似度

8 案例:协同过滤

电影打分推荐 比较基于用户/物品的协同过滤方案

基于内容的推荐

根据商品自身属性或用户定义标签进行推荐


基于内容的推荐


基于内容的推荐-基于标签
• 根据标签推荐物品的基本思想就是找到用户常用的一些标签,然后找到具有这些标签的热门物品,将其推荐给用户

• 需要注意的问题:
• 一个是要保证新颖性和多样性,可以用TF-IDF方法来降低热门物品的权重

• 另一个则是需要清除某些同义重复标签和没有意义的标签

基于内容推荐方法的优缺点

• 优点
• 不需要用户行为数据,没有冷启动和稀疏数据的问题。
• 能为具有特殊兴趣爱好的用户进行推荐。
• 能推荐新的或不是很流行的项目,没有新项目问题。
• 通过推荐项目的内容特征,可以给出推荐理由。
• 有比较成熟的分类学习模型可以应用。

• 缺点
• 要求能从内容中提取出有意义的特征
• 要求内容具备结构性
• 要求用户的兴趣偏好能够通过特征表达

9 混合推荐方法

加权型混合推荐

• 将来自不同推荐算法生成的候选结果及结果的分数,进一步进行组合(Ensemble)加权,生成最终的推荐
排序结果

• 分级型混合推荐
• 根据不同的推荐场景,将不同的推荐算法按照效果优劣进行层次性划分。在对应的推荐场景下,优先采用
高可信度的推荐算法生成的结果

• 交叉混合推荐
• 将不同推荐算法的生成结果,按照一定的配比组合在一起,打包后集中呈现给用户,保证最终推荐结果的
多样性

10 案例:微博推荐系统的设计

关键问题-冷启动

如何给新用户做个性化推荐

• 根据其注册信息进行粗粒度的推荐,如年龄,性别,爱好等

• 在新用户注册后为其提供一些内容,让他们反馈对这些内容的兴趣,再根据这些数据来进行推荐

• 如何将新物品推荐给用户
• 在推荐列表中随机给用户展示新物品,为新物品积累曝光机会和行为数据

• 通过语义分析对物品抽取关键词并赋予权重,这种内容特征类似一个向量,通过向量之间的余弦相似度便
可得出物品之间的相似度,从而进行推荐

• 新网站在数据稀少的情况下如何做个性化推荐
• 基于人工的力量,比如人工编辑热门榜单,人工分类标注

• 依托第三方数据,比如关联社交网络账号,导入联系人信息,抓取社交内容

关键问题-时间因素

对于新闻资讯类推荐,时间权重很重要。可以通过对每一个推荐物品加入时间衰减因子,对于越久之前的物品,赋予越小的权重

• 对于Item CF,在找相似物品时着重考虑用户最近喜欢的物品• 对于User CF,如果两个用户同时喜欢了相同的物品,那么可以给予这两个用户更高的相似度,而在推荐物品时,也可着重推荐口味相近的用户最近喜欢的物品

• 在相似度计算时基于时间对用户行为赋予一定权重,时间间隔越久权重越低,经过这种改进的算法往往能得到用户更满意的结果

关键问题-数据稀疏性

考虑到现在互联网用户和商品的规模,数据非常稀疏,直接应用协同过滤效果并不太好

• 这个问题本质上是无法完全克服的,只能一定程度上缓解
• 数据是否产生关联比用户的偏好更重要
• 实践表明,稀疏数据情况下给同一个商品分别打负分(低评价)和打正分的两个用户要看做正相关的而非负相关的

• 基于相似性可以传播的假设,通过扩散的算法,从原来的一阶关联(两个用户有多少相似打分或者共同购买的商品)到二阶甚至更高阶的关联,这种方法计算量比较大

• 基于单品的数据可能非常稀疏,如果把这些商品信息粗粒化,在品类的水平上数据就会变得稠密。如果能够计算品类之间的相似性,就可以帮助进行基于品类的推荐

11 基于矩阵分解(SVD)的推荐算法

• 奇异值分解(SVD)的定义:

• 任何一个MxN的矩阵A,如果它的行数M大于或等于它的列数N,那么它就可以被转换成以下三个矩阵的乘积:一个MxR的正交矩阵U, 一个RxR的对角矩阵(奇异值矩阵), 和一个RxN正交矩阵V的转置矩阵

• 对于由M个产品和N个用户组成的评分矩阵MxN,我们就可以把这个矩阵分解为 MxR 的矩阵U, RxR 的奇异值矩阵和 RxN 的矩阵V • 取S矩阵的前几个奇异值就可以接近原来的MxN的矩阵,而不必取完整的S






92 推荐算法——相似性推荐和协同过滤相关推荐

  1. 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现

    推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...

  2. 在线新闻推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法、机器学习、分布式大数据、人工智

    在线新闻推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  3. Python+Django+Mysql简单在线课程推荐系统 基于用户、项目、内容的协同过滤推荐算法 SimpleOnlineCourseCFRSPyth python实现协同过滤推荐算法实现源代码下载

    Python+Django+Mysql简单在线课程推荐系统 基于用户.项目.内容的协同过滤推荐算法 SimpleOnlineCourseCFRSPyth python实现协同过滤推荐算法实现源代码下载 ...

  4. Python+Django+Mysql个性化二手车推荐系统 汽车推荐系统 基于用户、项目、内容的协同过滤推荐算法 WebCarCFRSPython python实现协同过滤推荐算法实现源代码下载

    Python+Django+Mysql个性化二手车推荐系统 汽车推荐系统 基于用户.项目.内容的协同过滤推荐算法 WebCarCFRSPython python实现协同过滤推荐算法实现源代码下载 一. ...

  5. 推荐算法和机器学习系列 - 协同过滤推荐算法和余弦相似性算法

    协同过滤算法 协同过滤(CF)推荐算法通过在用户活动中寻找特定模式来为用户产生有效推荐.它依赖于系统中用户的惯用数据,例如通过用户对其阅读过书籍的评价可以推断出用户的阅读偏好.这种算法的核心思想就是: ...

  6. 协同过滤推荐算法-基于用户的协同过滤UserCF及python实现

    协同过滤推荐算法 基本思想: 根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的物品给用户. 协同过滤推荐算法包含: 1.1基于记忆的推荐算法(基于领域的 ...

  7. 传统推荐模型(一)协同过滤算法_UserCF和ItemCF

    传统推荐模型(一)协同过滤算法_UserCF 1.UserCF 协同过滤就是协同大家的反馈.评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程. 物品1 物品2 物品3 ...

  8. 推荐引擎算法学习导论:协同过滤、聚类、分类(2011年旧文)

    推荐引擎算法学习导论:协同过滤.聚类.分类 作者:July 出处:结构之法算法之道 引言 昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了.于是昨天下午开始到今天凌晨3点,便研究了一 ...

  9. Slope one—个性化推荐中最简洁的协同过滤算法

    Slope One 是一系列应用于 协同过滤的算法的统称.由 Daniel Lemire和Anna Maclachlan于2005年发表的论文中提出. [1]有争议的是,该算法堪称基于项目评价的non ...

最新文章

  1. 苹果7【】闪存测试软件,不厚道!iPhone7大容量版竟采用TLC闪存
  2. idea mybatis generator插件_Mybatis使用自定义插件去掉POJO的Getter和Setter方法
  3. 06-CoreData增删改查
  4. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)
  5. python 字体_python docx字体设置
  6. 12306 抢票项目霸榜 GitHub,标星即将破万
  7. ubuntu的mysql教程 pdf_Ubuntu上的MySQL字符集设置技巧
  8. 抽象数据类型和Python类的基础
  9. 全局唯一序号生成方案
  10. Android-ViewPagerIndicator
  11. pdf幻灯片:圆锥曲线中的“三定”问题探究(一)
  12. Atitit 如何设置与安放知识的trap陷阱  知识聚合 rss url聚合工具 以及与trap的对比
  13. java 实现宠物领养_基于JavaEE的宠物领养系统的设计与实现任务书
  14. seo需要编程技术吗?学黑帽seo需要什么技术?
  15. SQL Server 备份还原教程
  16. 制作自己的 Cydia 源
  17. 陈佩斯曾受邀喜剧综艺:被酬劳吓的恍惚好几天
  18. 酒店数据泄露门后万豪会员计划遭重创
  19. Python读取docx表格中的合并单元格信息
  20. 组合体视图的画图步骤_组合体三视图的画法

热门文章

  1. android+3g移植,惊呆!普耐尔MOMO迷你3G移植MIUI系统
  2. Vue中 渲染函数(render)的介绍和应用
  3. responsiveSlides 封装好的轮播插件 直接调用
  4. 2021年熔化焊接与热切割找解析及熔化焊接与热切割操作证考试
  5. VirtualBox下载、安装,新建虚拟机
  6. C#高性能低GC 非托管动态扩容数组
  7. python安装lzo_mac-pip3 install python-lzo 失败
  8. 网站是如何变成灰色的
  9. 10.16日常的小bug解决
  10. 小橙序之家:小程序一定要进行微信认证吗