推荐系统-协同过滤简单介绍

来源:互联网 发布:音频裁切软件 编辑:程序博客网 时间:2024/05/16 10:18

推荐系统中,常用的个性化推荐算法有下图这些分类。

其中,基于内容的推荐和协同过滤的推荐是我们本次重点介绍的对象。


1.基于内容的推荐

首先,我们看看基于内容的推荐(Content-based Recommendation)。

基于内容的推荐一般是 根据用户的画像信息(例如年龄、性别、居住地等等)或者item的内容信息(具体来说,例如对于item是电影时,一般是可以基于电影的类型 喜剧

恐怖片、爱情片等等这些信息)。下面我举一个具体的例子。


这幅图的意思是这样的,Tom喜欢电影A,电影A的类别是Romantic和Suspense(悬疑)的。同时我们知道电影B也是Romantic和Suspense的。这个时候。基于内容的推荐就会把电影B推荐给Tom。因为电影A和电影B具有相似性。

2.基于协同过滤的推荐

简单介绍了基于内容的推荐,下面就介绍一下基于协同过滤的推荐。在第一幅图中,我们可以看到基于协同过滤的推荐其实分为3种。

前两种,大家可能都很熟悉。最后一种可以有点陌生。所以对于最后一种本文有着重介绍。

首先,要明确基于协同过滤的推荐都是根据一个叫做  user-item Matrix的矩阵来进行推荐的。这个user-item 矩阵就像下面这个样子:


大家可以看到,其实就是每个不同的user对每个不同的item一个“评价“(喜好的程度)。比如对于userA来说,userA喜欢itemA和itemC。但是,userA对于itemB和itemD上面缺少数据。这里也是一个基于协同过滤都必须考虑的问题,就是 user-item矩阵的稀疏性。


当然,细心的读者可以会发现,这些“评价”只有喜欢和不喜欢吗?。其实并不是这样的,这里只是为了展示一下什么叫做user-item矩阵。user对item的评价可以根据人为地划分许多种等级,我再具一个例子。


这里0,12,3,4,5其实就对应着不同的等级。


好了,介绍到这里读者心里应该有一个基本的概念,就是如果想基于协同过滤的方法来进行推荐的时候,必须要有user-item矩阵。

下面先讨论基于user的协同过滤。

2.1 基于user的协同过滤推荐

下面,我想利用一个图来解释基于User的协同过滤。


对于上面的user-item矩阵来说,我们其实可以发现userA和userC是很相似的。如果我们想对UserA推荐东西的话,我们可以推荐和他相似的userC喜欢的东西。
userC喜欢itemD,那么我们就把itemD推荐给userA。
其实在这个过程,相似性是通过user来确定的,这就叫做基于user的协同过滤。


2.2 基于item的协同过滤推荐

有了上面的认识,那么可以猜测到基于item的协同过滤推荐就应该是通过item的相似性来进行推荐的。没错确实是这样的,看看下面的图。

我们想给userA推荐个东西,我们发现userA喜欢itemA,同时itemA和itemD很相似。那么我们就把itemD推荐给userA。这个过程其实就是叫做基于item的协同过滤。

看到这里,可能会有一个问题,我们其实反反复复都在讨论一个概念“相似性”。那么这个相似性到底怎么衡量呢?基于协同过滤的推荐的相似性是需要从user-item矩阵计算得到,一般可以使用例如余弦相似,其实就两个向量的余弦值。本文重点不是介绍相似性怎么得到,下一篇文章有对相似性进行一个简单的分析。




好了,细心思考的读者可能会发现一个问题。基于内容的推荐和基于item的协同过滤推荐好像是一个一样的过程这两者有什么不同?

我们来看看下面这个图。



这里,两者的区别就在于 similarity也就是相似性的衡量上面。

在基于内容的推荐上,相似性是通过对item的一些标签。例如电影时什么类型的这些因素来进行推荐。(所以基于内容的推荐工作的重点就是在挖掘这些标签)

在基于item的协同过滤上,相似性是通过user-item矩阵获得的。这个时候,我们不需要提取一些具体的特征。我们只需要计算一下相似性,例如算一下两个向量的余弦值就可以得到两个item间的相似性。




2.3 基于model的协同过滤推荐


OK,到这里协同过滤的两种都介绍完毕了。下面就是另外一个 基于模型的协同过滤 (Model-Based CF)。

在介绍这个之前,我们先介绍一个概念, latent factor (潜在因子)

什么叫潜在因子?看看下面这两个矩阵。


这个矩阵是user latent factor matrix。这里很清晰可以看到每个用户对不同类别的评分。例如Wayne对Action(动作片)的喜爱程度(0.6)大于对犯罪片(0.1)的程度。


这个矩阵是item latent factor matrix。同样,我们可以清晰的看到,Movie A和Action相关的程度为0.9,和crime的相关程度为0.1。


可以看到,这两个矩阵非常的直观。一般我们把user latent factor matrix记为矩阵U,把item  latent factor matrix记为矩阵V。进行矩阵的乘法

那么,我们就可以得到user-item rating matrix (评分矩阵),一般记做矩阵R。


现实中,我们并没有latent factor matrix,我们只有user-item matrix 。它长这个样子,之前说过

我们要想得到latent factor matrix,我们可以通过矩阵分解(不是唯一的方法)的方法来进行。

进行矩阵分解的时候其实原理很简单。对下面目标进行优化:


最后,简单说一下model-based CF其实有两个必须要解决的问题。


上面的矩阵中,有很多空的地方,其实这就是数据缺失,专业点上叫稀疏性。


另外一个问题就是,假如出现了新用户Abby,我们没有关于他对任何Movie的评分,这个时候就属于 cold-start(冷启动)问题。

因此协同过滤的方法主要缺点就在于这两点上。有许多论文都在解决这两个问题,例如引入side information(辅助信息)。





原创粉丝点击