一种面向多样性的推荐方法技术领域
本发明涉及数据挖掘与机器学习领域,具体涉及一种面向多样性的推荐
方法。
背景技术
通过分析用户的历史行为数据,推荐系统可以从大量的信息中找到用户
可能会感兴趣的内容推荐给用户。大部分的推荐算法通过预测目标用户对项
目的评分,然后推荐评分最高的N个项目给用户以提升精确度,如应用最广
泛的基于用户(项目)的协同过滤与矩阵分解推荐算法等。这些面向精确度
的算法认为高精确度的推荐结果即意味着好的推荐结果。
然而,高的精确度不一定意味着高的用户满意度,也不一定能提高商品
的销售平衡。一般而言,推荐给用户的项目个数远远小于系统总的项目个数,
以精确度为衡量指标的算法可能会导致两方面的问题:一方面由于流行度高
的商品具有更多的历史数据,因此更容易被推荐,而那些被少部分用户购买
的、目标用户可能会更喜欢的项目难以被推荐,导致系统的推荐结果集中在
少部分的流行度高的项目中,不利于商业模型;另一方面推荐的结果与用户
过去的购买行为太相似,从而不能迎合用户的广泛喜好,导致用户对系统的
满意度下降。提高推荐的多样性有助于解决以上问题。
推荐的多样性可以从系统与用户两方面进行衡量,分别表示为整体多样
性与个体多样性。整体多样性衡量推荐系统将所有商品推荐出去的能力,个
体多样性衡量给单个用户推荐商品的多样性。提高前者有助于增加商业利益,
提高后者有助于提高用户满意度。
目前,许多研究者从不同的方面分析了多样性并提出了相应的算法,但
是,大部分的算法是以降低精确度的代价来提高多样性性能,并且,尚未有
工作同时分析并提高推荐的精确度、个体多样性、整体多样性与销售平衡。
因此,有必要提出一种方法来同时提高推荐结果的精确度与多样性。
发明内容
本发明针对目前推荐结果中多样性不高、大部分推荐算法是在降低精确
度的情况下提高多样性的问题,提供一种面向多样性的推荐方法,其通过资
源在二部图上的传播,设计传播概率与传播损耗,使得推荐的精确度与多样
性更高。
为解决上述问题,本发明是通过以下技术方案实现的:
一种面向多样性的推荐方法,包含以下步骤:
步骤1、根据历史评分数据构建用户-项目二部图G=(V,E),其中V表示节
点集,E表示边集;
步骤2、计算传播概率,包括用户u传播到其邻居项目j的传播概率puj、
项目j传播到其邻居用户v的传播概率pjv和用户v传播到其邻居项目i的传播
概率pvi;
上述用户u传播到其邻居项目j的传播概率puj为:
p
u
j
=
r
u
j
Σ
j
∈
V
I
r
u
j
]]>
式中,ruj为用户u对项目j的评分;
上述项目j传播到其邻居用户v的传播概率pjv为:
p
j
v
=
r
v
j
Σ
v
∈
V
U
r
v
j
]]>
式中,rvj为用户v对项目j的评分;
上述用户v传播到其邻居项目i的传播概率pvi为:
p
v
i
=
r
v
i
Σ
i
∈
V
I
r
v
i
]]>
式中,rvi为用户v对项目i的评分;
步骤3、计算传播损耗,包括用户u传播到其邻居项目j的传播损耗cuj,
项目j传播到其邻居用户v的传播损耗cjv,用户v传播到其邻居项目i的传播损
耗cvi;
上述用户u传播到其邻居项目j的传播损耗cuj为:
c
u
j
=
1
Σ
u
∈
V
U
1
r
u
j
≠
0
]]>
式中,ruj为用户u对项目j的评分;
上述项目j传播到其邻居用户v的传播损耗cjv为:
c
j
v
=
1
-
Σ
j
∈
V
I
r
v
j
Σ
j
∈
V
I
r
v
j
l
o
g
r
v
j
Σ
j
∈
V
I
r
v
j
]]>
式中,rvj为用户v项目j的评分;
上述用户v传播到其邻居项目i的传播损耗cvi为:
cvi=|KNN(j)∩{i}|
式中,KNN(j)为项目j的K个最近邻居项目集合,K为设定值,{i}为只包
含项目i的集合;
步骤4、基于步骤2和步骤3,预测用户u对项目i的得分
即:
r
^
u
i
=
Σ
j
∈
V
I
Σ
ν
∈
V
U
p
u
j
p
j
v
p
v
i
·
c
u
j
c
j
v
c
v
i
]]>
式中,puj为用户u传播到其邻居项目j的传播概率,pjv为项目j传播到其
邻居用户v的传播概率,pvi为用户v传播到其邻居项目i的传播概率;cuj为用户
u传播到其邻居项目j的传播损耗,cjv为项目j传播到其邻居用户v的传播损
耗,cvi为用户v传播到其邻居项目i的传播损耗;
步骤5、针对某个目标用户,根据步骤4所得到的该目标用户对各个项
目的得分进行排序,然后推荐其中N个得分最高的项目给该目标用户;其中N
为设定值;
上述u和v均为用户,VU为用户集合,u∈VU,v∈VU;i和j均为项目,VI为
项目集合,i∈VI,j∈VI。
步骤3中,项目j的K个最近邻居项目集合KNN(j)的确定过程如下:
先根据下式计算项目j与项目k的相似度sjk,即:
s
j
k
=
Σ
v
∈
V
U
r
v
j
r
v
k
Σ
v
∈
V
U
2
r
v
j
2
Σ
v
∈
V
U
r
v
k
2
]]>
式中,rvj为用户v对项目j的评分;rvk为用户v对项目k的评分;
再将项目j与项目k的相似度进行排序,并从中选取出K个相似度sjk高的
项目形成j的最近邻居项目集合KNN(j);
上述v为用户,VU为用户集合,v∈VU;j和k均为项目,VI为项目集合,
j∈VI,k∈VI。
与现有技术相比,本发明由于考虑了项目评分的详细信息、抑制了高流
行度项目的推荐能力、提高了兴趣专一用户的推荐能力、并且只为目标用户
已评论过项目的最近邻居项目传播资源、排除了不相关项目的干扰,不仅可
以获得更好的精确度,并且能获得更好的整体多样性、销售平衡与个体多样
性。
附图说明
图1为资源在二部图中通过一条路径传播的过程。
图2为不同算法在Precision、Gini系数、ILS方面的表现。其中(a)
为在MovieLens数据集上各个算法的Precision性能,(b)为在Netflix数
据集上各个算法的Precision性能,(c)为在MovieLens数据集上各个算法
的Gini系数性能,(d)为在Netflix数据集上各个算法的Gini系数性能,
(e)为在MovieLens数据集上各个算法的ILS性能,(f)为在Netflix数据
集上各个算法的ILS性能。
具体实施方式
一种面向多样性的推荐方法,包含以下步骤:
步骤一:构建用户-项目二部图G。
将用户-项目关系表示为二部图G=(V,E),其中V表示节点集,E表示边集。
VU为用户集合,u为用户,u∈VU;VI为项目集合,i为项目,i∈VI。如果用户u
评论过项目i,则用户u与项目i之间存在一条边,并且该条边的权重wui=wiu=rui,
rui表示用户u对项目i的评分。
步骤二:资源传播。
预测目标用户u对项目i的得分的过程即资源从用户u出发经过三步传播
到项目i的过程,参见图1,即:
第一步(图1中step1)从用户u传播到其邻居项目j。所谓用户u的邻
居项目j即在二部图G中与用户u通过边相连的项目。
第二步(图1中step2)从邻居项目j传播到其邻居用户v。所谓邻居项
目j的邻居用户v即在二部图G中与项目j通过边相连的用户。
第三步(图1中step3)从邻居用户v传播到其邻居项目i。所谓邻居用
户v的邻居项目i即在二部图G中与用户v通过边相连的项目。
用户和项目统称作节点,当需要对用户和项目两类节点进行统一描述时,
以下采用x和y来泛指用户或项目节点,且y为x的邻居节点。由于上述每一
步的传播过程均考虑传播概率pxy与传播损耗cxy,因此从节点x传播到邻居节
点y的资源数RN为:
RN=R(x)·pxy·cxy(1)
式中,R(x)为节点x具有的资源,pxy为传播概率,cxy为传播损耗。
传播概率pxy描述了多少资源从节点x出发向邻居节点y传播,与节点x相
关。传播概率pxy的计算公式为:
p
x
y
=
w
x
y
Σ
y
w
x
y
,
w
x
y
=
r
x
y
,
x
∈
V
U
r
y
x
,
x
∈
V
I
-
-
-
(
2
)
]]>
式中,wxy为连接节点x与y的边上的权重,rxy为当x属于用户节点而y属
于项目节点时用户x对项目y的评分,ryx为当x属于项目节点而y属于用户节点
时用户y对项目x的评分。
用户u传播到邻居项目j的传播概率puj,邻居项目j传播到邻居用户v的
传播概率pjv,邻居用户v传播到项目i的传播概率pvi均使用公式(2)计算,具体
来说:
上述用户u传播到其邻居项目j的传播概率puj为:
p
u
j
=
r
u
j
Σ
j
∈
V
I
r
u
j
]]>
式中,ruj为用户u对项目j的评分。
上述项目j传播到其邻居用户v的传播概率pjv为:
p
j
v
=
r
v
j
Σ
v
∈
V
U
r
v
j
]]>
式中,rvj为用户v对项目j的评分。
上述用户v传播到其邻居项目i的传播概率pvi为:
p
v
i
=
r
v
i
Σ
i
∈
V
I
r
v
i
]]>
式中,rvi为用户v对项目i的评分。
传播损耗描述了资源在传播过程中的损耗情况,与邻居节点y相关。本
发明区分对待三步传播中的不同邻居节点y,考虑三种因素计算传播损耗cxy,
分别为项目度、用户熵与邻居项目。
首先,考虑到项目的度,将第一步中的传播损耗cuj计算为:
c
u
j
=
1
k
j
,
k
j
=
Σ
u
∈
V
U
1
r
u
j
≠
0
-
-
-
(
3
)
]]>
式中,kj为邻居项目j的度,ruj为用户u对项目j的评分。
其次,使用用户熵来计算第二步中的传播损耗cjv:
c
j
v
=
1
E
(
v
)
,
E
(
v
)
=
-
Σ
j
∈
V
I
p
v
j
logp
v
j
-
-
-
(
4
)
]]>
式中,E(v)为用户v的用户熵,pvj为用户v传播到邻居项目j的传播概率并
使用公式(2)进行计算。
最后,使用项目的最近邻居概念,当项目i不属于目标用户u评论过的邻
居项目j的最近邻居项目时则不进行传播,将第三步中的传播损耗cvi计算为:
cvi=|KNN(j)∩{i}|(5)
式中,KNN(j)表示项目j的K个最近邻居项目集合,其中K为设定值。最
近邻居选取为与项目j的相似度sjk最高的K个项目,其中相似度sjk使用cosin
相似度并基于用户对项目的评分信息来计算:
s
j
k
=
Σ
v
∈
V
U
r
v
j
r
v
k
Σ
v
∈
V
U
r
v
j
2
Σ
v
∈
V
U
r
v
k
2
-
-
-
(
6
)
]]>
式中,rvj为用户v对项目j的评分;rvk为用户v对项目k的评分;k表示项
目,且k∈VI。
据此,考虑用户u的所有邻居项目j与邻居项目j的所有邻居用户v,因此,
目标用户u对项目i的得分即从用户u传播到项目i的资源总数
为:
r
^
u
i
=
Σ
j
∈
V
I
Σ
v
∈
V
U
p
u
j
p
j
v
p
v
i
·
c
u
j
c
j
v
c
v
i
-
-
-
(
7
)
]]>
式中,puj为用户u传播到其邻居项目j的传播概率,pjv为项目j传播到其
邻居用户v的传播概率,pvi为用户v传播到其邻居项目i的传播概率,puj、pjv与
pvi均使用公式(2)计算。cuj为用户u传播到其邻居项目j的传播损耗,cuj使用
公式(3)计算。cjv为项目j传播到其邻居用户v的传播损耗,cjv使用公式(4)
计算。cvi为用户v传播到其邻居项目i的传播损耗,cvi使用公式(5)计算。
图1描述了用户-项目二部图G中资源通过一条路径从用户u传播到项目
i的过程,项目i的最终资源为通过所有路径传播得到的资源。
步骤三:推荐项目。
将步骤二中目标用户的资源经过三步传播后得到资源的项目,按照最终
得分
(即被传播到的资源数)进项降序排序,然后推荐其中最前面的N个
项目给用户。其中推荐项目个数N为设定值。
下面通过一个具体实例,对本发明进行进一步说明:
设U为用户集合;I为项目集合;U(i)表示评论过项目u的用户;I(u)表示
用户u评论过的项目;S表示项目-项目相似度矩阵;R表示得分预测结果,其
中
表示预测目标用户u对项目i的得分;N为推荐项目个数;L为给所有用户
的推荐列表。
第一步:根据历史评分数据构建用户-项目二部图G;
第二步:根据二部图G计算项目-项目相似度矩阵S;
第三步:根据G和S计算项目-项目传播矩阵T,具体如下:
FOReachiinI:
FOReachvinU(i):
FOReachjinI(v):
tij+=pivpvjcivcvj;
第四步:为每个用户预测项目的得分,具体如下:
FOReachuinU:
FOReachiinI:
FOReachjinI(u):
r
^
u
i
+
=
p
u
j
c
u
j
t
j
i
;
]]>
第五步:为每个用户u从R(u)中选择得分最大的N个未评论过的项目添加
到L(u)。
下面结合真实数据集进一步详细描述。
数据集为MovieLens1M与NetflixPrize。每个数据集都包含了用户对
电影的评分信息,评分为1-5分。下表描述了两个数据集的详细信息:
![]()
对每个数据集,随机选取其中的20%作为测试集,剩余的80%作为训练集。
首先,分别应用五种不同的推荐算法分别为测试集中的每个用户预测未评论
过电影的得分,五种算法分别为:基于用户的协同过滤(UB)、基于用户的最
近邻协同过滤(UBKNN)、矩阵分解(SVD++)、概率传播模型(ProbS)、本发
明的面向多样性的概率传播模型(iProbS)。其中,对于UBKNN,设置邻居个
数为50;对于SVD++并设置因子个数为50;对于本发明模型,在MovieLens
上设置邻居个数K为50而在Netflix上设置邻居个数K为5。其次,根据预
测的得分,依次按照不同的推荐列表长度(从1-50)为用户推荐电影。最后,
使用一种精确度评价指标与三种多样性评价指标对推荐的结果进行评价,评
价指标分别为:准确率(Precision)、整体多样性(Aggr)、个体多样性(ILS)、
销售平衡(Gini系数)。
准确率计算为:
其中,UT表示测试集中所有用户
的集合;Lu表示为用户u推荐的项目集合;rui为测试集中用户u对项目i的
评分。N表示为每个用户推荐的项目个数即推荐列表的长度。;
整体多样性计算为:
高的Aggr值表示高的整体多样性;
销售平衡计算为:
其中n表示项目总数,n(i)
表示项目i被推荐给不同用户的次数,这里使用改进的Gini系数使得高的
Gini值表示高的销售平衡;
个体多样性计算为:
其中,sij表示训练集
中项目i与项目j的相似度,这里使用cosin相似度并使用项目的评分信息
来计算。高的ILS值意味着低的个体多样性。
下表描述了各个算法推荐结果的整体多样性Aggr表现性能。从表中可以
看出,本发明模型(iProbS)在整体多样性性能上远远优于其他几种推荐算
法,说明本发明模型具有重要的实际应用意义。例如,在MovieLens数据集
中推荐列表长度为10(N=10)时,iProbS的整体多样性为2373,而ProbS
仅仅只有109,其他三种算法中表现最好的UBKNN也仅有587。MovieLens数
据集中电影的总数为3706,意味着在为每个用户推荐10个电影时,iProbS
能将64%的电影推荐出去,而算法UB、UBKNN、SVD++、ProbS分别只能推荐
1.9%、15.8%、13.3%、2.9%。
![]()
图2(a)(b)描述了各个算法在准确率Precision方面的表现。图中,横
坐标表示推荐列表长度,纵坐标表示准确率。从图中可以看出,当推荐列表
长度大于5时,iProbS(绿色虚线)在其余所有算法上方,表示iProbS在准
确率性能上优于其他几种算法。证明了本本发明模型在明显提高多样性的也
能获得更好的精确度性能。
图2(c)(d)描述了各个算法在销售平衡Gini系数方面的表现。从图中可
以看出,在两个数据集中,iProbS曲线远远高于另外几种算法曲线,表明
iProbS在销售平衡Gini系数上明显优于另外几种算法,证明了本发明能获
得更好的商品销售平衡性能。
图2(e)(f)描述了各个算法在个体多样性ILS方面的表现。根据前文描
述可知,ILS值越低表示个体多样性越高,因此图中个体多样性性能SVD++
优于iProbS。但是同时,SVD++的准确率远远低于平均水平,而准确率过低
的推荐结果是无意义的。图3(e)(f)中除SVD++以外的四种算法中,iProbS
的ILS值明显低于其余三种,证明了本发明能获得更好的个体多样性性能。