一种基于用户的协同过滤推荐算法
2019-03-14张双庆
张双庆
摘要:文章首先介绍现存的基于用户的协同过滤推荐算法,分析算法存在的问题。然后在此基础上提出一种新的算法,新算法考察不同用户对相同物品评分的差值,以此度量用户与用户的相似度。由于新算法只关心不同用户对相同物品评分,因此既解决了数据稀疏导致的算法准确度下降问题,同时,又提升了算法效率。最后,利用MoiveLens数据集中的测试数据集对新算法和老算法进行对比,从不同的维度比较新老算法的优劣势。
关键词:推荐算法;协同过滤;数据稀疏;推荐效率;推荐精度
中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2019)01-0019-03
User-based Collaborative Filtering Recommendation Algorithm
ZHANG Shuang-qing
(Shanghai University, Shanghai 200444, China)
Abstract: The article first introduces the existing user-based collaborative filtering recommendation algorithm and analyzes the problems of the algorithm. Then, based on this, a new algorithm is proposed. The new algorithm examines the difference between the scores of different users on the same item, and measures the similarity between the user and the user. Since the new algorithm only cares about the scores of the same items by different users, it not only solves the problem of the accuracy of the algorithm caused by data sparseness, but also improves the efficiency of the algorithm. Finally, the new algorithm and the old algorithm are compared by using the test data set in the MoiveLens data set to compare the advantages and disadvantages of the old and new algorithms from different dimensions.
Key words:recommended algorithm; collaborative filtering; data sparse; recommended efficiency; recommended accuracy
1 引言
截至2018年6月,我国网民规模达8.02亿,互联网普及率为57.7%;我国手机网民规模达7.88亿,网民通过手机接入互联网的比例高达98.3%[1]。随着互联网特别是移动互联网的发展,数据爆炸式增长。但是,人类所能接受和处理的数据却没有显著增长,信息过载[2]已成为常态。目前解决信息过载的方式有两种,一种是搜索引擎,另一种就是推荐系统[3]。推荐系统对用户的历史信息等进行研究与挖掘,分析不同用户的喜好,预测用户对产品或信息的评分,从而推荐用户评分较高的产品给用户。好的推荐系统不仅能改善用户体验,还能提高服务效率。目前,推荐系统在电子商务、社交网络、音视频应用等领域大展身手,不少新型应用正是基于推荐系统建立起来的。
推荐系统中最重要的部分是推荐算法,它决定了推荐结果的好坏和系统性能的优劣,是推荐系统至关重要的部分。常用的推荐算法主要包括基于内容(content-based)推薦算法、协同过滤(collaborative filtering)推荐算法、基于人口统计学(demographic)推荐算法、基于知识(knowledge-based)推荐算法等[4]。协同过滤算法主要利用已有用户群过去的行为或者意见预测当前用户可能喜欢或者对那些物品感兴趣。此类算法在业界已经广泛应用,本文主要从以此类算法为研究对象。
在大数据时代,数据的稀疏性普遍存在于各个系统中。数据稀疏[5]会导致两个问题:推荐结果不准确和推荐算法效率变低。大量稀疏的数据不仅占用计算时间,且对推荐结果产生噪声干扰。显然,这些是我们不愿意看到的。
本文提出一种新的算法,新算法考察不同用户对相同物品评分的差值,以此度量用户与用户的相似度。由于新算法只关心不同用户对相同物品评分,因此既解决了数据稀疏导致的算法准确度下降问题,同时,又提升了算法效率。
2 基于用户协同过滤推荐算法与改进
协同推荐算法主要有两种,基于用户的最近邻推荐(user-based nearest neighbor recommendation)算法、基于物品的余弦相似度(cosine similarity)算法[6]。本文主要讨论基于用户的近邻推荐算法。
2.1 基于用户的最近邻推荐
表1显示了当前用户Amy与其他用户对物品的评分数据,评分范围为1-5分,用户给予物品评分为5则表示用户喜欢此物品,评分为1代表用户不喜欢此物品。在此表格中,推荐系统的任务是确定Amy是否喜欢她从来未见过的物品5(I5),为此,我们需要找到那些与Amy有着类似偏好的用户,然后用这组用户对物品5(I5)的评分来预测Amy是否喜欢此物品。
由公式1我们得知,用户a,b的相似度由用户a与用户b评论过的所有物品的分数决定。当物品数量急剧增加时,用户感兴趣的物品却增长缓慢,数据稀疏性问题开始显现。基于用户的最近邻推荐算法的效率和准确度下降。为此,我们提出了一种新的算法,以解决数据稀疏导致的算法效率与准确度下降问题。
2.2 一种基于用户评分差值的相似度算法
事实上,每个用户的评论数与物品量可能存在数十个数量级的差距。为此,我们采用了一种新的算法来解决这个问题,新算法主要考察两个用户共同评论过的物品,用户对相同物品评分的差值决定用户的相似度。新算法公式如下:
2.3 验证两种算法的优劣性
本实验选用MovieLens[8] 100K 数据集对算法进行训练和验证。数据集包括1000名用户对1700部电影的100000个评分。数据分为2部分,一部分是训练数据,另一部分是验证数据。通常使用平均绝对误差(MAE)和均方根误差(RMSE)来评估推荐算法的准确性。
其中,f(u,i)是推荐算法计算出的用户u对物品i的评分,rui是用户u对物品i的真实评分,Rtest是测试集。
本文使用Python语言实现算法并测试测试算法的准确性和效率。Python是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发[10]。以下是算法的实现伪代码:
def getSimilar(u1,u2):
u1M = u1评论的电影集合
u2M = u2评论的电影集合
u1u2M = u1评论的电影集合<E:\知网文件\电脑\电脑01-02\电脑01\1xs201901\Image\image29.png>u2评论的电影集合
u_uPower = 0
k=0.5 #参数K
for m in u1u2M:
u1mR = u1对电影m的评分
u2mR = u2对电影m的评分
u_uR = 1-abs(float(u1mR)-float(u2mR))/2
u_uPower += u_uR
u_uSim = u_uPower/abs(u_uPower)*(1-(1-k)**abs(u_uPower))
return u_uSim
实验结果数据如下:
由图1、图2可知,当邻居数量较少时,基于用户的邻域算法准确度与新算法准确度基本相同,但当数据量增大,邻居数量增多时,基于新算法的优势就体现了出来,新算法的误差小于基于近邻推荐算法。由于新算法只考察用户共同评论过的物品,所有当数据稀疏度增加时,算法耗时并未随之增加。在数据稀疏时,新算法的效率高于邻域算法。
3 结论
当k取不同值时,推荐算法给出的结果不尽相同。我们可以通过大量数据训练算法,找出对应最适合系统的k值,以求算法在精度方面达到系统的要求。总体来说,新算法在准确性和时效性方面有所提升。同时,也存在一些问题,如当邻居用户大量提升时,公式3、4中的<E:\知网文件\电脑\电脑01-02\电脑01\1xs201901\Image\image32.png>项会快速增加,导致用户相似度趋近于1。此时我们需要对<E:\知网文件\电脑\电脑01-02\电脑01\1xs201901\Image\image32.png>进行求导,以减小数据范围对推荐精度的影响。
参考文献:
[1] 中国互联网信息中心.第42次《中国互联网络发展状况统计报告》[EB/OL]. http://www.cnnic.net.cn/hlwfzyj/hlwxzbg/hlwtjbg/201808/t20180820_70488.htm.
[2] Landhuis E. Scientific literature: Information overload[J]. Nature, 2016, 535(7612):457-458.
[3] Wei J, He J, Chen K, et al. Collaborative Filtering and Deep Learning Based Recommendation System For Cold Start Items[J]. Expert Systems with Applications, 2017, 69:29-39.
[4] Ricci F, Rokach L, Shapira B, et al. Recommender Systems Handbook[M].Springer US, 2011.
[5] Shepperd M, Cartwright M. Predicting with sparse data[J]. 2001, 27(11):987-998.
[6] 弗朗西斯科·里奇,等,李艷民.推荐系统[M].机械工业出版社,2015.
[7] 王国霞, 刘贺平. 个性化推荐系统综述[J].计算机工程与应用,2012, 48(7):66-76.
[8] Harper F M, Konstan J A. The MovieLens Datasets: History and Context[M].ACM, 2015.
[9] 朱郁筱,吕琳媛.推荐系统评价指标综述[J].电子科技大学学报,2012, 41(2):163-175.
[10] 百度百科. Python(计算机程序设计语言)[EB/OL]. https://baike.baidu.com/item/Python/407313.