基于局部全局相似度的SVD的协同过滤算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于局部全局相似度的SVD的协同过滤算法
牛常勇;刘国枢
【摘要】针对目前协同过滤普存的稀疏和冷启动问题,提出基于局部全局相似度的奇异值分解的协同过滤算法.基于局部和全局相似度对原始“用户-条目”打分矩阵进行预处理,利用奇异值分解的方法处理该预测矩阵,用预测的结果获得活跃用户的
邻居,采用基于邻居的Pearson相关系数得到最终提供给用户的预测值.在公共数据集MovieLens100K上的实验结果表明,该算法能提高推荐精准度,一定程度上缓解
稀疏和冷启动问题.
【期刊名称】《计算机工程与设计》
【年(卷),期】2016(037)009
【总页数】5页(P2497-2501)
【关键词】协同过滤;推荐系统;局部和全局相似度;奇异值分解;皮尔逊相关系数
【作者】牛常勇;刘国枢
【作者单位】郑州大学信息工程学院,河南郑州450004;郑州大学信息工程学院,河
南郑州450004
【正文语种】中文
【中图分类】TP391.41
协同过滤是推荐系统的重要组成部分,互联网指数级的发展,使得协同过滤推荐系统在电子商务推荐中地位更加突出,在个性化[1,2]推荐中尤为明显,国外的如卓
越的Amazon,国内的豆瓣、天猫等[3,4]。
对于协同过滤的稀疏性和冷启动问题,
本文提出一种基于局部全局相似度的奇异值分解的协同过滤算法,分3步:①原
始打分矩阵的预处理,采用基于局部和全局相似度;②打分矩阵SVD处理,利用
奇异值分解,用其预测的结果获得活跃用户的邻居;③采用基于邻居的Pearson
相关系数获取最终的需要提供给用户的预测值。
公共数据集MovieLens100K上
的实验结果表明,该算法确实能提高推荐精准度,并在一定程度上缓解稀疏性和冷启动问题。
实际应用里,打分矩阵的稀疏源于用户只会给少部分物品打分[5,6]。
而要用相对
较少的有效打分得到准确预测,这就要求我们首先要对原始的打分矩阵进行预处理,包括局部和全局相似度的对原始打分矩阵进行预处理两部分。
通常我们会有这样一种体验,即使大部分的用户对某一物品的打分维持在平均值水平,总有那么些用户打分偏离这个均值,要么特高要么特低。
即:打分分布的“肥尾效应”。
然而,就是这一部分看似完全不同于均值的打分却能够提供有识别力的重要信息给我们[7,8],并且有这些能够提供有效的打分信息的用户组成的矩阵,
我们称为“打分员”。
为此,我们用拉普拉斯随机变量来模拟上述情况,其相对应的包含拉普拉斯随机变量的概率密度函数的定义如下
基于“打分员”矩阵,我们提出一种计算局部用户相似度的方法。
我们用这些能够提供有识别力信息的用户的打分作为输入。
比如“打分员”中的用户p的打分矩
阵为Sp定义如下
则用户局部相似度计算最初形式如下
考虑到基于少部分物品联合打分的情况下会产生相似度权值的偏离,因此我们需要一个相关系数来做调整,新的局部相似度测量的定义如下
表示的用户up和uq共同打分的物品数目,如果这个数目小于γ,这些用户间通
过该式计算的相似度就会出现“差错”,不可靠。
这个调整能够避免高估用户间的
相似度,当用户对几个物品都打相同分值时;并且这种调整不会产生有相似的整体偏好。
全局相似度的目标就是利用我们在局部相似度处理时得到的初步的活跃用户,并且找到其尽可能多的邻居,即使该用户有很少的直接邻居。
为了获得这些信息,我们首先构建用户图G(U,E),图的节点是是ui∈U,利用局部相似度处理的结果作为每一条边的权值,其构造如下
然后,我们利用两个用户间在用户图中的最大最小距离来测算这两个用户间的全局相似度。
在全局相似度计算前,先要明确一个概念——最大最小距离。
最小跳距离(经过的用户最少)定义如下
任意两个用户间最小跳距离中的最大的距离称作是两个节点间的最大距离,其定义如下
于是,相应的路径称作最大最小路径[9]。
由此,可引出两个用户间全局相似度算法定义如下
同时考虑局部和全局相似度时,可以运用如下的结构调整。
如预测一个活跃用户ua关于某一物品的打分,可以找到其k个最近的邻居[10-12],这不仅包括k个局部最近的邻居(ua)),还包括k个最近的全局的最近邻居(ua))。
接着,就用这两个“近邻”来预测用户的打分,如下定义
参数α由预测对二者的依赖程度决定,可通过完全交叉验证取得。
α=0,预测完全依赖前者;α=1预测完全依赖后者。
对于α的确定取决于交叉验证,其所需的两样本集要大于整体的50%,而这两个样本集还得一定是均匀抽取,以防样本集间出现偏差,这一点要保证做到。
而随机抽取是常规处理,但此做法对交叉验证来说不好之处在于一次一次的重新抽取样本仅仅是为了达到好的结果可能会出现“人为的数据”,有造数据的嫌疑。
而要克服这一点,引入第二步SVD来处理就有了必要,因为SVD是用正交阵且求逆阵很快,能够保证误差在一定范围内。
因此,通过上面的局部和全局相似度可以对原始的打分矩阵做预处理,得到一个新的打分矩阵,作为下一步算法的输入,利用奇异值分解方法对新产生的打分矩阵再处理,用其预测结果来获得新活跃用户的邻居。
第一步的对原始打分矩阵的预处理的过程就是相当于对一个原始打分矩阵的补全过程,这正好弥补了传统的奇异值分解(SVD)的缺点。
通常,推荐系统的评分矩阵是很稀疏的,90%以上的元素是缺失的[13,14]。
早期
进行SVD的一个致命缺点:必须要用一个简单的方法(比如缺省值全补为零等)来
补全该打分矩阵。
第一步的对原始打分矩阵的预处理,就是对原始矩阵的有效的补全过程。
我们可以放心的来用SVD的方法来处理。
图1很好地显示一个SVD矩阵分解实例。
假定物品1和4、物品2和3打分相似;用户4和其它用户差异比较大。
要预测一个新用户Alice对某一物品打分时,先要明确Alice在二维空间可能位置,然后将Alice的打分向量乘以U的两列子集和两列奇异值矩阵∑的逆,其数据点可计算得到。
要预测Alice的评分,图1可知,用户1和2是最好预测依据,而且不同的相似
度值计算方法和补全打分矩阵的策略都可改进预测结果。
接下来详解奇异值分解。
通过第一步对原始打分矩阵的预处理,得到补全的打分矩阵Rnormal。
接着,用SVD把Rnormal分解,处理方式如下
在潜语义分析中,低阶近似允许矩阵做如下的变换处理:由高维变换为差异度相对来说比较小的低维。
把可表示为Rnormal 特征值U的前r个列向量,称为Rnormal的左奇异值;同理,可表示Rnormal 特征值的V的前r个行向量,称为Rnormal的右奇异值。
如果我们只关注这r个非零的奇异值,SVD(Rnormal)处理的矩阵U、S、V有效的维数将变为m×r,r×r,r×n。
通过保持k≤r(S的秩)个最大的奇异值,舍去其余的,不仅能降维,还能获得在补
全矩阵中存在的,但在原始矩阵中没有被发现的潜在的关系,有这些结果组成的新的对角阵,记为。
同样,矩阵U、V也可以这样来处理得到Uk、Vk,具体操作:剔除U中r-k列,剔除V中r-k行。
由此,新的Rnormal将生成,其SVD处理的
定义如下
利用SVD在我们设计的协同过滤推荐系统中,当用SVD处理完补全矩阵后,得
到U、S、V。
用m×k矩阵表达用户间的一对多关系,用n×k的V表达物品矩阵。
由此,可用式(14)计算每个活跃用户a对某一物品i上的预测打分,从而获取到一个新的补全的打分矩阵。
a是用户a在第一步补全的打分矩阵上的打分均值
在第二步的得到无缺失值的评分矩阵后,用户up、uq的相似度可以用推荐系统
中通用的皮尔逊相关系数来计算,其公式如下定义
公式中各符号意义同上。
本实验使用MovieLens100K数据集,源自美Minnesota大学GroupLens项目组,其包括10 000多条打分,943用户和1682部电影,每个用户打分电影至少
20部[15]。
为使算法更好执行,数据集要做如下分配:每次都随机的抽取一个500用户,并
且每次,在拆分为300用户训练集,200用户测试集;拆分为200用户训练集,300用户测试集;拆分为100用户训练集,400用户测试集。
这3个随机抽取的
数据集分别称为MoLe300,MoLe200,MoLe100。
由于涉及到活跃用户,根据不同的数据集,我们抽取不同的活跃用户,依次抽取5个、10个、20个,记为
G5、G10、G20。
因此,我们可以有9个不同的配置的数据集,依次为:
ML300G5,ML300G10,ML300G20;ML200G5,ML200G10,ML200G20;ML100G5,ML100G10,ML100G20。
评判标准为通用的平均绝对值误差(the mean absolute error,MAE),其值越小,准确度越高,定义如下
我们作为比较的对象是:传统仅使用SVD处理,记为SVD;皮尔逊相关系数PCC。
为了便于比较,我们的算法记为LG.S.P。
在这9个不同配置的实验数据集上的实
验结果,如图2所示。
由图2的显示结果可以看出:随着MAE数值的不断不变化,从整体上来观察,在相同的数据集上,无论是ML100、ML200还是ML300,不同的算法,最直观的
显示,我们的算法的MAE数据值更低,随着活跃用户的增加,MAE数值越低,
表明我们的数据结果更为精确。
同时,仅仅从ML100G5,ML100G10,ML100G20这3组我们得到的实验结果
的MAE值的变化来看,在训练数据集比较小时,不同的算法实验结果比较接近,但我们的算法结果的MAE值只是相对较低,随着训练数据集的变大,由
ML300G5,ML300G10,ML300G20这3组实验结果显示,活跃用户的增多,MAE值变小,这意味着准确度的差异性就比较就明显了。
有3个数据节点值得关注,即我们算法本身的比较,MoLe100经MoLe200到MoLe300,单从G20来看,中间MAE值出现了一次由低到高的再降低的起伏的过程(图3不同数据集上算法实现的结果散点图比较,值为0.78的附近的折线可以看出),这点儿的反常出现值得关注。
最优的点出现在MoLe300的G20,此时的
实验数据值,准确率最高。
表1给出本算法最好的3组数据的准确度。
本文提出一种基于局部和全局相似度的奇异值分解的协同过滤算法,实验结果表明其可以提高推荐准确度。
通过局部和全局相似度的对原始打分矩阵的预处理,获得初步的补全矩阵,初步缓解矩阵稀疏,经过SVD在处理的过程,活跃用户被发掘
出来,紧接着我们获得新用户的打分,二者都有了,则“冷启动”问题得以部分解决。
需要指出本算法的一个不足就是算法跑的时间比较长,获得的准确率才得到保证,下一步就是考虑引入并行操作来解决。