本文简单扼要地介绍推荐算法中的两种经典算法:协同过滤和矩阵分解。内容有以下三部分

  1. 协同过滤算法
  2. 矩阵分解
  3. 协同过滤与矩阵分解的关系

早期的推荐系统以业务理解为核心,通过复杂的规则描述来向用户推荐商品,这种做法具有透明性高、可移植性差、维护成本高、泛化能力差等特点。在这样一个背景下,协同过滤算法在Amazon推荐系统中的成功落地成为了当时的焦点。

1. 协同过滤算法 (Collaborative Filtering)

[PDF] Amazon.com Recommendations: Item-to-Item Collaborative Filtering | Semantic Scholar​www.semanticscholar.org

“协同过滤“,顾名思义就是协同大家的反馈、评价和一件一起对海量信息进行过滤,进而从中筛选出目标用户可能感兴趣的信息的推荐过程。 —— 王喆《深度学习推荐系统》

要理解协同过滤算法必须理解其中的两个关键名词:共现矩阵和相似矩阵。

共现矩阵的行坐标为用户、列坐标为物品,矩阵中的值代表某个用户对某个物品的评分值(在不同的业务背景下该评分具有不同的实际意义)。

相似矩阵的定义在UserCF中是用户到用户的相似度矩阵,在ItemCF中则是物品到物品的相似度矩阵。

协同过滤的过程可以大致分为两个阶段:

  1. 离线阶段:根据共现矩阵计算出相似度矩阵。
  2. 线上阶段:根据相似度矩阵完成TopK推荐问题。

离线阶段

现假设从历史数据中可以获得M个用户对N个物品的正负反馈,将其转化成共现矩阵。

数据:用户到物品的评分矩阵,即一个 MxN 的共现矩阵。

目标:计算出 MxM 的用户相似度矩阵,或者 NxN 的物品相似度矩阵。

UserCF:将共现矩阵视作M个长度为N维的用户向量,根据余弦相似度或皮尔逊相关系数计算出每两个用户之间的相似度,共需计算

次,时间复杂度

ItemCF:将共现矩阵视作N个长度为M维的物品向量,同样根据余弦相似度或皮尔逊相关系数计算出每两个物品之间的相似度,共需计算

次,时间复杂度

线上阶段

数据:一个 MxN 的共现矩阵,MxM 的用户相似度矩阵或者 NxN的物品相似度矩阵。

目标:收到一个用户A(非新用户)的线上请求,为该用户推荐K个用户可能感兴趣的物品。

UserCF:根据用户相似度矩阵,找出与用户A最相似的Top m个用户,然后用下面的伪代码计算出该用户对不同物品的评价预测

# 背景:向userA推荐Top K个物品# 计算出userA对每个候选item的得分
item_scores = {}
for item in 候选物品集:sim_sum = 0for sim_user in m个最相似的用户:item_scores[item] += sim_user对item的评分 * sim_user与userA的相似度sim_sum += sim_user与userA的相似度item_scores[item] /= sim_sum
# 找出按score倒排找出Top K个item,代码忽略

ItemCF:假设用户A的正反馈物品集为H,根据物品相似度矩阵,然后用下面的伪代码计算出该用户的Top K

# 背景:向userA推荐Top K个物品# 计算出userA对每个候选item的得分
item_scores = {}
for item in 候选物品集:for item_h in 用户A的正反馈物品集H:item_scores[item] += 用户A对item_h的评分 * item与item_h的相似度
# 找出按score倒排找出Top K个item,代码忽略

UserCF与ItemCF的特点

  1. UserCF在“用户对物品的兴趣点比较分散和稀疏”的场景中比ItemCF表现更好,例如新闻推荐。
  2. UserCF需要离线对整个用户群体进行相似度矩阵的计算,从计算成本和存储成本上考虑都不太适合用户数量级远大于Item数量级的场景(如小说推荐),ItemCF会更适合这类场景。
  3. 协同过滤的计算方式决定了它推荐出来的物品往往集中在头部那些曝光多的热门商品,即头部效应严重,从长期的角度上并不利于推荐池的多样性。
  4. 协同过滤算法在用户、商品达到一定数量级之后,会面临着共现矩阵非常稀疏的问题,而协同过滤在稀疏性较强的数据中难以挖掘到用户真正的潜在兴趣。

