论文学习:推荐系统中协同过滤算法研究

一.概要

本文内容主要分为五章, 第一章主要介绍了推荐系统中一些比较重要和关键的背景知识;第二章讨论了推荐系统的基本概念、基础理论,对主要算法进行了介绍分析,给出了对推荐系统进行评价的主要指标和使用的数据集;第三章介绍了一种基于评分差值相似度的协同过滤算法,详细阐述了用户评分差值相似度的原理以及计算方法,提高了算法的推荐精度;第四章详细分析稀疏性问题产生的原因、影响以及现有的解决方案,提出了一种矩阵填充算法,详细介绍了这种方法的理论与实现方法;第五章进行了展望和总结。

二.推荐系统介绍

1.推荐系统概述

信息技术的飞速发展加快了信息的创建和传播速度,使人们能够更加自由的进行知识的分享和交流,但是海量信息的存在也产生了不可忽视的负面影响--信息过载。随后产生了信息检索和信息过滤技术来缓解信息过载的问题,之后再随着发展,推荐系统应运而生。
推荐系统以信息检索和信息过滤技术为依托,将原来用户主动检索和过滤的 方式转变为用户被动接受符合个性需求的更人性化的方式,智能的为用户主动推 荐感兴趣的资源;它通过已有的数据模型找出与目标用户兴趣爱好最接近的用户群,然后“征求这些用户的意见”进行未评价项目的评分预测;它的主要工作就是把用户项目评分矩阵作为输入,然后寻找一个最佳的效用函数产生比较好的输出;不同的效用函数,代表了不同算法。在近 20 年的发展过程中,产生了许多优秀的算法,并渐渐形成了不同的算法门类,大致可以分为如下图所示的几类:

推荐算法分类

每种算法的简介在此不再赘述,可点原文链接参考学习。

2.协同过滤推荐算法

数据表示
首先要获得用户的偏好信息,其中显示类型的信息有评分、投票、转发、评论等,隐示类型的信息有购买、页面停留时间、浏览等;但是初始采集的用户偏好数据存在一些问题,因此,针对初步获得的用户行为数据存在着噪声和衡量标准不统一的问题,需要先进行噪声过滤和归一化处理;通过数据预处理后,就可以将上面的评分数据表转化为一张二维矩阵,这张 矩阵中有两个维度,一个是用户,一个是项目,构成一个用户项目评分矩阵。
基于内存的协同过滤算法
该算法首先以用户项目评分矩阵作为输入,以相似用户有相似行为,或者用户对相 似项目的评分都相似的思想作为出发点,然后根据具体使用的算法,从用户项目评分矩阵 R 中提取相应的向量,接着以提取出的向量为计算基础,运用相关的相似度计算方法寻找用户间或者项目间的近似关系,并通过群体智慧进行评分值预测,推荐预测评分值较高的前 N 个项目给用户。
按照计算相似度时目标的不同,可以将这种算法分为两种,一种是基于用户 的算法(User-based),另一种是基于项目的算法(Item-based)。
(1)基于用户的协同过滤算法
该算法的基本思想是相似用户具有相似的爱好,计算的是用户间的相似关系。具体步骤如下:
1)相似性关系的计算:在协同过滤算法中,一般采用评分相似度作为衡量标准,其中余弦相似 度、Pearson 相似度和 Jaccard 相似度是最为常用的计算方法。
2)最近邻查找:通过第一步相似度的计算,我们得到了用户间相互联系和比较的一个度量值,现在需要根据这个度量值进行最近邻居的选择。通常有两种方法,一种是 k 近邻法,一种是阈值法。
k 近邻法以目标用户为中心,将目标用户与其他用户的相似度转换为距离,按 照距离的大小,找出与目标用户距离最接近的 k 个用户作为最近邻居;但它忽略了相似度值的具体大小,这会造成一些并不太相似的用户也被选择作为邻居。
阈值法则对 k 近邻法的缺陷进行了回避,这种方法不强制设置最近邻选取的个数,而是设置一个取值范围 r,所有距离小于 r 的用户都作为最近邻居,但有时候会导致最近邻个数偏少,合理性不足。
3)产生推荐:表示用户 u 对项目 i 的预测评分,为真实评分值,则的计算公式如下所示:

