协同过滤算法

  • 1.传统推荐模型的演化关系图
  • 2. 协同过滤
    • 2.1 什么是协同过滤
    • 2.2 计算用户相似度
    • 2.3 最终结果排序
    • 2.4 存在缺点
    • 2.5 ItemCF
    • 2.6 各自的应用场景

1.传统推荐模型的演化关系图


传统推荐模型发展脉络由以下几部分组成:

  • 协同过滤算法族
  • 逻辑回归模型族
  • 因子分解机模型族
  • 组合模型

2. 协同过滤

2.1 什么是协同过滤

协同过滤算法,是一种完全依赖用户和物品之间行为关系的推荐算法。从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。

电商网站的商品库里一共有 4 件商品:一个游戏机、一本小说、一本杂志,以及一台电视机。假设,现在有一名用户 X 访问了这个电商网站,电商网站的推荐系统需要决定是否推荐电视机给用户 X。

为了进行这项预测,推荐系统可以利用的数据有用户 X 对其他商品的历史评价数据,以及其他用户对这些商品的历史评价数据。

将有向图转换成矩阵的形式。这个矩阵表示了物品共同出现的情况,因此被称为“共现矩阵”。其中,用户作为矩阵行坐标,物品作为列坐标,我们再把“点赞”和“踩”的用户行为数据转换为矩阵中相应的元素值。

生成共现矩阵之后,推荐问题就转换成了预测矩阵中问号元素(图 1(d) 所示)的值的问题。由于在“协同”过滤算法中,推荐的原理是让用户考虑与自己兴趣相似用户的意见。因此,我们预测的第一步就是找到与用户 X 兴趣最相似的 n(Top n 用户,这里的 n 是一个超参数)个用户,然后综合相似用户对“电视机”的评价,得出用户 X 对“电视机”评价的预测。

2.2 计算用户相似度

在共现矩阵中,每个用户对应的行向量就可以当作一个用户的 Embedding 向量。

常见相似度计算方法:

  • 欧氏距离
    d(x,y)=(xi−yi)2d(x,y)=\sqrt{(x_i-y_i)^2} d(x,y)=(xiyi)2


    sim(x,y)=11+d(x,y)sim(x,y)= {1 \over {1+d(x,y)}} sim(x,y)=1+d(x,y)1

  • 余弦相似度
    sim(i,j)=cos(i,j)=i⋅j∣∣i∣∣⋅∣∣j∣∣sim(i,j)=cos(i,j)={i \cdot j\over ||i|| \cdot ||j|| } sim(i,j)=cos(i,j)=ijij

  • 皮尔逊相似系数
    皮尔逊相关系数通过使用用户平均分对各独立评分进行修正,减小了用户评分偏置的影响。
    sim(i,j)=∑p∈P(Ri,p−R‾i)(Rj,p−R‾j)∑p∈P(Ri,p−R‾i)2∑p∈P(Rj,p−R‾j)2sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_i)(R_{j,p}-\overline R_j) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_i)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_j)^2}} sim(i,j)=pP(Ri,pRi)2

    pP(Rj,pRj)2

    pP(Ri,pRi)(Rj,pRj)

  • 改进皮尔逊相关系数
    引入物品平均分的方式,减少物品评分偏置对结果的影响。
    sim(i,j)=∑p∈P(Ri,p−R‾p)(Rj,p−R‾p)∑p∈P(Ri,p−R‾p)2∑p∈P(Rj,p−R‾p)2sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_p)(R_{j,p}-\overline R_p) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_p)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_p)^2}} sim(i,j)=pP(Ri,pRp)2

    pP(Rj,pRp)2

    pP(Ri,pRp)(Rj,pRp)

  • Jaccard相似度
    J(A,B)=∣A∩B∣∣A∪B∣=∣A∩B∣∣A∣+∣B∣−∣A∩B∣J(A,B)= {|A \cap B| \over |A \cup B|}= {|A \cap B| \over |A| + |B|-|A \cap B|} J(A,B)=ABAB=A+BABAB
    适用于布尔值向量。

2.3 最终结果排序

在获得 Top n 个相似用户之后,利用 Top n 用户生成最终的用户 u 对物品 p 的评分。假设“目标用户与其相似用户的喜好是相似的”,根据这个假设,可以利用相似用户的已有评价对目标用户的偏好进行预测。最常用的方式是,利用用户相似度和相似用户评价的加权平均值,来获得目标用户的评价预测,公式如下所示。
Ru,p=∑s∈S(wu,s⋅Rs,p)∑s∈Swu,sR_{u,p} = {\sum_{s\in S}(w_{u,s} \cdot R_{s,p}) \over \sum_{s\in S}w_{u,s}} Ru,p=sSwu,ssS(wu,sRs,p)

