凸六边形的扫描线填充算法_揭秘 Netflix 大赛电影推荐算法

4ee28fc7e595d3c6617b8fbab35eb5b3.png

Netflix发起的Netflix Prize百万美金竞赛,是推荐系统领域最标志性的事件之一,比赛不但吸引了众多专业人士开始投身于推荐系统领域的研究工作,也让这项技术从学术圈真正地进入到了商业界,引发了热烈的讨论并逐渐深入到了商业的核心腹地。今天学习和分享的论文为经典的《MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS》发布于2009年,虽然过去了10年,但作为整个推荐算法大厦的基础,值得认真学习。

MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS​datajobs.com

该论文属于传统算法协同过滤中的矩阵分解算法,即traditional>collaborative filtering>matrix factorization。之后的每一篇分享都会对应整个推荐系统算法树形结构中的某一条路径,方便归纳整理。

目录:

  1. 推荐系统策略分类,对应Recommender System Strategies
  2. 矩阵分解方法介绍,对应Matrix Factorization Methods
  3. 基础的矩阵分解模型实现,对应A Basic Matrix Factorization Model
  4. 求解的两种方法,对应Learning Algorithm
    1. SGD推导及实现
    2. ALS spark实现
  5. 4种优化方案
    1. 加入bias偏置
    2. 加入更多信息
    3. 加入动态时间考虑
    4. 加入观测值的置信度
  6. 简单回顾SVD
  7. 下期预告

下面进入今天分享的论文正题:

1. 推荐系统策略分类-RECOMMENDER SYSYTEM STRATEGIES

Recommender system主要有两种策略:一个方向是content filtering(基于内容的过滤),另一个方向是collaborative filtering(协同过滤,CF),CF又可以拆分成两个主要领域,一个是neighborhood methods,另一个是latent factor models。今天介绍的Matrix Factorization属于Latent factor models。

对应层次结构如下:

9f82e696f9e169fce6dacc106920adce.png

各方法的优缺点整理如下供参考:

  1. Content Filtering:
    1. 简述:专家需要人工针对特定的领域去定义用来描述user和item的属性,在实际预测时基于设定的属性对user和item进行关联。成功案例:Music Genome Project - Wikipedia
    2. 优点:可解释性强,无冷启动问题。
    3. 缺点:特定领域限定,依赖专家规则,惊喜度低。
  2. Collaborative Filtering:
    1. Neighborhood Methods:
      1. 简述:依赖user与user、item与item的历史行为,为user推荐与其相似的user喜欢的items,或为user推荐与他所喜欢的items相似的items。论文提供了一个图例。图例见下。
      2. 优点: User-Based(计算用户之间的相似度并推荐新的item),推荐惊喜度更高,对长尾物品也更友好。Item-Based(基于用户的行为计算item之间的相似度,并为user推荐新的item),相对来说更容易得到好的结果。无特定领域依赖。一般选择数量较少且稳定的一方(item or user)作为based算法
      3. 缺点:有冷启动问题,解释性一般。
    2. Latent Factor Models:
      1. 简述:将用户评分矩阵拆解成user隐向量矩阵和item隐向量矩阵,基于隐向量的点积进行评分预测并推荐。图例见下。
      2. 优点:无特定领域依赖。准确率高且稳定。有一定的惊喜度。
      3. 缺点:有冷启动问题。解释性差。

56a7458edd14ea3c363585882e3349df.png
Neighborhood Methods图例

b64217cb02455cdf8ffb8e60d5f60f2e.png
Latent Factor Models图例

2. 矩阵分解方法介绍-MATRIX FACTORIZATION METHODS

Matrix factorization对历史评分矩阵进行分解,得到user和item的

维的隐向量矩阵。假设评分矩阵的shape为MxN,M代表user数,N代表item数,那么就会得到
的user隐向量矩阵和
的item隐向量矩阵。假设M=4,N =4,
=2时,会得到如下结果:

fcf20662ed5900cbfe4e0fe80872665d.png

在得到user和item的隐向量之后,可以将user和item画在二维坐标系中,以隐向量值为对应的坐标。这样的可视化图片在一定程度上可以帮助理解把难以解释的隐向量。比如论文中的例子,如果给Gus推荐The Color Purple这种严肃地讨论黑人妇女社会地位的影片肯定不会吸引他:

de6040ca858bc780b25a3a01737e5dfb.png

3. 基础的矩阵分解模型实现-A BASIC MATRIX FACTORIZATION MODEL:

Item i的隐向量为

, user u的隐向量为
, 所以当不考虑额外信息的时候,预测的评分为
这两个隐向量的点积:

---------------(1)

那么主要难点就是如何得到

呢?这个问题就与SVD非常相关了。但是我们知道常规的SVD要求user-item评分矩阵是一个dense的矩阵,而我们实际的评分矩阵中是非常稀疏的。而且这么做极容易导致overfitting。早期的算法中会对缺失的数据进行填充。但填充会导致数据量陡增,并且填充方法不当会给数据带来很大的影响。

本质上要解的是最优化问题:

---------------(2)

换句话来说就是我们希望

越接近越好。由
来控制正则强度,可以通过cross-validation来选择最优的值。这一点具体可参考Ruslan Salakhutdinov和 Andriy Mnih的《Probabilistic Matrix Factorization》。

4. 求解的两种方法-LEARNING ALGORITHM

因为