为了解决协同过滤存在的泛化性能不强的特点,矩阵分解法被提出。

2. 矩阵分解 (Matrix Factorization)

矩阵分解的含义是在协同过滤算法中的共现矩阵的基础上,加入隐向量的概念,加强了模型处理稀疏矩阵的能力。假设M个用户N个物品,共现矩阵为 MxN 维,那么矩阵分解算法最终会将共现矩阵拆成一个 MxF的用户向量矩阵和一个 NxF的物品向量矩阵(F即隐向量的长度),实际推荐过程中可以直接用线上请求的用户与候选集的物品进行相似度计算,再取Top K。

矩阵分解的过程是怎么样的呢?在具体的算法实现上,矩阵分解主要有三种实现方法。

  1. 特征值分解
  2. 奇异值分解(SVD)
  3. 梯度下降

其中特征值分解只能用于方阵,不适用于大部分场景下的矩阵分解。

奇异值分解的计算方法在这里不详细介绍,它会将一个MxN的矩阵表示成MxM矩阵、MxN对角阵和NxN矩阵的乘积,然后取对角阵的对角线上前F大的元素,使得MxN的矩阵被分解为MxF、FxF和FxN三个矩阵的乘积,也就得到了用户和物品的向量矩阵。奇异值分解的方法本质上要求共现矩阵是稠密的(但大多数互联网场景下用户的行为都是稀疏的),并且时间复杂度为

,在用户量和物品数量很大的情况下计算的时间成本非常高。

梯度下降法是矩阵分解的主流方法,梯度下降法的过程可以概括为以下几步:

  1. 确定待优化参数,预测值

假设

为用户向量矩阵,
为物品向量矩阵,那么预测值就是
,
为用户u对物品i的评分。

2. 确定目标函数

这里用均方误差,目标函数为

为了防止模型在局部参数上过拟合,我们加入正则化项

3. 求偏导,得梯度

求偏导,得到的结果为

求偏导,得到的结果为

4. 利用梯度的反方向对参数进行更新,从i步到i+1步为

其中

为学习率

3. 协同过滤与矩阵分解的关系

协同过滤算法以用户或物品为单位,找出一个相似的群体,以该群体的整体偏好来估计当前用户的偏好。矩阵分解则借助隐变量,将整个共现矩阵在隐变量的空间内进行描述,用相似度来计算用户对某个商品的兴趣程度。后者在前者的基础上有以下几个点做出了改进:

  1. 泛化性能强,解决了数据稀疏的问题。协同过滤算法,以ItemCF为例,是以日志中用户有过正反馈的物品集来刻画用户的兴趣的,如果用户只对极少数物品有过正反馈,那么利用ItemCF的方法来进行推荐对用户兴趣的刻画是不准确的(UserCF中则体现在用户的相似度计算不够准确)。而矩阵分解则以隐变量来刻画用户的兴趣,由于所有用户隐变量的定义都是统一的,所以在计算的过程中,隐变量是可以在所有样本上进行更新的。
  2. 拓展性强,中间产物更加灵活。协同过滤算法的中间产物是相似度矩阵,而矩阵分解的产物是用户和物品的向量。相似度矩阵只能用于直接计算推荐结果,但是用户向量和物品向量却还可以进行聚类分析或者作为Embedding特征输入到其他模型当中。
  3. 空间复杂度由
    降到了

该文章源自笔者结合自身的理解对相关知识点的整合,从个人的学习笔记的角度落笔,如有错漏不当之处,还望读者批评指正

