张柏林
摘要:数据爆炸时代,信息过载已成为社会性问题。基于物品的协同过滤算法设计并实现一款Python软件包ItemCollab,可有效解决这一问题。ItemCollab包括数据处理、物品推荐和质量评价3个模块。数据处理模块实现数据导入、稀疏度分析和训练集划分功能;物品推荐模块实现了目前主流的几种推荐算法,质量评价模块实现对推荐质量的图表展示功能。ItemCollab擴展性好,便于调用,可帮助用户构建自己的个性化推荐系统。
关键词:协同过滤;个性化推荐;Python;软件包;数据挖掘
0引言
互联网数据呈指数级爆炸式增长,信息过载问题随之而来。推荐系统是解决信息过载的有效途径之一,它依据用户兴趣从低价值密度的庞大数据中甄别出有效信息,从而提供个性化推荐服务。利用一类常见的推荐方法——基于物品的协同过滤,实现一个Python软件包,使系统开发者不必过多关注算法实现细节,仅通过接口调用就可方便简洁地构建自己的个性化推荐系统。
1数据处理模块
此模块主要有数据集导入、稀疏度分析和训练集测试集合划分3个主要功能,以ItemCollab内置的数据集MovieLens为例,运行效果如图1所示。
1.1数据导入
MovieLens(https://grouplens.org/)是明尼苏达大学GroupLens研究项目提供的具有多种规模的数据集。其中最小规模包含943个用户对1 682部影片的10万评分数据,评分区间在1~5分之间,ItemCollab选择这一规模数据作为内置示例数据集。
ItemCollab通过loadMovieLens(path)来导入内置数据集,同时对外提供接口loadDatasets(path),参数path指定数据所在路径,使用户导入CSV格式的自身数据集。
1.2稀疏度分析
数据稀疏度通常用式(1)进行计算。数据集的稀疏度可作为下一步选择合适的推荐算法的依据。
1.3训练集划分
对同一用户所评分的所有物品按原始数据中的顺序,前80%作为训练集,余下20%作为测试集。训练集和测试集的划分是质量评价模块功能实现的前提。
2物品推荐模块
此模块利用几种常见的基于物品的协同过滤算法来生成推荐,这些算法包括调整后的余弦相似度;基于Slope One的各种改进算法,如加权Slope One、双极Slope One以及SVDSlope One。
在实际应用中,系统的用户和资源分布情况不同,不同的推荐算法表现也不同。调整后的余弦相似度算法在评分结果中减去每个用户给出的平均评分,可以很好地处理不同用户的评分尺度问题。Lemire和Maclachlan提出的标准Slope One算法根据已有评分和两两物品评分偏差的平均值来预测用户对新物品的评分,在物品评分矩阵较为稠密时表现良好。其主要优点是简洁,易于实现且运算效率高,但没有考虑矩阵的稀疏性,推荐结果易受用户数量、用户偏好的影响。加权SlopeOne算法将用户数量作为权重,平衡了其他物品对目标物品的影响。双极Slope One算法考虑用户偏好问题,将用户对物品的厌恶程度也加入评价体系H。SVD Slope One算法通过矩阵奇异值分解,降低评分矩阵的稀疏度,从而得到更准确的推荐结果。
总的来说,这些算法各有利弊,在不同的数据集上有不同的性能和准确度表现,用户应根据数据处理模块得到的数据集性质,选择合适的算法。下面以调整后的余弦相似度为例,叙述该算法的数学理论、算法流程及运行效果。
2.1数学理论
调整后的余弦相似度引入了归一化的思想,它主要包括用于衡量两两物品间相似程度的相似度计算式(2),用于对评分结果数值变换的归一化式(3),以及用于预测用户对某一物品评分结果的评分预测式(4)。式中,s(ij)表示物品i和物品j的相似度;u表示所有同时对j和f进行过评分的用户组成的集合;R表示用户u对i的评分;R表示u对所有物品评分的平均值。在分子中,对于每个同时对2个物品评分的用户,将2个物品归一化评分结果相乘,然后对结果求和。在分母中,对i的归一化评分结果的平方求和,然后对j进行相同处理,最后求它们乘积的平方根。式中,MaxR,/Ming分别表示当前评分体系中的最大值和最小值;R表示某—物品的评分结果;NR表示R的归一化结果。R原本的取值范围为,经过式(3)处理后,R的归一化结果NR的取值范围变为[-1,1]。式中,p(u,i)表示预测出的用户u对物品i的评分;M表示u的所有评分物品中每个和j得分相似的某—物品,这里“相似”指的是在根据式(2)求出的相似度矩阵中存在M和i的一个得分值,sinilae(i)表示所有这些物品组成的集合。s表示i与M的相似度,可由式(2)计算出,NR表示u对M的归一化评分结果,由式(4)计算出。
2.2算法流程
输入:待预测用户u,目标物品i,评分结果数据集,当前评分体系最值;
输出:用户u对目标物品j的预测值p(u,i)。
①利用s(i,j)计算每2个物品之间的余弦相似度,得到物品的相似度矩阵;
②利用NR式对评分结果数据集进行归一化处理,得到物品的归一化评分矩阵;
③根据式(2)和式(3)得到的矩阵,利用p(ui)求出u对j的归一化预测评分;
④逆向使用NR式,将式(4)得到的评分转化为正常评分区间内的数据,即为最终结果。
2.3运行效果
假设—个评分结果数据集如表1所示,第一行表示userl对物品2,3,4,5的评分别是3,5,4,1,null表示userl没有对物品1评分。考察user1对物品1的预测评分,ItemCollab的运行效果如图2所示。
3质量评价模块
此模块实现对物品推荐模块所选算法的质量评价,将测试集视为未知,利用训练集的数据预测测试集中物品的评分,然后将预测评分集合与测试集实际评分集合按统计精度度量方法进行评价。用户可依据此模块的度量结果作为物品推荐模块算法选择的依据。
3.1度量方法
统计精度度量方法的平均绝对误差(Means AbsoluteError,MAE)由于更易于理解并且能够更直观地对推荐算法进行度量,因此选用这一指标作为度量标准。假设对于物品i,其预测评分为p,实际评分为q共n个物品,则MAE定义如式(5)。MAE值越小,推荐质量越高。
3.2运行效果
对软件包内置数据集MovieLens,将物品推荐模块提供的所有算法均进行一次质量评价,结果如图3所示,可以看出当数据集较为稀疏(SP=6.30%)时,SVD Slope One表现最好。
4结束语
协同过滤在推荐系统中最为常用,它的根本思想是根据相似的用户群体或物品群体来向目标用户推荐其可能感兴趣的物品资源。ItemCollab通过实现几种常用的基于物品的协同过滤算法,根据相似物品群体完成个性化推荐任务,帮助系统开发者构建自己的个性化推荐系统。未来ItemCollab还要继续扩展,将更多的推荐算法加入其中,从而适应不同类型的数据集,使推荐效果更好。