1、融入项目相关性的加权 Slope One 算法研究 冯勇 徐红艳 王嵘冰 郭浩 辽宁大学信息学院 摘 要: 在基于项目的协同过滤推荐算法中, Slope One 算法的应用较为广泛。但该算法在对项目相似度计算过程中没有考虑项目类型因素的影响, 导致类型不相关的项目参与到相似度计算中而影响推荐效果, 而且该算法在数据稀疏的情况下预测准确度不高。针对上述不足, 考虑使用项目相关性来考量项目间的关系, 提出了融入项目相关性的加权 Slope One 算法, 该算法从项目自身的所属类型和项目的评分数据两个方面来综合计算项目间的相似度关系, 并在此基础上增加了项目筛选策略, 达到了稳定评分差、获取局部较
2、为密集的项目评分矩阵的目的。最后将所提算法应用在 Movie Lens 数据集上与其它相近算法进行对比实验, 实验结果显示所提算法在明显提高了推荐准确度的同时也有效缓解了数据稀疏问题。关键词: 项目相关性; 加权 Slope one; 协同过滤推荐; 数据稀疏; 作者简介:冯勇 (1973) , 男, 辽宁沈阳人, 2007 年于东北大学管理科学与工程专业获博士学位, 目前为辽宁大学教授, 主要研究领域为数据挖掘, 个性化推荐.CCF 会员。作者简介:徐红艳 (1972) , 女, 辽宁丹东人, 1999 年于辽宁大学计算机软件与理论专业获硕士学位, 目前为辽宁大学副教授, 主要研究领域为 D
3、eepWeb, 个性化推荐.作者简介:王嵘冰 (1979) , 男, 辽宁沈阳人, 2015 年于辽宁大学企业管理专业获博士学位, 目前为辽宁大学讲师, 主要研究领域为数据挖掘, 云计算等.CCF 会员。作者简介:郭浩 (1992) , 男, 山西临汾人, 2017 年于辽宁大学计算机应用技术专业获硕士学位, 主要研究领域为数据挖掘, 个性化推荐。基金:国家自然科学基金Research on Weighted Slope One Algorithm Incorporating Item RelevanceFENG Yong XU Hongyan WANG Rongbing GUO Hao Co
4、llege of information, Liaoning University; Abstract: Slope one algorithm is a widely used item-based collaborative filtering recommendation algorithm. But the algorithm does not consider the impact of the item type factors in the process of calculation of the item similarity, leads to type irrelevan
5、t items involved in the similarity calculation which influence the effectiveness of the recommendation, and the prediction accuracy is not high in the case of sparse data. In order to solve these problems, consider use the item relevance to measure the relationships between items, and proposed a wei
6、ghted slope one algorithm incorporating the relevance of item. The algorithm synthetically calculates the similarity relationship between the items from two aspects: the type of the item itself and the scoring data of the item. On this basis, the items culling strategy is added, which achieves the g
7、oal of stable score difference and getting more intensive item scoring matrix. Finally, the proposed algorithm is applied in the Movie Lens data set. The experimental results show that the proposed algorithm not only improves the accuracy of recommendation, but also alleviates the data sparseness pr
8、oblem effectively.Keyword: Item relevance; Weighted slope one; Collaborative filtering recommendation; Data sparseness; 1 引言信息技术和网络互连的快速发展, 带来信息量的激增, 人们正步入信息过载的时代1。目前, 个性化推荐技术被业界认为是解决信息过载问题的首选方案, 它根据使用者的历史交互数据开展数据的分析与挖掘, 将用户可能感兴趣而又未获取的产品、信息等推荐给用户2。近年来, 个性化推荐技术已经被广泛应用在电影、视频、论文、驾驶路线和位置等与信息相关的服务领域。目前,
9、众多的个性化推荐方法中, 协同过滤推荐是应用较为成功的推荐方法, 分为基于用户的协同过滤推荐和基于项目的协同过滤推荐3。Slope One 算法作为应用广泛的基于项目的协同过滤推荐算法, 是由 Lemire 等人于 2005 年提出的, 该算法易于实现, 推荐准确度较高4。但该算法在实现时, 将所有项目平等对待, 未对项目的相关性加以考量, 并且在数据集稀疏时推荐效果不佳。文献4中同时也提到了加权 Slope One 算法, 该算法将同时被评分的两个项目的用户数量作为加权值, 但是同样缺乏对项目相关性的考量, 推荐效果不甚理想。针对 Slope One 算法的不足, 众多学者从不同视角进行了改
10、进, 如:Xiao等人将 Slope One 算法与基于内容的推荐算法相结合, 但此算法在数据稀疏时的推荐效果不理想5。Wang 等人提出将机器学习的相关算法应用于 Slope One算法参数的学习计算中, 再预测推荐6。孙丽梅等人提出了基于动态 k 近邻的Slope One 算法, 采用用户相似度的 k 近邻方法筛选用户评分数据, 提高了推荐准确性7。但是, 上述方法均没有从项目类型上入手, 减少无关项目对预测结果的不良影响。因此, 本文在传统 Slope One 算法中加入了项目类型相关性计算及项目筛选策略, 提出了一种融入项目相关性的加权 Slope One 算法, 使算法的推荐效率和推
11、荐准确率均得到了一定程度的改善。最后经实验对比分析, 本文所提算法切实可行, 与当前应用较广的 Slope One 算法相比具有更优的推荐效率和准确率。2 相关工作2.1 Slope One 算法介绍及不足分析Slope One 算法本质上是基于项目的协同过滤推荐算法, 该算法认为在项目和项目之间、评分和用户自身之间存在着一种线性关系。Slope One 算法是采用公式 f (x) =x+b 来预测评分的。b 代表着项目间的平均评分偏差, x 表示评分值。假设 S=, , 为用户对项目 X、Y 的评分向量集, S 中的每一个数值对表示一个用户分别对项目 X 和项目 Y 的实际评分。在计算项目
12、Y 对项目 X 的评分差估计值时, 可以使用最小二乘法来实现8, 计算公式如式 (1) :计算出评分差估计值 b 后, 采用如上所提的线性关系, 根据目标用户给出的项目 X 的评分和 b 来对项目 Y 的预测评分进行估算。Slope One 算法对预测评分计算的一般流程如下:(1) 生成用户集合 U:在用户-项目评分矩阵中, 将所有对目标项目做过评分的用户筛选出来形成用户集合 U。(2) 生成项目集合 P:首先找出已被目标用户给出评分的项目, 若该项目也同时被其它用户给出评分, 则该项目将被加入到算法计算所需的项目集合 P 中。(3) 预测项目评分8:筛选出 U、P 之后, 就可以提取 Slo
13、pe One 算法需要的评分数据即 U 与 P 交叉处的评分数据。多项目条件下, 用户 u 预测项目 j 的评分表示为 P (u) j, 计算公式如式 (2) 、式 (3) 所示:devj, i表示项目 j 相对项目 i 的评分偏差, U j, i表示项目 i 和项目 j 有共同评分的用户集合, r u, i和 ru, j分别表示用户 u 对项目 i、j 的评分;I j表示与目标项目 j 同时被评分的项目集合, card () 表示相应集合中包含元素的数量。Slope One 同其他推荐算法一样, 在预测完项目评分之后采用 Top-N 方式生成推荐列表。通过对 Slope One 算法计算方式
14、的分析, 可总结出该算法有如下两点不足:(1) 该算法仅仅考虑了当前用户的评分项目与目标项目之间的平均评分偏差, 再求加权平均值计算得出。由于没有考虑项目间的相关性, 因此算法在对预测评分进行计算过程中, 极有可能将与目标项目在性质上完全不相关的项目纳入项目集合中, 计算结果就会有较大的偏差。(2) 文献9, 10研究的结果表明, 该算法在数据集较为稠密时, 预测精度较高;但当数据集相对稀疏时, 该算法与在推荐效果上的优势并不明显。基于上述两种不足导致该算法推荐的结果准确度不理想, 本文算法将围绕以上两方面的不足开展研究与改进工作。2.2 项目相似度计算方法介绍及不足分析目前对项目相似度的研究
15、大多集中在项目评分上的相似度或项目的评价信息作为切入点来计算相似度, 而没有从项目类型等项目本质信息来衡量。目前常用的项目相似度计算方法及不足分析如下:(1) 根据购买次数计算两个不同项目被同一用户购买的次数越多, 它们就越相似11。项目 j 和项目i 之间的相似度计算如公式 (4) 所示:其中, T i表示项目 i 总共被购买的次数, T j表示项目 j 总共被购买的次数, TiT j表示项目 i 和项目 j 被同一用户购买的次数。这种方法带有一定的偶然性, 不适合用在预测评分的系统中。(2) 根据项目属性在该计算方法中, 项目之间的相似度使用项目属性相似度来衡量12。项目有很多属性, 因此
16、每个项目可以表示为一个 t 维向量, 每个维度对应当前项目的一个属性特征。a ig表示项目 i 的第 g 个属性, 利用相关公式确定每个属性在最终推荐中所占不同的权重 wk, 然后加权得到 2 个项目属性的相似度。那么项目i 和项目 j 之间的相似度可以表示为公式 (5) :这种方法在计算属性相似度的时候, 计算过程非常繁琐。(3) 多层次计算此方法是首先基于共同用户集计算第 1 级相似度, 然后逐步融入其他维度因素13, 计算过程如下:基于共同用户集的第 1 级相似度计算:设项目 i、j 的用户集分别为 Usr (i) , Usr (j) , 则使用公式 (6) 计算项目 i、项目 j 的相
17、似度:融入活跃度的第 2 级相似度计算:用户 u 的活跃度通过其评分项目数量 RNum (u) 来表示, 则第 2 级相似度计算如公式 (7) :融入时效的第 3 级相似度计算:设用户 u 对项目 i 和项目 j 的评分时间分别为Timeui和 Timeuj, 则第 3 级相似度计算如公式 (8) :以上给出的多级相似度计算虽然能够从不同角度分析项目之间的相似性, 但是算法的实现过程中需要进行大量的计算, 并且算法效率较传统算法并没有较大提高, 其时间复杂度为 (8) 7) 2) 8) ) , m 为全部项目数。3 融入项目相关性的加权 Slope One 算法针对 Slope One 算法中
18、存在的不足, 本文提出了项目相关性的计算方法, 从项目类型上入手, 减少无关项目对预测结果的影响。结合 Slope One 算法计算平均评分差值的特点, 对用户-项目矩阵进行筛选操作, 目的是得到一个局部数据稠密的用户-项目矩阵, 并且项目间评分差值较为稳定。最后将项目类型相关性计算和项目筛选策略融合到推荐算法中, 形成融入项目类型相关性的加权Slope One 算法。3.1 项目相关性的计算该步骤是一个数据预处理的过程, 根据项目数据集的相关数据计算出项目之间的相关性, 得到一个类型相关性的表格, 然后就可以根据计算结果和目标项目的类型进行筛选。这样既可以过滤掉无关项目的干扰, 又可以减少用
19、户-项目矩阵的局部相似度。3.1.1 项目相关性的定义本文提出的计算方法是利用项目已有的相关数据来计算项目之间的相关性。项目类型 a 和 b 之间的相关性表示为 g_corr (a, b) , 计算如公式 (9) 所示:在公式 (9) 中, 项目类型之间的相关性 g_corr (a, b) 是由 g_prob (a, b) 和 g_weight (a, b) 来计算。项目类型共同出现的概率矩阵表示为 g_prob (a, b) , 这个概率矩阵是不对称的。项目类型评分相似度矩阵表示为 g_weight (a, b) , 是由皮尔逊相关系数计算的一个对称矩阵。 表示两者权重, 由反复实验得到最优
20、取值。3.1.2 项目类型共同出现概率的计算在推荐系统的项目数据中, 每个项目都至少有一个所属类型, 有些项目甚至有4 到 5 个所属类型。比如电影数据中, 海豚湾的所属类型为纪录片, 而拯救大兵瑞恩属于剧情片、动作片、历史片和战争片。在兴趣相似度中, 如果两个用户共同感兴趣的物品越多, 则说明这两个用户的相似度越高。借鉴该思想, 如果两个类型同时被一个项目所属的情况数量很多, 那么可以认为这两个类型是有一定关系的, 即相关度高。本文就是根据这种思想来衡量两个项目类型是否具有关系。在本文提出的计算方法里, 项目类型共同出现的概率用条件概率来计算, 计算公式为 (10) :式 (10) 中 Ia
21、表示项目类型属于类型 a, Iab 表示项目类型既属于类型 a 又属于类型 b。例如:A 影片属于类型 1, 2, 3;B 影片属于类型 3, 4, 5;则 g_prob (a, b) =1/3。3.1.3 项目类型评分相似度计算类型权重公式如公式 (11) 所示, 这是一个皮尔逊相关系数的变形, 用来计算属于类型 a 和类型 b 项目评分之间的评分相关性。其中, pnt i (a, b) 表示项目 i 的点数, s *, i表示项目 i 的平均得分, 表示类型为 a 和类型为 b 的项目的平均分。正如前面所说, 一个项目可以对应很多类型。一个项目对应的类型越少, 对应类型间的相关性越高。因此
22、, pnt i是根据一个项目所属类型的总数不同来给定的。计算公式如公式 (12) 所示。其中, 类型权重等式由两个目标类型, 所以 pnti计算公式中的分子是 2, Gi表示项目 i 所属类型的集合, |G i|是项目 i 所属的类型的总数。3.2 项目的筛选策略本文以用户-项目矩阵中的评分数据为基础, 利用项目固有的类型信息, 提出以下项目类型筛选策略用以挖掘出用户最喜欢和最不喜欢的项目作为算法预测评分过程中参与计算的项目。项目的类型集合 G=g1, g2, , gn。当 Rui=5 时, 认为用户 u 喜欢项目 i。此时, 项目 i 对应的项目类型 gc被标记为用户 u 的喜欢项目类型。某
23、个用户可能多次对同一个喜欢的项目类型进行标记, 对标记次数进行累加, 形成用户的喜欢项目类型矩阵。同理, 当 Ruj=1 时, 认为用户 u 不喜欢项目 j。此时, 项目j 对应的项目类型 gd被标记为用户 u 的不喜欢项目类型。对标记次数进行累加, 形成用户的不喜欢项目类型矩阵。表 1 中列出了用户 u1至 u5对项目 i1至 i7的评分矩阵。将其分开表示成两个矩阵, 一个为保留用户评分为 5 的, 一个为保留用户评分为 1 的, 同时将其他评分值重置为 0。操作结果如表 2 和表 3 所示。Table 1 User-item Scoring matrix 表 1 用户-项目评分矩阵 下载原
24、表 Table 2 User favorite item matrix 表 2 用户喜欢的项目矩阵 下载原表 Table 3 User dislike item matrix 表 3 用户不喜欢的项目矩阵 下载原表 项目-类型矩阵如表 4 所示, 项目 i 属于类型 g 就记为 1, 否则记为 0。Table 4 Item-type matrix 表 4 项目-类型矩阵 下载原表 表 2 和表 3 分别根据表 4 中的项目类型对应累加后形成的结果如表 5 和表 6 所示。Table 5 Summery of user favorite item type 表 5 用户喜欢项目类型汇总 下载原表
25、 Table 6 Summery of user dislike item type 表 6 用户不喜欢项目类型汇总 下载原表 从表 5 和表 6 中可知用户最喜欢的项目类型为 g2, 最不喜欢的项目类型为 g3。那么这两个已筛选出来的类型所对应的项目纳入到最后预测评分的用户-项目矩阵中。3.3 算法描述根据上述思想, 算法流程描述如下:输入:用户-项目评分矩阵 Rmn, 项目-类型矩阵 Gns, 目标用户 u, 待评分项目i;输出:目标用户 u 对待评分项目 i 的预测评分;过程:Step1:利用矩阵 Rmn, 使用常用的相似度计算方法计算出用户相似度 LEsim (xu, xv) , 选取
26、 Top-K 形成目标用户 u 的近邻用户集合 Su, 并根据 Su 形成相似用户-项目矩阵 R1kn;Step2:利用矩阵 Gns和 Rmn, 根据本文所提出的项目类型相关性计算公式 (9) 计算出待评分项目 i 的类型与其他类型的相关程度, 选取 Top-K 形成集合G1=g1, g2, , gk;Step3:利用矩阵 R1kn, 挖掘出目标用户 u 最喜欢的和最不喜欢的项目类型, 组成集合Step4:在矩阵 R1kn, 剔除不属于 G1G2 的项目, 形成局部数据比较密集的矩阵 R2kc;Step5:利用矩阵 R2kc, 根据加权 Slope One 算法计算出目标用户 u 对目标项目i
27、 的预测评分, 产生 Top-N 推荐。改进算法通过 step1 至 step4 的操作将大小为 8) 9) 原始用户-项目评分矩阵进行预处理, 在预处理过程中根据项目类型相关性的计算选择 Top-k 个相关类型, 并按照项目筛选策略形成局部数据比较密集的用户-项目评分矩阵 R2kc, 6) 8) 且 (8 9) 。这样可以在 Slope One 算法复杂度保持不变的情况下, 通过大幅度降低输入数据规模的方法来提高算法的执行效率。虽然数据预处理部分会使整个算法的时间复杂度略有增加, 但该部分可采用离线的方式处理, 因而不会影响 Slope One 算法的实时性。4 实验分析4.1 实验数据集与
28、评价标准本文实验环境配置如下:OS Win7, CPU i5-4460、3.20GHz, 内存 2G 或以上, 硬盘空间 50G 以上。本文算法采用 Java 语言实现, 使用了 Apache Mahout 开源框架下提供的原生 slope one 算法, 在此之前用本文算法对数据集进行了过滤筛选处理。本文使用数据集 Movie Lens (下载地址为:http:/files.grouplens.org/datasets/movielens/) 中的部分数据来评估本文所提出的推荐算法的性能, 选取的数据集包括用户数量为 943、项目 (电影) 数为 1682、用户-项目评分矩阵中包含 1000
29、00 条记录, 其中每个注册用户要求至少完成 20 部电影的评分, 给出的评分采用 5 个等级, 即范围为1, 2, 3, 4, 5, 评分数值越大, 则表示该用户对该项目越喜欢。该用户-项目评分矩阵的稀疏度为 0.93695。实验的评价指标:平均绝对误差 MAE (Mean Absolute Error) 和均方根误差RMSE (Root Mean Squared Error) 14,15, 根据它们的值来验证本文所提算法预测结果的优势。MAE 计算如公式 (13) 所示:若将用户 u 表示为 Uu, 项目 i 表示为 Ii, 则在公式 (13) 中, r ui表示 Uu对 Ii的评分真实值
30、, pre ui表示 Uu对 Ii评分的预测值。|T|表示测试集 T 中元素的个数。对于计算结果, MAE 值越小, 说明预测评分与实际评分越接近, 预测结果就越准确。RMSE 计算如公式 (14) 所示:同理, RMSE 值越小, 表明算法预测值与评分真实值越接近, 预测效果越好。4.2 参数的最优值确定参数 用来表示公式 (9) 中 g_prob (a, b) 和 g_weight (a, b) 所占权重的比例。使用基于项目的协同过滤算法进行实验, 选取相似项目类型的数量为 3, 选取 为不同值进行多次实验, 得到使算法效果达到最好的参数值。比重参数 对 MAE 值和 RMSE 值的影响如图 1 和图 2 所示。Fig.1 Effect of parameteron MAE 图 1 参数对 MAE 值的影响 下载原图Fig.2 Effect of parameteron RMSE 图 2 参数对 RMSE 值的影响 下载原图