基于SVD的协同过滤推荐算法研究
2019-09-24黄丽
黄丽
摘要:目前市面上大多数协同过滤推荐系统普遍具有显著的缺陷,比如冷启动、数据稀疏性等问题。该文在协同过滤推荐算法的研究基础上,对协同过滤推荐算法进行了优化,并设计了基于SVD的协同过滤推荐算法。经过系统检验,该算法能有效地改善传统协同过滤推荐算法稀疏性的缺陷,提升了推荐精度和推荐效率,对提升用户体验度有较大帮助。
关键词: 协同过滤;SVD;推荐算法
中图分类号:TP3 文献标识码:A
文章编号:1009-3044(2019)21-0009-02
开放科学(资源服务)标识码(OSID):
Abstract: At present, most collaborative filtering recommendation systems on the market generally have significant shortcomings, such as cold start, data sparseness and so on. Based on the research of collaborative filtering recommendation algorithm, this paper optimizes the collaborative filtering recommendation algorithm, and designs a collaborative filtering recommendation algorithm based on SVD.The system test shows that the algorithm can effectively improve the sparsity of the traditional collaborative filtering recommendation algorithm, improve the recommendation accuracy and efficiency, and help to improve user experience.
Key words: collaborative filtering; SVD; recommendation algorithm
隨着互联网应用越来越多,个性化推荐系统不断得到应用和发展,主要应用于电子商务网站、各类搜索平台、新闻客户端及电子邮件系统等领域。在个性化推荐方法当中,协同过滤推荐方案是较为优异的,但是其具有数据稀疏性与冷启动等缺陷,而SVD矩阵分解技术能够有效缓解稀疏性的问题。通过SVD处理后,推荐精确度能够得到进一步的提升,更加符合用户的个性化需求。基于SVD的协同过滤算法有效地结合了协同过滤算法的优点和SVD的优势,使得传统算法的缺陷得到有效克服。
1 常用的信息推荐方法
个性化信息推荐的本质是信息过滤,从动态变化的信息中筛选出满足用户需求的个性化信息。信息过滤主要是为用户推送感兴趣的信息,并提高信息推送的实时性和精准性。目前的推荐算法取得了一定的研究成果,主要包括三类:基于内容的信息推荐、基于关联规则的信息推荐和基于协同过滤的信息推荐[1]。
(1)基于内容的推荐算法
基于内容的推荐从文档特征过滤技术发展而来,是根据用户特征属性和项目内容特征的相关性比较,预测用户可能感兴趣的内容,并将这部分内容推荐给用户[2]。
(2)基于关联规则的推荐算法
关联规则推荐是从用户出发,找到用户对应的多个兴趣组,而每一个项目关联的就是一个兴趣组,然后通过规则关联到兴趣组推荐给用户。
(3)协同过滤推荐
协同过滤推荐算法是目前广泛使用的个性化推荐算法,由最近邻技术发展而来的,通过用户的历史数据评估用户,以确定与用户最相似的用户对某商品的评价,以此来预测用户对该商品的喜好程度,从而进行推荐动作[4]。基于协同过滤的推荐方法不需要考虑对象的特征属性,能够处理非结构化的复杂数据,并能为用户提供新颖的推荐结果。但该算法存在数据稀疏性、可扩展性和冷启动问题,而在线推荐系统一般是基于较为庞大的用户群与项目数,因此,使用这类算法计算相似度将会导致系统推荐效率低下。
2 基于SVD的协同过滤算法优化
奇异值分解(Singular Value Decomposition,SVD)[3]是信息检索过程中提取信息的重要方法。和以上信息推荐方法不同之处在于,基于SVD推荐方法是在用户不知情且不需要用户主动配合的条件下,通过机器自动挖掘用户和项目的潜在特征。推荐系统不需要计算用户和项目间的相似度,而是通过技术手段提取用户浏览日志,将用户的行为偏好数据收集起来,分析用户潜在未被发现的兴趣。当用户和项目的潜在特征挖掘完成后,每个用户与项目都可以看作是相同特征空间上的向量。预测用户是否对某项目感兴趣,直接可以计算两个向量的点积,作为用户对项目的评分预测[5]。利用SVD能够用小得多的数据集来表示原始数据集,这样可以去除噪声和冗余信息,在信息提取时节省大量的空间。基于这个优势,将SVD应用到推荐系统中提取相关特征,能有效避免数据稀缺性、冷启动以及拓展性方面问题,使推荐效率得到进一步提升。
(1)基于SVD的推荐优化
假设矩阵A代表用户和资源关系,通过SVD矩阵分解,A=TSD,则[R0=T0S0D0,S0=diag(a1,...,ar)],其中,T0和D0是m×n以及r×n的正交矩阵,r是矩阵R0的轶,S0是r×r的对角矩阵。
输入:矩阵R0
输出:矩阵T,S,D
步骤1:R0通过SVD,得到T1,S1,D1;
步骤2:简化S1,把对角线内比1小的值都替换成0,把对应整体为0的列与行删掉,从而取维数是S的对角矩阵;
步骤3:基于S,简化T1,D1,继而取得T,D,则有R=TSD,并且R≈R0;
步骤4:计算S平方根取得[S12];在计算T,D取得[TS12,S12D]。
通过上述的算法能够构成准确度高的最近邻居以及对应的top-N推荐集;相应的项矩阵是[S12D],其规模是S×N。
(2)协同过滤推荐算法优化
通过上述矩阵简化,算法在查找相似用户与项目方面的效率更高,但是简化矩阵过后的用户量就会变得更加稀缺。基于这样的状况,在协同过滤算法基础上加入了KNN与RkNN,解决了矩阵稀缺以及相似用户寻找困难等问题。
赋予数据集S,D(p,q)是p,q两点间的距离,计算RkNN的值,
输入:基于用户的评分矩阵A(m,n),项目j,用户i
输出:i在j的预测评分
步骤1: 在A(m,n)内计算用户i和另外用户的相似程度,加入距离矩阵D;
步骤2:用户i,基于距离矩阵D,寻找到i相近的序列,取得最近邻列表KNN;
步骤3:距离矩阵D进行扫描,用户i找到最近邻序列,取得最近邻列表RkNN;
步骤4:最近邻-相似性列表KNN与RkNN当中分别取前K个项;
步骤5:基于推荐产生式,计算用户i在项目j当中的预测评分P。
(3)基于SVD的协同过滤推荐算法
步骤1:计算[TS12(m,k)]与[S12D(k,n)],设为A、B,其中[TS12(m,k)]与[S12D(k,n)]是项目相关矩阵;
步骤2:在[A(m,k)],[B(k,n)]中计算[DA],[DB]并计算用户相似度,其中[DA],[DB]是用户距离矩阵;
步骤3:i,在[DB]里找到i的kNN以及RkNN,计算这部分用户所浏览过的项目集,然后从这些项目集当中删除被i浏览过的项目集,从而得到[Su],其中i是用户,[Su]是项目集。
步骤4:采用KNN与RKNN预估[Su]当中的[Pu],取得[Su];
步骤5:基于[DB]重复步骤4;
步骤6:基于KNN与RKNN来预测[Sp]的[Pp],取得[Sp],其中[Sp]是项目推荐集,[Pp]是评分;
步骤7:[Sp]与[Su]依照预测分的顺序规则排列,取得[Sco],其中[Sco]是协同推荐集;
步骤8:[SN]利用[Sco]执行基于内容的推荐,取得[Sc],其中[SN]是浏览量过少的用户或者是新项目集,[Sc]是内容推荐集;
步骤9;[Sco]与[Sc]合并,取得S,其中S是最终输出的推荐集。
3 系统检验
通过Lucene平台构建的个性化推荐引擎,选用MovieLens Data Sets数据集分别对协同过滤算法、优化后的协同过滤算法以及基于SVD的协同过滤混合算法进行了检验。在评价标准方面选用了MAE平均绝对偏差,该值越小就代表推荐的效果越好,MAE计算公式为:[MAE=i=1Npi-qiN],其中[pi]是评测分数,[qi]是用户的实际评分。通过实验,结果如下:
通过选用6040个用户对3900部电影所产生的1000000条评价记录的数据进行检验的结果表明,协同过滤算法数据的稀释度高达95.8%,优化后的协同过滤算法为93.2%,而通过本文设计的基于SVD的协同过滤混合推荐算法将稀释度降到了90.7%,可以提升预测的准确度,也使得推荐的准确性上升。
参考文献:
[1] 彭菲菲,钱旭.基于用户关注度的个性化新闻推荐系统[J].计算机应用研究,2012,29(3):1005~1007.
[2] 刘辉,郭梦梦,潘伟强.个性化推荐系统综述[J].常州大学学报(自然科学版), 2017,29(3):51-59.
[3] 张俊杰.基于用户兴趣模型的推荐算法及系统实现[D].上海大学, 2014.
[4] 陶俊,张宁.基于用户兴趣分类的协同过滤推荐算法[J].计算机系统应用, 2011,20(5):55-59.
[5] 韦素云,业宁.基于项目类别和兴趣度的协同过滤推荐算法[J].南京大學学报(自然科学), 2013,49(2):142~148.
【通联编辑:代影】