其中为用户 u 和 v 的相似度,和为用户u和v的平均评分值。上式中加入了用户的平均评分值,可以减少由于评分标准不同而带来的误差。
通过上式的计算,我们可以获得一个集合,这个集合由目标用户未评价的项 目组成,每个项目都被赋予了一个代表目标用户对项目喜好的预测评分值。通过在这个集合中使用相关的排序算法,我们可以得到根据预测评分值排序的集合,并推荐前 k 个项目给用户,从而完成推荐过程。
(2)基于项目的协同过滤算法
该算法的基本思想是用户对相似项目的评分是相似的,这种算法计算的则是项目间的相似关系。具体可分为三个步骤:
1)首先以评分矩阵 R 作为基础数据,根据具体应用选择合适的方法计算目标项目和用户已评分项目间的相似度;
2) 根据第一步中计算出来的相似度进行项目的排序,选择相似度比较高的 前 K 个项目作为目标项目的最近邻,使用加权的方法计算预测评分;
3) 根据预测评分值的大小,选择较大的 N 个项目推荐给用户。
上述两种算法的过程基本相同,但, User-based 算法向用户推荐所在兴趣小组中的热点信息,更注重社会化, 而 Item-based 算法的重点则是放在用户本身的行为信息上,更注重个性化;并且两者计算的复杂度和推荐的多样性都有不同。
基于模型的协同过滤算法
虽然基于内存的协同过滤算法思路清晰、实现简单、效果好,但是在面对指 数级增长的用户和项目所带来的数据稀疏性问题时,算法性能面临巨大的挑战。 基于模型的协同过滤算法的出现缓解了这一问题,其中矩阵分解模型和潜语义模型是推荐系统中应用较多且相对较为优秀的技术。
(1)矩阵分解模型(SVD)
SVD模型如下式所示:这里,假设是一个 m×n 的矩阵,经过上式分解后将产生三个矩阵,其中有 两个正交矩阵,为和,它们的维度分别为 m×m 和 n×n,另一个分解出来矩阵则是一个 m×n 的特殊矩阵,该矩阵除了对角线上的元素不为 0 以外,其余的元素全部为 0,我们称之为对角线矩阵。在的对角线上的元素整体成规律排列, 即由上至下递减,且减小的特别的快,我们把这些对角线上的值称为的奇异值。
接着我们构造一个新的矩阵 ,这个矩阵是将的第 k+1 行到第 m 行设为 0, 即取中最大的 k 个奇异值构成一个新的矩阵,通过这种方法可以实现矩阵的降维,公式如下:通过上式,我们就得到了一个特殊的矩阵,该矩阵具有这样一个性质,即 它是在所有秩等于 k 的矩阵中与初始矩阵最近似的一个。用户 u 对 i 的预测评分值就是。
SVD 算法虽然在面对稀疏性方面的表现优于基于内容的算法,但是该算法也存在一些缺点。首先,k 值的选择没有固定的标准,难以确定;其 次,SVD 算法计算复杂度很高。同时,SVD 算法本身有一些无法避免的缺陷,即对分解的矩阵维度有一定的要求,如果分解的维度过大,会造成时间的巨大消耗,效率低下。
(2)潜语义模型 LFM
LFM 方法避免了 SVD 方法的一些缺点, 将用户项目评分矩阵分解为“用户-隐类”和“隐类-项目”矩阵,使用隐含的特征 值来联系用户和项目,如下式所示:其中 c 表示隐类的个数,需要在对原始评分矩阵学习之前通过人工设定,可 以将矩阵看做用户对隐类的评分度,将视为项目与隐类的近似程度矩阵。 通过这种方式,可以得到一个新的评分矩阵,并且矩阵中所有空缺的评分都 在学习的过程中被填充,这些填充值就是就是该模型给出的预测评分值。由此, 可以得出如下评分预测的公式:使用 LFM 后,用户和项目会根据给出的类别个数自动进行聚类,其分类粒度的大小取决于 LFM 矩阵分解的设置,属于可控粒度,分类数越大,粒度越细。接下来,为了获得矩阵和,可以通过机器学习算法,在训练集中最优化推荐系统的平均均方根误差(RMSE)值来进行参数的学习,损失函数定义为:
其中引入为了防止过度拟合,可以通过多次实验验证得到。
该算法具有更高的精度和更好的可扩展性,但其计算量较大。

3.协同过滤算法面临的挑战

协同过滤算法主要面临的挑战有:稀疏性和精确度问题;冷启动问题即就是数据极度稀疏的问题;以及可扩展性问题,即数量规模不断爆炸性增长带来的问题。

4.评价标准

评价方法一般有两种,一种是采用用户在线反馈的方式, 即在线评价方案,还有一种是采用离线的方式。
推荐准确度是推荐系统比较重要的指标之一,也是用户较为关注的因素,直接对用户的忠诚度产生了影响,因此也是各种算法好坏比较的一个重要衡量标准, 其中常用的有评分准确度、覆盖率、准确率和召回率、多样性等。 (具体可参考原文链接)

