3. 主要推荐算法

Download Report

Transcript 3. 主要推荐算法

钟文波 | [email protected]
2013-05-17, Friday
training_set数据集:
 训练集大小:1262741
 用户数:9722(平均每用户评分130部电影)
 电影数:7889(平均每部电影被160用户评分)
 全局评分平均数:3.678 (RMSE:0.6900)
 评分分布:
1
2
3
4
5
17139
64298
400006
608401
172897
1.36%
5.09%
31.68%
48.18%
13.69%
movie_tag数据集:
 标签数量范围:(1~ 52)
user_history数据集:
 历史记录数量:987W
 历史记录用户ID及电影ID在训练集中:1577431
猜测用户观看历史数据中用户对于电影的评分:
 如果用户ID&&电影ID在训练集中的平均评分大于全局平
均评分,则取对应的评分值为大于全局平均数的值。
 如果用户ID&&电影ID在训练集中的平均评分小于全局平
均评分,则取对应的评分值为小于全局平均数的值。

其余取全局平均分或者介于以上两个评分的评分。
user_social数据集

单向关注的社交网路数据 ;类似于新浪微博,用户A可以
关注用户用户B而不需要得到用户B的允许,这种社交网络
中的用户关系是单向的,可以用有向图表示。
模型
RMSE
全局评分值
0.72
以用户评分平均值作为预测评分
0.66
以电影评分平均值作为预测评分
0.66
基于用户的协同过滤
0.6421
基于物品的协同过滤
0.6120
slopeone
0.6489
LFM
0.6227
加入偏置LFM
0.6172
考虑邻域影响的LFM(SVD++)
0.6231
以Bias-SVD为基准的user-base
0.6142
以Bias-SVD为基准的item-base
0.6049
线性拟合模型
0.6012
基于物品的协同过滤推荐算法:
(1)计算电影相似度,得到K个最近邻居
(2)预测用户对于电影的打分
改进的余弦计算公式:
sim(i, j ) 
皮尔逊相似度计算公式:
sim(i, j ) 

(ru,i  ru )(ru, j  ru )

(ru ,i  ri )(ru , j  rj )
uU
2
(
r

r
)
uU u,i u
uU
2
(
r

r
)
uU u,i i
2
(
r

r
)
uU u, j u
2
(
r

r
)
uU u, j j
(1)基于物品的协同过滤相似度压缩:
例如计算item1,item2之间的相似度,如果A表示对
item1评分过的用户集合,B表示对item2评分过的用户集
合,压缩系数公式表示如下:
AB
S  punishFactor(item1, item2) 
AB
增加压缩系数后皮尔逊相似度计算公式:
sim(i, j )  S *

uU
(ru,i  ri )(ru , j  rj )
2
(
r

r
)
uU u,i i
2
(
r

r
)
uU u, j j
(2)利用电影标签信息改进相似度的计算:
基于邻居的协同过滤推荐算法(Item-Base)当中,对于数据
集movie_tag ,利用这个数据集来求两部movie之间的相似度。
我们可以这么认为如果两部电影具有相同的标签,那么这两
部电影之间是具有一定的相似度的,相同标签越多它们则具
有更高的相似度。在标签系统中,两部电影之间的相似度用
两部电影的共同标签数除以两部电影的总标签数成正比。
如果用A表示movie1的标签,B表示movie2的标签,则在标
签系统中两部电影的相似度可以表示为:
AB
St  Sim ilarByTag(m ovie1, m ovie2) 
AB
(3)利用用户观看电影历史记录信息改进相似度的计算:
基于邻居的协同过滤推荐算法(Item-Base)当中,对于数据
集user_history 。我们可以这么认为如果两部电影具有相同的
观看用户,那么这两部电影之间是具有一定的相似度的,相
同观看用户越多它们则具有更高的相似度。
如果用A表示观看过movie1的用户,B表示观看过movie2的
用户,则利用用户观看电影历史记录,两部电影的相似度可
以表示为:
AB
Sh  Sim ilarByUserHis(m ovie1, m ovie2) 
AB
最终item相似度的计算公式:
惩罚系数:
S  punishFactor(item1, item2)
通过标签计算的相似度:
St  SimilarByTag(movie1, movie2)
观看历史计算的相似度:
Sh  SimilarByUserHis(movie1, movie2)
sim(i, j )  S * Pearson(i, j ) *
(1 a * St )
*
(1  b * Sh )
预测评分阶段:
(1)预测评分计算公式(以电影平均分作为基准评分):

p(u, i)  r 
jJ
i
sim(i, j)  (ru , j r j)

jJ
sim(i, j)
(2)最终预测评分计算公式(以SVD预测作为基准评分):
p(u, i)  bu, i


jJ
sim(i, j)  (ru, j bu, j )

jJ
sim(i, j)
加入偏置后的LFM计算公式:
(2)Netflix Prize——BiasSVD
实际情况下,一个评分系统有些固有属性和用户物品
无关,而用户也有些属性和物品无关,物品也有些属性和
用户无关。
rˆui  mean bu  bi   puf qif
f
mean 训练集中所有记录的评分的全局平均数。网站不同,网站的整体评
分分布也会显示出一些差异。
bu 用户偏置项。这一项表示了用户的评分习惯中和物品没有关系的那种
因素。
bi 物品偏置项。这一项表示了物品接受评分中和用户没有什么关系的因
素。
加入偏置后的LFM计算公式:
(2)Netflix Prize——BiasSVD
定义损失函数: rˆ  mean b
ui
u
 bi   puf qif
f
C ( p, q ) 
 rui  rˆui 
2
( u ,i )Train
  (|| pu ||2  || qi ||2 )
最小化上边的损失函数,根据随机梯度下降法,得到递推公式。
加入偏置后的LFM计算公式:
(1)梯度下降法(参数Gamma1,Lambda1,Gamma2,
Lambda2),最小化损失函数,根据随机梯度下降法,得
到如下递推公式:
eui  rui  rˆui
bu  bu   1 * (eui  1 * bu )
bi  bi   1 * (eui  1 * bi )
puf  puf   2 * (eui * qif  2 * puf )
qif  qif   2 * (eui * puf  2 * qif )
γ是学习速度,取值需要通过反复试验获取,每一次迭代对γ进行衰减(γ*=0.9),这
是随机梯度下降算法要求的,目的是使算法尽快收敛。
加入偏置后的LFM计算公式:
(1)影响算法的主要因素:
• 1、Dimension数(factor数)
• 2、P、Q矩阵的初始值( nextFloat()/Math.sqrt(factor))
• 3、学习速率与正则化系数(Gamma1,Lambda1,Gamma2,
Lambda2)
• 4、bi[]、bu[]初始化,bi[]、bu[]一般初始化为0
模型拟合:
(1)预测值线性拟合
method:假设我们有K个不同的预测器。
K
rˆ   ak rˆ ( k )
k 1
(1)《推荐系统实践》项亮
(2)《Netflix Prize 中的协同过滤算法》吴金龙
(3) Baidu URL:http://www.baidu.com
(4)《How we won the Netflix progress prize》Yehuda Koren