矩阵sum_推荐系统——从协同过滤到矩阵分解相关推荐

  1. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...

  2. 吴恩达|机器学习作业8.1.推荐系统(协同过滤算法)

    8.1.推荐系统(协同过滤算法) 1)题目: 在本次练习中,你将实现协同过滤算法并将它运用在电影评分的数据集上,最后根据新用户的评分来给新用户推荐10部电影.这个电影评分数据集由1到5的等级组成.数据 ...

  3. 推荐系统之协同过滤概述

    推荐系统之协同过滤概述 http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/ 这篇文章讲得可真够细的 推荐系统之协同过滤概述 2 ...

  4. 推荐系统-经典协同过滤理论基础实践

    推荐系统-经典协同过滤理论基础实践 1.协同过滤推荐方法CF简介 协同过滤CF 基于记忆的协同过滤 用户相似度的推荐 物品相似度推荐 UserCF用户协同过滤算法 ItemCF物品的协同过滤推荐算法 ...

  5. 推荐系统-经典协同过滤算法【基于记忆的协同过滤算法、基于模型的协同过滤算法】

    推荐系统-经典协同过滤理论基础实践 1.协同过滤推荐方法CF简介 协同过滤CF 基于记忆的协同过滤 ---- 用户和物品的相似度矩阵 用户相似度的推荐 物品相似度推荐 UserCF用户协同过滤算法 I ...

  6. 商品推荐系统毕业设计 协同过滤算法

    文章目录 1 简介 2 常见推荐算法 2.1 协同过滤 2.2 分解矩阵 2.3 聚类 2.4 深度学习 3 协同过滤原理 4 系统设计 4.1 示例代码(py) 5 系统展示 5.1 系统界面 5. ...

  7. 推荐系统入门:作为Rank系统的推荐系统(协同过滤)

    知乎:如何学习推荐系统? 知乎:协同过滤和基于内容的推荐有什么区别? 案例:推荐系统实战?  数据准备:实现推荐栏位:重构接口:后续优化. 简书:实现实时推荐系统的三种方式?基于聚类和协同过滤:基于S ...

  8. [机器学习] 推荐系统之协同过滤算法(转)

    [机器学习]推荐系统之协同过滤算法 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题. 1. 什么是推荐算法 推荐算法最 ...

  9. 【推荐系统】协同过滤推荐算法

    [推荐系统]协同过滤推荐算法 原创 魏晓蕾 最后发布于2018-08-28 10:41:42 阅读数 9633 收藏 发布于2018-08-28 10:41:42 分类专栏: Recommender ...

最新文章

  1. 关于RMAN几个容易混淆的参数
  2. python从文件中读取数据_使用Python脚本从文件读取数据代码实例
  3. 模拟和存根有什么区别?
  4. day07 数据类型的内置方法(列表的内置方法)
  5. vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  6. delphi webbrowser 显示 html,delphi webbrowser
  7. JAVA补充-抽象类
  8. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
  9. Q104:怎么用ray tracing画基于磨边楔形的“花环(Rosette)”
  10. 因未发项目奖金,一程序员删代码泄愤被判刑5个月
  11. python中字典dict的方法fromkeys
  12. erlang的又一力作——英雄联盟聊天服务器
  13. oracle中rollup函数与mysql中with rollup区别
  14. RedHat配置阿里yum源
  15. SMART PLC PID仿真 (SMART PID仿真库使用说明)
  16. win7电脑怎么提升开机速度
  17. (三)Spring整合RabbitMQSpringBoot 整合RabbitMQRabbitMQ 镜像队列
  18. Java怎么除以2_哪个更好的选项用于将整数除以2?
  19. 关于音视频的一些知识(demux、filter等)
  20. ubuntu忘记mysql密码,怎么办

热门文章

  1. java开发流程图_Java 详解 JVM 工作原理和流程
  2. 2.4g 无线键鼠对码软件_无线路由器的2.4G和5G同时开速度有影响吗?
  3. git 改了一段代码不想要了_初识Git
  4. java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)
  5. 2019-12-03 有用的学术网站
  6. 深度学习85—[深度学习] 感知器
  7. PHP输出毫秒时间戳
  8. umask 和 新建文件、目录的默认权限
  9. NHibernate之旅(14):探索NHibernate中使用视图
  10. web05-CounterServlet