浙江大学学报(工学版), 2019, 53(7): 1349-1353 doi: 10.3785/j.issn.1008-973X.2019.07.014

自动化技术、计算机技术

基于非负矩阵分解的Slope One算法

董立岩,, 金佳欢, 方塬程, 王越群, 李永丽, 孙铭会,

Slope One algorithm based on nonnegative matrix factorization

DONG Li-yan,, JIN Jia-huan, FANG Yuan-cheng, WANG Yue-qun, LI Yong-li, SUN Ming-hui,

通讯作者: 孙铭会,男,讲师. orcid.org/0000-0002-1809-8187. E-mail: smh@jlu.edu.cn

收稿日期: 2018-09-4  

Received: 2018-09-4  

作者简介 About authors

董立岩(1966—),男,教授,博导,从事数据挖掘的研究.orcid.org/0000-0001-7491-5893.E-mail:dongly@jlu.edu.cn , E-mail:dongly@jlu.edu.cn

摘要

针对协同过滤推荐算法中Slope One算法在稀疏数据集中推荐精度低的问题,利用矩阵分解在解决矩阵稀疏性方面的优势,将非负矩阵分解技术引入到用户-项目评分矩阵的降维处理中,将原有的稀疏评分矩阵进行非负分解,改善了矩阵的稀疏性,优化Slope One算法. 从实验数据可以看出,与原始的CF算法进行比较,NMF-Slope One算法有较好的推荐效果. 在数据稀疏的条件下,确定参数进行实验. 实验结果表明,该方法提高了Slope One算法在数据稀疏下的精度和推荐质量.

关键词: 推荐系统 ; 协同过滤 ; 非负矩阵分解 ; Slope One

Abstract

The good performance of matrix decomposition in solving matrix sparsity was used in order to solve the problem that the Slope One algorithm has low recommendation accuracy in the sparse data set in the collaborative filtering recommendation algorithm. The nonnegative matrix factorization technology was introduced into the dimension reduction of the user-item rating matrix in order to optimize the Slope One algorithm. The original sparse scoring matrix was non-negatively decomposed in order to improve the sparsity of the matrix. The experimental results show that the NMF-Slope One algorithm has a good recommendation effect compared with the original CF algorithm. Parameters were determined for experimentation under conditions of sparse data. The proposed method improves the accuracy and the recommendation quality of the Slope One algorithm under data sparseness.

Keywords: recommendation system ; collaborative filtering ; non-negative matrix factorization ; Slope One