均为unknown,该最优化问题是非凸的,我们很难找到一个最优的
来达到整体的最小化。主要有两种方法来近似求解最小化问题:
  1. Stochastic gradient descent
  2. Alternating least squares

4.1 Stochastic gradient descent(SGD):

Simon Funk提出了使用SGD的方法(http://sifter.org/~simon/ journal/20061211.html)。 这里给出

的update推导流程:

假设我们有一个参数为θ的function

那么我们使用SGD的目标就是寻找最优的θ使得

的值越小越好,对应的steps包括:
  1. 随机初始化
  2. 循环指定的迭代轮数,执行:
    1. 对于所有的样本
      ,执行:
      1. 计算
      2. 按照
        更新
        为学习速率;

在我们的这个问题里面,参数

对应到
,笼统标记为
,那么我们要最小化的
可以表示为:

即在公式(2)里描述的:

首先,我们需要计算

对任意
的导数。
的导数为:

同理,

的导数为:

即:

那么SGD的流程为:

  1. 随机初始设定
  2. 循环指定的迭代轮数,执行:
    1. 对于所有的打分
      执行:
      1. 计算
        ;
      2. 按照
        ,
        更新,
        为学习速率;

对应的python实现:

def 

4.2 Alternating Least Squares:

一般来说SGD更容易实现且更快,但ALS在两种情况下是比较有优势的:

  1. 在系统可以并行化时。系统可以并行独立计算每一个
    ,这也导致了算法的潜在大规模并行化。
  2. 以隐式数据为中心的系统。

具体实现可以参考pyspark ALS:

from 

到这里我们就完成了Basic版本的MF方法。

5. 四种优化方案-论文后面作者给出的多种进化版本:

5.1 ADDING BIAS

作者认为评分应该更个性化一些。比如有些user看电影即使烂片儿也给辛苦钱,再烂起步也是6分。有点user极微苛刻,再好顶天儿了也给6分。同理对item也是一样。那么这里笼统地使用

就不太合理了。作者在这里引入Bias,将评分表中观察到的值分解为4个部分:global average,item bias,user bias和user-item interaction。举个例子,要预测Joe对Titantic的评分。首先已知电影平均打分为3.7。Titantic要比电影平均水平优秀很多,那么可能要比平均值高出0.5分。Joe是个很严格的人,给出的打分一向偏低,可能要比平均值低个0.3分。那么我们基于以上考虑,预测Joe对Titantic的评分会是3.9分(3.7 + 0.5 - 0.3)。

fa2186142a71b1bc66b272fe2b3a4861.png

那么我们的最优化问题会变成:

4aa36e64d85299d36813f7c139987eb9.png

仍可参考上面使用SGD方法来进行求解。

5.2 Additional Input Sources

前面我们对比不同方法的时候,提到Latent Factor Models会导致冷启动问题。这里作者引入user的implicit feedback和user attributes等信息。

user implicit feedback指的是浏览记录、购买记录等。定义N(u)为user有过implicit feedback的items set,每一个item i对应

,那么用户对N(u)中的items的喜好程度可以表达为:

4c7cf5654b10fd5740adecf3b76fb225.png

假设user attributes集合为A(u),这里属性集指的是gender、age、income等等属性。每一个属性a对应

,则user关联的属性特征可以被表达为:

c3d424de9c202ebe5860178350999504.png

那么对评分的预测可以被更新为:

998bacbed65c156b44f4d1a60f28f43e.png

5.3 Temporal dynamics

引入时序信号适应因素随时间而发生的变化:

6a3e33c0de1418af5b3445973d130a44.png
  • item的bias变成与时间t相关的;
  • user的bias变成与时间t相关的;
  • 体现了user的品味随时间t不同而不同;

5.4 Inputs With Varying confidence Levels

作者认为不是所有观测到的rate的权重都应该是一致的,所以引入confidence level参数

。 最优化问题增强为:

84203005297c87d313f31465d4a221ae.png

6.SVD Review

CF问题本质上是一个matrix completion问题。要解决的问题可以被定义为:基于user对历史交互的item的打分情况,给没有看过的item进行打分预测。

SVD全称为Singular Value Decomposition,中文名称叫奇异值分解,是线性代数中的一种常用的矩阵分解方法。在推荐系统、数据压缩等方法经常会被用到。需要回顾的同学见李宏毅老师的线性代数视频。 具体解释和特征值分解的关系可见维基百科:奇异值分解 - 维基百科,自由的百科全书

0e4a271d0667b6b41737392a7e255357.png
SVD From wikipedia
  • 将评分矩阵R作为输入,SVD通过factorizing R矩阵,输出M,Σ和U;
  • M的列可以重建R的所有列;U的行可以重建R的所有行;
  • M的列是orthogonal的,U的列也是orthogonal的;
  • Σ是一个diagonal矩阵

本质上SVD在解决的问题为:

3979aca0c22fc6611893750886bfd845.png

但有些明显缺陷:

  • 缺失数据权重与已知的评分数据的权重是一样的;
  • 无正则约束,容易overfitting。

7. 下期预告

下期即第2期要介绍的是FISM《FISM: Factored Item Similarity Models for Top-N Recommender Systems 》

http://glaros.dtc.umn.edu/gkhome/fetch/papers/fismkdd13.pdf​glaros.dtc.umn.edu

觉得有用有收获的话,关注我吧!多谢多谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值