三.基于评分差值相似度的协同过滤算法

1.现有的相似度评价标准

(1)标准的余弦相似度
余弦相似度从两个向量在空间几何中方 向上的差异进行考虑,通过判断两者是否指向相同的方向来度量相似度,是两个向量夹角的余弦值。
(2)Pearson 相似度
Pearson 相似度描述了两个向量在一条线上的线性关系,。对于 任意两个用户,我们用 u 和 v 表示,令和 分别表示 u 和 v 中存在评分值的项目集合,和分别表示 u 和 v 对项目 i 的评分值,和分别表示 u 和 v 的 平均评分值,则 Pearson 相似度的计算方法如下式:

(3)修正的余弦相似度
如果在计算相似度的时候将每个用户评分标准的差异性考虑进来,可以更加准确的反应用户 或者项目间的相似性。由此,可得如下修正后的公式:
(4)Jaccard 相似度
Jaccard 相似度是用来衡量两个集合相似度的一种指标,用两个集合中共同包 含的元素个数除以两个集合全部元素的个数作为相似度,如下式:

2.基于用户评分差值相似度的算法

该算法从用户之间对项目的评分关系出发,将任意两个用户间的共同评分 项目又进行了详细的划分,分为评分相同的项目集合和评分不同的项目集合两个 部分,将用户间的评分差值融入这两种集合的相似度计算,给出了一种用户评分差值相似度计算方法,并在此基础上提出了基于用户评分差值相似度的协同过滤算法。
(1)用户间评分项目的分类
任意两个用户 u 和 v 的评分项目可以分为四类:
① 对用户间共同评分且评分值相同的项目记为;
② 对用户间共同评分且评分值不相同的项目记为 ;
③ 对用户间都没有评分的项目记为 ;
④对用户间没有同时给出评分的项目记为。
本算法只考虑用户在集合和集合中项目的相似度关系。
(2)评分不同项对相似度的贡献度
为了衡量用户的评分差异,我们首先计算用户 u 和用户 v 在项目集合上的评分差值向量,以用户间在同一项目上的评分之差的绝对值作为其元素,如下式:

为了衡量所有项目表现出来的平均差异水平,我们首先使用曼哈顿距离公式计算用户在评分不同的项目中多维度的空间差距,然后计算曼哈顿距离的平均值作为用户在评分不同的项目上体现出来的平均差异水平,最后使用平均值的倒数作为相似度的值,由此可以得到相似度矩阵 Ds:
其中对角线表示相同用户的相似度,显然其值为 1。D_sim(u,v)表示用户 u 和 用户 v 的相似度,为曼哈顿距离平均值的倒数,计算式如下:
其中,表示用户 u 和 v 共同评分的项目集合中评分值不同的项目的个数,Manhattan(u,v)为根据用户 u 和用户 v 的评分差值向量计算出来的曼哈顿距离,公式如下:
为了反映评分不同的项目中,相似度的值对整体相似度的贡献度,我们引入一个权值矩阵 W,如下式:
其中,为用户 u 和用户 v 在评分值不同的项目集合中反映出的相似度对整体相似度的影响,使用用户 u 和用户 v 中评分不同的项目的个数与两个用户参与评分项目的总个数的比值表示:
最终用户间在评分值不同的项目中体现出的相似度对整体相似度的贡献度可 以由以下公式获得:
根据上式可以得到推荐系统中,任意两个用户在评分不同的项目中的相似度 贡献度矩阵:
通过引入权值,矩阵中的元素就能够从评分不同项目的集合的角度,反映 其对整体相似度的贡献度。
(3)评分相同项对相似度的贡献度
步骤分析同上,最后可得用户在评分相同的项目中反映出的相似度贡献度,如下式所示:

(4)评分差值相似度
这里我们使用加权和的方法进行计算,如下式:
μ 为调节权重,需要根据多次的实验取得。
(5)产生推荐
得到用户间的相似度之后,就可以通过评分预测函数,根据目标用户的最近 邻对项目的评分值,预测目标用户对这些项目的评分值,公式如下:
其中,和为用户 u 和 v 的平均评分值,neighbor(u)为用户 u 的最近邻集 合,为用户 v 对项目 i 的评分值,DC_sim(u,v)为用户 u 和 v 根据用户评分差值相似度计算出的相似度。
预测的目标用户对项目的评分具有一定的准确性,将预测评分值较高的 N 个 项目推荐给目标用户,就完成了推荐系统的推荐过程。