2.4 存在缺点

  • 互联网场景下,用户数往往大于物品数,UserCF需要维护用户相似度矩阵以便快速找到Top n相似用户。使得空间复杂度迅速增长,使得在线存储系统难以承受扩展速度。
  • 用户历史数据往往很稀疏,找到相似用户的准确度非常低。

2.5 ItemCF

基于物品相似度进行推荐的协同过滤算法。通过计算共现矩阵中物品列向量的相似度得到物品之间的相似矩阵,再找到用户的历史正反馈物品的相似物品进行进一步排序和推荐。
具体推荐步骤:

  • 基于历史数据构建m*n的共现矩阵
  • 计算共现矩阵两两列向量间的相似度,构建n*n的物品相似度矩阵。
  • 获得用户历史行为数据中的正反馈物品列表
  • 利用物品相似度矩阵,针对目标用户历史行为中的正反馈物品,找到相似的Top K个物品,组成相似物品集合。
  • 对相似物品集合中的物品,利用相似度分值进行排序,生成最终的推荐列表。

2.6 各自的应用场景

  • UserCF适用于发现热点,以及跟踪热点的趋势
  • ItemCF更适用于兴趣变化较为稳定的应用。

经典推荐算法-协同过滤相关推荐

  1. 基于神经网络的推荐算法,协同过滤推荐算法python

    大数据运维的主要工作内容是什么? . 大数据相关工作岗位很多,有大数据分析师.大数据挖掘算法工程师.大数据研发工程师.数据产品经理.大数据可视化工程师.大数据爬虫工程师.大数据运营专员.大数据架构师. ...

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

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

  3. 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法

    个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...

  4. 个性化推荐算法-协同过滤

    协同过滤Collaborative filtering ItemCF 基础公式 Sij:物品i & 物品j 的相似度. 分子:浏览过物品i 与 浏览过物品j的用户的交集. 分母:浏览过物品i ...

  5. 探索推荐引擎内部的秘密:深入推荐引擎相关算法 - 协同过滤

    上一篇转载的博客<探索推荐引擎内部的秘密 - 推荐引擎初探>,详细讲述了推荐引擎的原理.算法.应用,并且给出了一些优化的trick,真心不错. 这里把第二篇<探索推荐引擎内部的秘密 ...

  6. 计算机系统应用的书,基于个性化图书推荐的协同过滤算法

    摘 要本文对基于个性化图书推荐的协同过滤算法的设计方案进行实验,目的是为证实在真实用户的多标准评估过程中怎样产生数据集,从而找到一种科学的算法.并通过图书推荐的应用案例来说明算法,以验证其是否有效. ...

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

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

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

    1 基于相似性的推荐流程 用户偏好如何收集 用户偏好如何整合 大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式: 不同的行为分组 一般可以分为"查看& ...

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

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

最新文章

  1. 如何用VC++新建一个项目
  2. @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景
  3. linux cacti 搭建,Cacti搭建部署
  4. C#设计模式之单例模式
  5. hmcl手机版_hmcl启动器
  6. Facebook承认6亿用户密码可被员工随意读取:已修复故障
  7. python udp编程_Python UDP编程小示例
  8. axios的二次封装与async,await的配合使用?
  9. android点击监听,android基础之点击监听器的2种监听实现
  10. c++定义结构体队列
  11. html页面的bug记录:简单记录几个编辑html页面遇到的问题
  12. CentOS7 五步安装搜狗拼音输入法
  13. 【信息泄露】12306恐中招!400万数据遭泄露,请尽快更改密码!
  14. 运营100天的微信公众号能挣多少钱?
  15. 常见SOC启动流程分析
  16. Centos 7 虚拟机安装 jenkins
  17. JPA之SQL修改语句
  18. cx_Oracle.DatabaseError: ORA-01036: 非法的变量名/编号
  19. Ubuntu18.04如何安装汉语(拼音)输入法
  20. WinX DVD Ripper for Mac(DVD视频格式转换工具)

热门文章

  1. 使用cloc进行代码统计
  2. (最全)数据结构各排序算法时间复杂度,空间复杂度,稳定性比较
  3. 如何处理格网边界断开不接边的问题
  4. labview编程概述(一)
  5. 如何在vue引入UE Editor
  6. v兔无痕补单是什么,无痕补单搭配运营知识怎样玩,无痕补单的意义,哪里可以找到无痕补单
  7. 使用SuperMap iDesktopX数据迁移工具迁移地图文档和符号
  8. 最大后验(英文为Maximum a posteriori,
  9. 驱动程序(10) Windriver实现DMA传输时分配超大内存Buffer的办法
  10. 详解设计模式:中介者模式