PDF (637KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

董立岩, 金佳欢, 方塬程, 王越群, 李永丽, 孙铭会. 基于非负矩阵分解的Slope One算法. 浙江大学学报(工学版)[J], 2019, 53(7): 1349-1353 doi:10.3785/j.issn.1008-973X.2019.07.014

DONG Li-yan, JIN Jia-huan, FANG Yuan-cheng, WANG Yue-qun, LI Yong-li, SUN Ming-hui. Slope One algorithm based on nonnegative matrix factorization. Journal of Zhejiang University(Engineering Science)[J], 2019, 53(7): 1349-1353 doi:10.3785/j.issn.1008-973X.2019.07.014

在这样一个信息爆炸的时代,Web上的信息无时无刻不在飞速增长,用户在面对大量的信息时很难快速、准确地找到理想的信息. 通常,只有少部分的商品被众人选择,大量的商品不会被注意. 在很多情况下,用户浏览网页或查找信息时,其中的大部分内容对用户来讲都是无用且不必要的,用户必须花费很多精力仔细浏览来获取所需信息. 推荐系统的诞生不但可以使用户更快、更准确地找到自己真正喜欢或有用的信息,给用户带来了良好的体验,而且为商人带来极大的便利,给他们的信息与商品带来了推广,因此在现实应用场景中,推荐系统的表现十分优秀. 在众多推荐技术中,由Goldberg等提出的协同过滤推荐算法(collaborative filtering recommendation algorithm,CF算法)精度高,应用范围广,成果显著[1].

Slope One推荐算法[2]是Daniel Lemire和Anna Maclachlan在2005年提出的基于项目的协同过滤算法,它被设计成一个简单易懂的形式,使其易于实现和维护. 许多实验证明,Slope One推荐算法在保证推荐精度的同时具有简洁、高效等特性,已被应用在诸多推荐系统中[3].

由于传统的协同过滤技术对于稀疏的评分矩阵处理效果不好[4],许多国内外的专家都针对CF算法中评分矩阵的稀疏性问题提出改进. 其中矩阵分解技术是较常用的方案之一,非负矩阵分解(NMF)具有容易解释、算法相对简单等优点,在解决稀疏性问题上有良好的表现.

研究表明,Slope One 算法在比较稠密的数据集下,推荐效果较好,但在比较稀疏的数据集下推荐效果很差[5],基于矩阵分解的方法在抗稀疏性方面很有效,因此将非负矩阵分解引入到Slope One算法中,提出基于非负矩阵分解的Slope One算法.

1. 相关工作

1.1. Slope One算法简介

1.1.1. Slope One算法原理

Slope One算法的基本原理是一个非常简洁的一元方程 $w = f\left( v \right) + b$. 已知一组训练点 $\left( {{v_i},{w_i}} \right)_{i = 1}^n$,通过该线性模型最小化预测误差的平方和[6],可得

$b = \frac{{\mathop \sum \limits_i {w_i} - {v_i}}}{n}.$

式中:wivi分别为不同用户对同一项目的评分. 通过式(1)计算出 $b$的取值后,对于新的数据点vnew,根据公式 ${w_{{\rm{new}}}} = b + {v_{{\rm{new}}}}$计算新数据点的预测值. 直观上可以将式(1)中求 $b$的偏移方法理解为 ${w_i}$${v_i}$差值的平均值[7]. 如图1所示,有2个用户A、B,其中用户A对项目i与项目j完成过评价,用户B对项目i完成了评价,预测用户B对项目j的评分.

图 1

图 1   Slope One基本思想

Fig.1   Basic idea of Slope One


根据Slope One算法,计算用户B对项目j的评分为:2+(1.5−1)=2.5.

定义项目i相对于项目j的平均偏差计算公式:

${\rm{de{v}}}_{j,i} = \mathop \sum \limits_{u \in {S_{j,i\left( x \right)}}} \frac{{{u_j} - {u_i}}}{{{\rm{card}}\left( {{S_{j,i}}\left( x \right)} \right)}}.$

式中:Sj,i为同时对项目i与项目j进行过评分的用户集合,uiuj分别为用户对项目i和项目j的评分,card为集合中的元素数量.

在以上定义的基础上,能够使用devj,i+ui来计算用户u对项目j的预测值. 将全部这种可能的预测值取平均,可得

$p{\left( u \right)_j} = \frac{1}{{{\rm{card}}\left( {{R_j}} \right)}}\mathop \sum \limits_{i \in {R_j}} \left( {{\rm{de{v}}}_{j,i} + {u_i}} \right).$

式中:Rj表示用户u进行过评分且满足条件(i≠jSj,i非空)的所有项目集合.

对于足够稠密的数据集,可以使用近似:

式中:Su)为用户u评过分的所有项目集合.

将式(3)简化为

${p^{S1}}{\left( u \right)_j} = \bar u + \frac{1}{{{\rm{card}}\left( {{R_j}} \right)}}\mathop \sum \limits_{i \in {R_j}} \left( {{\rm{de{v}}}_{j,i}} \right).$

1.1.2. Weighed Slope One算法

Slope One算法在计算项目i相对于项目j的平均偏差devj,i的过程中,未考虑不同用户间的可信度差异[8]. 若有1 000名用户都对项目k与项目j进行过评价,但仅有10名用户都对项目i与项目j完成过评价,计算得到的devj,k比devj,i更具有说服力.

其中的一个修正是对最终的平均使用加权,即Weighted Slope One[9],预测公式如下:

${p^{{\rm{wS}}1}}{\left( u \right)_j} = \frac{{\mathop \sum \limits_{i \in S\left( u \right) - \left\{ j \right\}} \left( {{\rm{de{v}}}_{j,i} + {u_i}} \right){c_{j,i}}}}{{\mathop \sum \limits_{i \in S\left( u \right) - \left\{ j \right\}} {c_{j,i}}}}.$

式中:cj,i=card(Sj,ix)),devj,i为项目i与项目j评分的平均偏差,ui为用户u对项目i的评分.

Weighted Slope One在原有Slope One算法的基础上,考虑到每一个项目(商品)对目标项目的影响,使算法推荐更加准确. Weighted Slope One存在不足,该算法仅考虑不同项目的评分偏差,忽略不同用户存在的相似性,带来了新的误差. Lemire教授提出Bi-Polar Slope One算法[10],考虑到了不同用户的相似性.

1.1.3. Bi-Polar Slope One算法

Bi-Polar Slope One算法在Weighted Slope One的基础上,将用户进行过评分的项目区分为like与dislike 2种. 如果用户u对项目i的评分ui比该用户对所有项目的平均评分大,则用户u喜欢项目i,否则用户不喜欢项目i

式中: $\bar u$为用户 $u$进行过评分的项目的平均评分.

类似地,可以定义对项目i与项目j具有相同喜好的用户集合:

根据以上定义,能够通过下式得出新的偏差:

于是,可以从项目i计算得到预测值:

Bi-Polar Slope One的预测公式如下:

${p^{{\rm{bpS}}1}}{\left( u \right)_j} = \frac{{\mathop \sum \limits_{i \in {S^{{\rm{like}}}}\left( u \right) - \left\{ j \right\}} p_{j,i}^{{\rm{like}}}c_{j,i}^{{\rm{like}}} + \mathop \sum \limits_{i \in {S^{{\rm{dislike}}}}\left( u \right) - \left\{ j \right\}} p_{j,i}^{{\rm{like}}}c_{j,i}^{{\rm{like}}}}}{{\mathop \sum \limits_{i \in {S^{{\rm{like}}}}\left( u \right) - \left\{ j \right\}} c_{j,i}^{{\rm{like}}} + \mathop \sum \limits_{i \in {S^{{\rm{dislike}}}}\left( u \right) - \left\{ j \right\}} c_{j,i}^{{\rm{like}}}}}.$

Bi-Polar Slope One在Weighted Slope One的基础上加入用户间的相似性的判断,提升了精确度. 只粗略地根据用户对项目的平均评分来区分like与dislike,会引起误差,不能满足推荐需要.

1.2. 非负矩阵分解算法简介

Lee等[11]首次公布了非负矩阵分解算法(NMF). NMF解决了许多常规矩阵分解技术中存在的问题,在当时引起了世界上许多研究人员的讨论与深入研究.

NMF的基本思想是将数据非负的矩阵R分解为低维的非负矩阵PQ,满足RPQ,其中R为原始矩阵,P为基矩阵,Q为系数矩阵. 在原始的非负矩阵R中,每个列向量为矩阵P的全部行向量的加权和,权重系数为Q中相对应的列向量的元素. 假设对mn维空间的样本进行相应的数据处理,m×n的原始矩阵Rm×k的基矩阵Pk×n的系数矩阵Q,这样一组基向量构造出了k维,Q中的每一列都可以大略地看作原始矩阵R对应的列向量对于k维空间的投影[12].

通过以上公式能够看出,该算法仅仅是一种近似算法[13],不要求R=PQ. 为了衡量矩阵分解前、后的近似程度,通常使用损失函数来进行评价,即NMF的核心是找到可以使损失函数fPQ)取最小值的矩阵PQ且这2个矩阵非负[14]. 通常用欧式距离作为损失函数,如下所示:

$f\left( {{{P}},{{Q}}} \right) \!=\! \frac{1}{2}\left\|{{R}}\! -\! {{PQ}}\right\|_{\rm{F}}^2 \!=\! \frac{1}{2}\mathop \sum \nolimits_{i,j} {\left( {{{{R}}_{ij}} \!-\! {{\left( {{{PQ}}} \right)}_{ij}}} \right)^2}.$