四.一种改进稀疏性的协同过滤算法

1.稀疏性问题

稀疏性的大小可以通过一个比例值来衡量,一般使用未被评分的信息量占总信息量的百分比来表示。稀疏性问题的成因主要有以下几种:一是用户评分行为的小范围化,二是数据量的疯狂扩张,三是推荐系统本身的悖论性。总之,稀疏性问题是长期存在的,需要研究人员更多的投入。

2.现有解决方案

针对推荐系统中日益严重的稀疏性问题,学者们提出了诸多解决方案,大致 可以分为以下几类:一是釆用填充方法降低评分矩阵的稀疏度,二是使用降维的方法降低稀疏度,三是引入机器学习、数据挖掘的方法,四是朴素贝叶斯方法。(具体方法简介可参考原文链接)

3.改进的协同过滤算法

(1)改进策略思想
本文提出一种结合用户评分差值相似度算法 DCF 和加权 Slope One 算法的改进算法,预测缺失评分的填充值。下面介绍 Slope One 算法:
该算法的思想简单,如果要计算用户 u 对项目 i 的预测评分,只需要计算同时对项目 i 和项目 j 打分的用户对这两个 项目评分的平均差值,然后使用平均差值与评分值进行线性相加,就可以计算出用户 u 对项目 i 的预测评分值。
上面介绍的是最基础的 Slope One 算法,由于两个项目间打分的用户数量不同,同时对两个项目打分的用户的数目越多,其评分的平均差值的权重应该越高, 为此,学者们提出了加权 Slope One 算法,其预测 u 对 i 的评分的公式如下:

其中 N 为对 x 和 i 同时给出评分的用户数,M 为对 z 和 i 同时给出评分的用户 数,R(x->i)为 N 个用户对 x 和 i 评分的平均差值,R(z->i)表示 M 个用户对 z 和 i 的评分的平均差值,Rx 和 Rz 分别表示用户 u 对 x 和 z 的评分值。
本文结合之间基于用户模型的改进算法 DCF 和加权 Slope One 算法,对未评分项目预测评分值,然后使用预测评分值对原来稀疏的评分矩阵进行数据填充,这样就可以在保证填充值保留个性化信息的同时,以较小的评分损失进行稀疏性的转化,将原始稀疏的矩阵变为较为稠密的矩阵。
(2)改进算法的步骤
算法可分为三个部分,第一个部分是对原始评分矩阵 R 中的缺失评分数据计算预测评分值,结合基于用户评分差值相似度的算法DCF和加权 Slope One 算法预测评分值;第二个部分是使用第一步的预测值进行缺失数据的填充,形成新的用户项目评分矩阵 R’;第三个部分则是在填充后的矩阵 R’上使用协同过滤算法进行推荐。
详细步骤如下:
① 使用基于用户评分差值的算法 DCF 计算预测评分值
预测填充值的计算公式如下:
其中 μ 取0.2是相似度计算较为精确;分别计算任意两个用户在原始评分矩阵 R 上的相似度,我们可以得到一 个相似度关系的集合,在 中相似度值最大的 k 个用户就是 目标用户 u 的最近邻集合 neighbor(u)。
② 使用加权 Slope One 算法预测评分值
基于原始用户项目评分矩阵 R,使用之前介绍的式中预测缺失数据的值 。
③ 计算综合预测评分值
在分别通过基于用户评分差值相似度的算法 DCF 和加权 Slope One 算法预测出评分值以后,我们使用加权平均值法计算最终的填充值,如下式:
上式的综合填充值结合了两种算法,融合了从不同角度计算的预测评分值, 进行了优势互补,使得预测值更加准确。
最后,通过使用填充值对矩阵中缺失的评分值进行填充,就完成了矩阵稀疏 性的转化,提高了矩阵的评分密度,得到新的用户项目评分矩阵 R’。
④ 根据新的用户项目评分矩阵 R’,使用协同过滤算法产生推荐。
在经过填充后,原始稀疏的用户评分矩阵已经变得稠密,且填充的值总体上较为准确。在新的评分矩阵 R’上使用基于向量计算相似度的方法,就缓解了向量元素值缺失造成精确度降低的问题,从而使得相似度的计算更加符合实际,最近邻的选取也更加合理,有效提高推荐质量。

五.总结

本文中介绍的内容整体不是很难,但介绍的十分详细,非常适合初学者学习,可以对推荐系统的发展过程有一个全面的了解,帮助我们更好的梳理和掌握学习内容。

你可能感兴趣的:(论文学习:推荐系统中协同过滤算法研究)