协同过滤算法改进实验及对比分析
2022-02-17张小雷
摘要:在协同过滤推荐算法中融入时间因素对其进行改进,为了验证改进后的算法能够把推荐的准确度给提高,使用Python编程语言,在电影数据集Movielens中的ml-lm数据集下进行实验,对比传统与改进算法之间的MAE值。文章介绍了实验的目的、评价指标、理论知识、过程和结果。通过实验的结果可以明显看出这种改进后的算法能够提高推荐的准确度。
关键词:协同过滤;推荐算法;改进;MAE;实验
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2022)35-0064-03
1概述
当用户面对海量的商品不知道该如何选择的时候,推荐系统能够很直接地把用户和商品给联系起来,把那些用户有意向购买的商品挖掘出来,对用户进行推荐[1]。在一个推荐系统中,最重要的就是推荐算法,其直接影响着对用户推荐的结果[2]。协同过滤推荐算法是一种用得非常多的推荐算法,其思想是先找出用户或者物品以往的数据信息,根据这些数据信息把与之相似的用户或者物品给找到,通过计算他们的相似度,来确定用户是否真的对此类东西有兴趣,就能够对他们做出推荐[3]。但是随着时间的推移用户的一些行为和习惯都会发生变化,所以在协同过滤推荐算法中融入时间因素对其进行改进[4]。为了验证这种改进的推荐算法能否提高推荐的准确度,在实验中与传统算法的准确度进行了比较,为提高推荐系统的推荐质量寻找新的方法。
2实验目的
比较传统的协同过滤算法与融入时间因素后的改进的协同过滤算法的推荐准确度,为提高推荐系统的推荐质量寻找新的方法。
3实验评价指标
为了比较算法的准确度,实验中采用平均绝对误差(MAE)作为准确度的评价指标 [5],公式为:
[MAE=imi=1m|yi-y'i|]
公式里,[yi]是实验选取的测试集里的真实的值,[y'i]是预测的值,[m]是实验中选取的样本的数量。实验结果中MAE越是小,就意味着其所预测的准确度就越是高。
4实验理论知识
4.1算法介绍
协同过滤推荐算法是一种用得非常多的推荐算法。有基于用户的协同过滤(UserCF)算法和基于物品的协同过滤(ItemCF)算法[6]。
在实际的推荐过程中,时间的变化是不能够忽视的因素,随着时间的变化,用户的购买行为和用户的购买习惯会发生一些变化[7]。把时间因素融入协同过滤算法中可以反映用户最近的购买行为和习惯[8],将算法进行改进后它的工作流程如图1所示:
4.2改进UserCF算法
在对UserCF算法改进中,主要在计算相似度时对算法进行了改进,UserCF算法中计算相似度的公式为:
[Wuv=N(u)∩N(v)N(u)∪N(v)]
在公式里面,[N(u)]與[N(v)]是用户[u]与[v]有行为的物品集。
改进后,增加时间衰减函数并惩罚热门商品[9]后,用户[u]与[v]的相似度公式为:
[Wuv=i∈N(u)∩N(v)1lg (1+N(i)f(|tui-tvi|)N(u)∪N(v)]
改进后构造出新的算法TF-UserCF算法。
4.3改进ItemCF算法
在对ItemCF算法改进中,主要在计算相似度时对算法进行了改进,ItemCF算法中计算相似度的公式为:
[Wuv=N(i)∩N(j)N(i)∪N(j)]
在公式里面,[N(i)]与[N(j)]是跟物品[i]与[j]产生交互的用户的集合。
改进后,增加时间衰减函数并降低活跃用户的权重[10],物品[i]与[j]的相似度公式为:
[Wij=u∈N(i)∩N(j)1lg (1+N(u)f(|tui-tuj|)N(i)∪N(j)]
改进后构造出新的算法TF-ItemCF算法。
5实验过程
5.1实验环境准备
在计算机的选择方面,使用联想台式机,具体配置为:Intel Core i5-3470 3.20GHz的CPU,8GB内存,64位Windows 10的操作系统。
在软件方面,使用的编程语言是python编程语言,数据库为MySQL数据库,在PyCharm中开发实现。
5.2实验数据准备
在这次的实验里面,以电影数据集Movielens中的ml-lm数据集来分析实验。分析该数据集,在PyCharm中运行Python代码查看数据集中的ratings.dat文件,结果如图2所示:
由图2可知,数据集中用户数量为6040个,电影的数量为3952部,总共的评分记录为1000209条,评分范围是1~5分。
在PyCharm中运行Python代码查看数据集中的movies.dat文件,结果如图3所示。
由图3可知,数据集中总共有18种类型的电影,各类型分布不均,最多的Drama占到25%,最少的Film-Noir只占到0.7%。
在实验开始前,要将数据集提前进行相应的处理,把数据集都拆分成80%的训练数据和20%的测试数据,拆分数据集代码为:
5.3实验步骤
做两组实验,比较传统算法与改进算法的MAE值。
第一组实验比较UserCF算法与改进后的TF-UserCF算法的MAE值。
首先在传统UserCF算法中增加时间衰减函数,构造出计算用户相似度的UserSimilarityBest函数,代码为:
然后把邻居的个数K值从5开始每次增加5,直到UserCF算法与改进后的TF-UserCF算法的MAE值趋于平稳,最终K值增加到40。比较这两种算法的MAE值,如图6所示:
第二组实验比较ItemCF算法与改进后的TF-ItemCF算法的MAE值。
首先在传统ItemCF算法中增加时间衰减函数,构造出计算物品相似度的ItemSimilarityBest函数,代码为:
然后把邻居的个数K值从5开始每次增加5,直到ItemCF算法与改进后的TF-ItemCF算法的MAE值趋于平稳,最终K值增加到40。比较这两种算法的MAE值,如图8所示:
5.4实验结果分析
通过上述两组实验可以看出,无论是传统的UserCF算法还是传统的ItemCF算法,改进后的算法在相同的K值下MAE值都比传统的要低。在对传统协同过滤算法中加入的时间因素进行了改进之后,可以提升算法的准确度。
6结束语
在传统的协同过滤推荐算法中加入了时间因素并对其加以改进,使用电影数据集Movielens中的ml-lm數据集进行实验来对比改进后算法和传统算法的准确度。通过实验研究,可以发现这种改进后的算法可以提高推荐的准确度。
在本次实验中只使用了一种数据集来做实验,在以后的实验研究中,为了使实验的结果更加准确,将尝试使用更多的数据集来做实验。
参考文献:
[1] 高长元,黄凯,王京,等.基于商品属性值和用户特征的协同过滤推荐算法[J].计算机工程与科学,2017,39(12):2333-2339.
[2] 陶志勇,崔新新.一种融合用户与项目属性的协同过滤算法的设计与实现[J].计算机应用与软件,2019,36(2):12-18,102.
[3] 张小雷,孙刚,彭余辉.融合时间因素的协同过滤图书推荐算法[J].阜阳职业技术学院学报,2021,32(2):51-54.
[4] 张小雷.基于协同过滤和隐语义模型的图书推荐算法研究与实现[D]. 阜阳:阜阳师范大学,2021.
[5] 纪佳琪,姜学东.深度协同过滤推荐模型研究[J].计算机应用与软件,2020,37(7):240-245.
[6] 刘景昊.基于协同过滤的推荐系统算法研究[J].中国电子商务,2013(6):157.
[7] 刘恒友.基于时间效应的推荐算法研究[D].哈尔滨:哈尔滨工业大学,2013.
[8] 高阳团.推荐系统开发实战[M].北京:电子工业出版社,2019.
[9] 彭余辉,张小雷,孙刚.基于内容和协同过滤加权融合的音乐推荐算法[J].安庆师范大学学报(自然科学版),2021,27(2):44-48,53.
[10] 兰艳,曹芳芳.面向电影推荐的时间加权协同过滤算法的研究[J].计算机科学,2017,44(4):295-301,322.
【通联编辑:王力】