在推荐系统中,在R上完成预处理操作,变换成非负矩阵,算法步骤如下.

表 3  

Tab.3  

输入:原有的用户-项目评分矩阵Rm×n),ks为特征属性个数,steps为迭代次数,a=0.000 2为梯度下降常数,b=0.02用来控制用户特征向量和条目特征向量的比例,用来进行规范化,防止过拟合.
输出:较稠密的用户-项目评分矩阵Rnewm×n
1 for step<steps//迭代次数
2  for i<len(R
3   for j<len(R[i])
4    if R[ij]>0//用户给出了评分
5      eij=R[ij]−P[ijQ[ij]
6     for k<ks
7       P[i][k]=P[i][k]+a(2eij ·Q[k][j]−b·P[i][k])
8       Q[k][j]=Q[k][j]+a(2eij ·P[i][k]−b·Q[k][j])
9     end for
10    end if
11   end for
12  end for
13  式(7)
14 end for
15 sreturn Rnewm×n

新窗口打开| 下载CSV


2. 基于非负矩阵分解的Slope One算法

由1.2节可知,进行非负矩阵分解后的矩阵PQ的乘积,即原有矩阵的近似矩阵是一个m×n的矩阵. 若将近似矩阵的每一行看作该行所对应的用户的特征,则选择Pearson系数完成相似性的计算,可得m×m的用户相似度矩阵Spearson,其中Spearsoni,j)为用户i与用户j之间的相似度.

${S_{{\rm{pearson}}}}\left( {i,j} \right) = \frac{{\mathop \sum \limits_{k \in {U_i}} \left( {{R_{k1}} - \overline {{R_1}} } \right)\left( {{R_{k2}} - \overline {{R_2}} } \right)}}{{\sqrt {\mathop \sum \limits_{k \in {U_j}} {{\left( {{R_{k1}} - \overline {{R_1}} } \right)}^2}} \sqrt {\mathop \sum \limits_{k \in {U_j}} {{\left( {{R_{k2}} - \overline {{R_2}} } \right)}^2}} }}.$

式中: $\overline {{R_1}} $$\overline {{R_2}} $为用户i与用户j的评分均值.

在上述数据模型和设计思想的基础上,归纳NMF-Slope One算法的输入、输出及步骤如下.

表 4  

Tab.4  

输入:较稀疏的用户-项目矩阵 Rm×n);目标用户 u,目标项目 iks 为特征属性个数,steps 为迭代次数,a=0.000 2 为梯度下降常数,b=0.02 用来控制用户特征向量和条目特征向量的比例,用来进行规范化,防止过拟合.
输出:u对itemi的预测评分pu,i
1 for step<steps//迭代次数
2  for i<len(R
3   for j<len(R[i])
4    if R[ij]>0//用户给定评分
5      eij=R[ij]−P[ijQ[ij]
6     for k<ks
7       P[i][k]=P[i][k]+a(2eijQ[k][j]−bP[i][k])
8       Q[k][j]=Q[k][j]+a(2eijP[i][k]−bQ[k][j])
9     end for
10    end if
11   end for
12  end for
13  式(7)
14 end for
15 根据式(8)构建不同用户的相似度矩阵
16  Nu ← TopK(u
17  N=|Nu|
18  ${\rm{de{v}}}_{i,j} = \frac{{\mathop \sum \limits_{{\rm{user}} \in {N_u}} \left( {{R_{ui}} - {R_{uj}}} \right)}}{N}$
19  ${p_{u,i}} = \frac{{\mathop \sum \limits_{j \in {I_u}} {N_{ij}}\left( {{\rm{de{v}}}_{i,j} + {R_{uj}}} \right)}}{{\mathop \sum \nolimits_{j \in {I_u}} {N_{ij}}}}$

新窗口打开| 下载CSV


3. 实验结果及其分析

3.1. 实验所用数据集和实验选择的度量标准

使用的数据集来自MovieLens网站(http://movielens.umn.edu)[15]. 该网站是由美国Minnersota大学GroupLens研究小组所建立与维护的一个非赢利、以研究为宗旨的实验性网站. 每天均有数以百计的用户浏览MovieLens网站,参与到电影的评分或接受网站的推荐.

在MovieLens上的数据集中,随机选取943名使用者对1 682部影片参与的100 000评分数据信息. 其中,使用者对影片的打分为(1,2,3,4,5)的离散型整数,越接近5表示用户对影片的评价越好,即对该影片的喜好程度越高.

为了衡量推荐算法的优劣,通过选取MAE(预测到用户评分和真实评分的平均误差)、RMSE(均方根误差)2个值来完成定量分析. 若采用NMF-Slope One算法预测出的用户评分为{p1p2p3,…,pn},用户的真实评分为{q1q2q3,…,qn},则MAE与RMSE的计算公式如下:

${\rm{MAE}} = {{\mathop \sum \limits_{i = 1}^n \left| {{p_i} - {q_i}} \right|}}\Big/{n} ,$

${\rm{RMSE}} = \frac{1}{n}\sqrt {\mathop \sum \limits_{i = 1}^n \left| {{p_i} - {q_i}} \right|} = \frac{1}{n}\sqrt {\mathop \sum \limits_{i = 1}^n {{\left( {{p_i} - {q_i}} \right)}^2}}. $

3.2. 实验结果及分析

对于NMF-Slope One算法来说,近似矩阵的维数k的选取十分重要,因此首先要进行k的选取,通过实验得出取值在哪种情况下算法的MAE与RMSE最小. 选取基于阈值的动态最近邻算法,因此将相似度阈值设为0.2[16]k分别选取为10、15、20、25、30. 关于k的选取,实验结果如图23所示.

图 2

图 2   不同k下的RMSE

Fig.2   RMSE values at different k values


图 3

图 3   不同k下的MAE

Fig.3   MAE values at different k values


图3可知,当k=15时,NMF-Slope One算法的RMSE与MAE最小. 其中,RMSE=0.912 6,MAE=0.762 4,即当k=15时,NMF-Slope One算法的推荐效果最佳.

3.2.1. NMF-Slope One算法与传统Slope One算法的比较

将相似度阈值设为0.2,在k=15的条件下进行实验,比较NMF-Slope One算法、Weighted Slope One算法与Bi-Polar Slope One算法的推荐效果. 实验结果如表1所示.

表 1   不同Slope One算法的RMSE与MAE

Tab.1  RMSE values and MAE value of different Slope One algorithms

算法 RMSE MAE
Bi-Polar Slope One 1.08 1.06
Weighted Slope One 0.98 0.97
NMF-Slope One 0.92 0.92

新窗口打开| 下载CSV


表1的实验结果可知,NMF-Slope One比传统的Weighted Slope One算法与Bi-Polar Slope One算法的推荐效果更好.

3.2.2. NMF-Slope One算法与传统CF算法的比较

在相似度阈值设为0.2,k=15的条件下进行实验,比较NMF-Slope One算法、基于用户的CF算法与基于项目的CF算法的推荐效果. 实验结果如表2所示.

表 2   不同CF算法的RMSE和MAE

Tab.2  RMSE and MAE value of different CF algorithms

算法 RMSE MAE
User-Based CF 0.97 0.87
Item-Based CF 1.07 0.92
NMF-Slope One 0.91 0.76

新窗口打开| 下载CSV


表2的数据可知,NMF-Slope One算法与传统的基于用户的CF算法与基于项目的CF算法相比,效果更好.

4. 结 语

本文介绍了Slope One算法的原理,针对传统Slope One算法的不足,提出基于非负矩阵分解的Slope One改进算法. 利用该改进算法,有效解决了Slope One算法在数据较稀疏条件下的推荐效果不如传统协同过滤算法的问题. 将NMF-Slope One与Weighted Slope One、Bi-Polar Slope One算法进行比较,实验结果证明了改进后的算法有更好的推荐效果. 在数据稀疏的条件下,确定参数进行实验. 在与原始的CF算法比较后,从实验数据得出NMF-Slope One算法有较好的推荐效果.

参考文献

CACHEDA F, FORMOSO V, FERNÁNDEZ D, et al

Comparison of collaborative filtering algorithms: Limitations of current techniques and proposals for scalable, high-performance recommender systems

[J]. ACM Transactions on the Web, 2011, 5 (1): 1- 33

[本文引用: 1]

LEMIRE D, MACLACHLAN A. Slope One predictors for online rating-based collaborative filtering [C] // Proceedings of the 2005 SIAM International Conference on Data Mining. Philadelphia: Society for Industrial and Applied Mathematics Publications, 2005: 471-475.

[本文引用: 1]

KARYDI E, MARGARITIS K G. Multithreaded implementation of the Slope One algorithm for collaborative filtering [C] // 8th IFIP WG 12.5 International Conference on Artificial Intelligence Applications and Innovations. New York: Springer, 2012: 117-125.

[本文引用: 1]

KOREN Y, BELL R. Advances in collaborative filtering [M]. New York: Springer, 2015: 77-118.

[本文引用: 1]

TIAN S, OU L. An improved Slope One algorithm combining KNN method weighted by user similarity [C] // 17th International Conference on Web-Age Information Management. Berlin: Springer, 2016: 88-98.

[本文引用: 1]

BASU A, VAIDYA J, KIKUCHI H. Perturbation based privacy preserving Slope One predictors for collaborative filtering [C] // 6th IFIP WG 11.11 International Conference on Trust Management VI. New York: Springer, 2012: 17-35.

[本文引用: 1]

MAO C, CHEN J

QoS prediction for web services based on similarity-aware Slope One collaborative filtering

[J]. Informatica (Slovenia), 2013, 37 (2): 139- 148

[本文引用: 1]

LIU Y, LIU D, XIE H, et al

A research on the improved slope one algorithm for collaborative filtering

[J]. International Journal of Computing Science and Mathematics, 2016, 7 (3): 245- 253

DOI:10.1504/IJCSM.2016.077865      [本文引用: 1]

SAEED M, MANSOORI E G

A new slope one based recommendation algorithm using virtual predictive items

[J]. Journal of Intelligent Information Systems, 2018, 50 (3): 527- 547

DOI:10.1007/s10844-017-0470-7      [本文引用: 1]

WANG Q X, LUO X, LI Y, et al

Incremental Slope-one recommenders

[J]. Neurocomputing, 2018, 272: 606- 618

DOI:10.1016/j.neucom.2017.07.033      [本文引用: 1]

LEE D D, SEUNG H S

Learning the parts of objects with non-negative matrix factorization

[J]. Nature, 1999, 401 (6755): 788- 791

DOI:10.1038/44565      [本文引用: 1]

ZONG L, ZHANG X, ZHAO L, et al

Multi-view clustering via multi-manifold regularized non-negative matrix factorization

[J]. Neural Networks, 2017, 88: 74- 89

DOI:10.1016/j.neunet.2017.02.003      [本文引用: 1]

LU S, HONG M, WANG Z

A Nonconvex splitting method for symmetric nonnegative matrix factorization: convergence analysis and optimality

[J]. IEEE Transactions on Signal Processing, 2017, 65 (12): 3120- 3135

DOI:10.1109/TSP.2017.2679687      [本文引用: 1]

ALQUIER P, GUEDJ B

An oracle inequality for quasi-Bayesian nonnegative matrix factorization

[J]. Mathematical Methods of Statistics, 2017, 26 (1): 55- 67

DOI:10.3103/S1066530717010045      [本文引用: 1]

HARPER F M, KONSTAN J A

The MovieLens datasets: history and context

[J]. ACM Transactions on Interactive Intelligent Systems, 2015, 5 (4): 1- 19

[本文引用: 1]

林德军, 孟祥武

基于奇异值分解的Slope One算法

[J]. 新型工业化, 2012, 2 (11): 12- 17

[本文引用: 1]

LIN De-jun, MENG Xiang-wu

Slope One algorithm based on single value decomposition

[J]. The Journal of New Industrialization, 2012, 2 (11): 12- 17

[本文引用: 1]

/