协同过滤算法简析

推荐系统必须有快速反应能力,众所周知,现在网络上充满着各种各样的信息,而且数量相当庞大,并且还在以相当惊人的速度增长,如何在海量的信息中快速的找到我们所需要的信息并快速的反馈给用户,是互联网推荐系统需要考虑的一个十分重要的问题。

  推荐系统中最核心和关键的部分就是使用的推荐算法,其在很大程度上决定了推荐系统性能的优劣。推荐算法大致可以分为以下几类:1、基于内容的推荐算法(content-based recommendation)2、协同过滤推荐算法(collaborative filtering recommendation)3、基于知识的推荐算法(knowledge-based recommendation)。

  传统的基于内容的过滤是直接分析内容进行推荐,推荐质量相对较差。基于协同过滤算法的推荐,针对用户的爱好进行分析,在用户群中找到具有相同爱好的用户,分析这些相同用户对相关特定信息的评价,预测该指定用户对此信息的爱好程序。另外考虑到与spark库中现有的基于movielens数据库做的ALS(Alternating Least Squares)算法,我们可以利用这个算法做基于spark streaming的流式协同过滤算法。下面分几个部分分别介绍协同过滤算法。

一、协同过滤算法的前提假设

  协同过滤的前提假设是:

1、所有用户的兴趣资料均来自用户对不同事物的评分。

2、不同的用户群是通过对不同的用户兴趣划分的。

3、所有用户对事物的评价将和与其具有相同兴趣的用户群中的用户评价相同。 

二、协同过滤算法的步骤

  经典的协同过滤推荐过程一般分为下面两步:首先,获取用户信息,在本文中指的是获得用户对某些物品的评分信息,如用户根据其喜好对部分物品的评分是1-5的整数,其中5分表示喜欢,1分表示不喜欢;其次,分析用户之间的相似性并预测目标用户对某一物品的喜好。如下图所示。

三、典型的协同过滤算法

  下面介绍两种典型的协同过滤算法。

1、 基于用户的协同过滤算法

  首先根据相似度计算出目标用户的邻居集合,然后用邻居用户评分的加权组合,排序后为目标用户作推荐。

2、 基于物品的协同过滤算法

  该算法基于这样一个假设:用户更倾向于选择与其喜欢的物品相关或相似的物品。算法会首先计算所有物品与目标物品的相似性,以获取目标物品的最近邻集合,然后根据目标用户对最近邻集合中的物品的评分信息来预测对其目标物品的评分情况,最后选择评分预测值最高的前n项作为结果推荐给用户。

  不论是基于用户还是基于物品的协同过滤算法都涉及到数据之间相似度的计算,相似度函数的设计必须满足以下三点要求:非负性、对称性和三角不等性。常用的相似度的计算方法主要由欧式距离法、皮尔逊相关系数法和夹角余弦相似度法。

  其中皮尔逊相关系数法的度量公式如下图所示

  上式中<x,y>表示向量x和向量y的内积,||x||表示向量x的第二范数,这样计算的话,不同特征之间的量级对皮尔逊系数影响不大。

  余弦相似度的度量公式如下图所示。

  另外在现实中的数据往往并不是像想象中的那样规整,比较常见的一种现象是在用户数据中会出现很多未评分的项,如下图所示。

  对于这样稀疏的矩阵,用基本的推荐算法效率很低,可以利用奇异值分解(SVD)算法将稀疏矩阵映射到另一个空间,取出物品的比较明显的几个特征来进行计算相似度可以较大的提高算法的速度。

四、协同过滤算法的评价指标

  推荐系统的评价方法往往采用以下两种评价指标之一:

1、 预测准确度MAE

  MAE计算了预测评分与真实评分之间的差值的平均值,其计算公式如下图所示。

  其中n是所有用户评分个数的总和,Pui是用户u对物品i的预测评分,而rui是真实的评分。

1、 均方根误差RMSE

  推荐系统预测比赛中最有名的Neflix大奖就将其作为评价推荐电影的评价指标。

  RMSE的计算公式如下式所示

  RMSE的值越小说明预测值越精确。