推荐系统笔记二、矩阵分解协同过滤

来源:互联网 发布:淘宝怎么养好 编辑:程序博客网 时间:2024/05/15 23:54

参考:http://blog.csdn.net/wangjian1204/article/details/50465109

一、概述:

矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。通常推荐系统可以用于模型训练的信息主要有用户的显式反馈、隐式反馈和时间信息等。显式反馈(explicit feedback):用户直接表明对item的兴趣,例如评分[1,2,3,4,5]. 隐式反馈(implicit feedback):通过观察用户行为得到的信息,例如浏览历史、搜索记录等。

二、符号定义和度量标准:

  • U:用户集合;I:item集合;
  • R:评分集合,rui表示用户uU对item iI的评分;r̂ ui表示预测评分;
  • K:(u,i)集合,且评分rui已知;
  • tui:用户u对item i评分的时间;
  • Ui:已经给item i打分的用户集合;Iu:已经被用户u打分的item集合;

        评价推荐系统时最重要的两个问题是评分准确率Top-N推荐问题。评分准确率问题常用的度量标准有Root Mean Squared Error (RMSE),Precision,Recall等。Top-N推荐常用的度量标准有NDCG,Average Reciprocal Hit-Rank(ARHR)等。

三、偏置项:

        矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。但是,仅仅这样是不够的,例如A和B两个用户的偏好类似,但是A比较容易满足,倾向于给item打高分;而B倾向于给item打低分(Item上也有类似的情况)。为了解决这个问题,需要为每个用户和item增加一个偏置项。评分rui的偏置部分定义为: 

bui=μ+bu+bi

其中μ是评分集合R中所有评分的均值,bu是用户u的偏置,bi是item i上的偏置。可以通过梯度下降算法最优化下面这个式子来求解bu,bi: 

minb(u,i)K(ruiμbubi)2+λ(ub2u+ib2i)

正则化项λ(ub2u+ib2i)可以避免过拟合。关于梯度下降算法的详细介绍可以参考我的另一篇博文: 深入了解梯度下降算法

        另外还有一种简单的偏置项计算方法,如下所示: 

bi=uUi(ruiμ)β1+|Ui|bu=iIu(ruiμbi)β2+|Iu|

式子中的β1,β2是平滑因子。这种方法直接通过解析式计算偏差均值,计算简单,但是结果准确度较差。

四、SVD矩阵分解:

在推荐系统矩阵分解的发展历程中,有研究员提出先对评分矩阵进行补全,从而可以对一个dense矩阵进行分解。但是这样做有两个缺点:一是补全数据和dense 矩阵分解大大增加了计算量;二是不精确的评分补全会导致结果有较大的偏差。所以目前的研究工作都建议使用原始的稀疏评分矩阵,并且使用正则化项来避免过拟合。

        假设用户u投影到f维隐空间后的向量表示为puRf,item i的隐空间表示为qiRf。隐空间的每一维都表示一个偏好因子,则用户u和item i的匹配程度可以用他们的内积qipu来衡量。计算预测评分: 

r̂ ui=μ+bi+bu+qipu

模型参数bi,bu,qi,pu通过最优化下面这个目标函数获得: 

minbi,bu,qi,pu(u,i)K(ruiμbubiqipu)2+λ{u(b2u+pu2)+i(b2i+qi2)}

        可以用梯度下降方法或迭代的最小二乘算法求解。在迭代最小二乘算法中,首先固定pu优化qi,然后固定qi优化pu,交替更新。梯度下降方法中参数的更新式子如下(为了简便,把目标函数中的μ+bi+bu+qipu整体替换为r̂ ui):

  • bubu+α(ruir̂ uiλbu)
  • bibi+α(ruir̂ uiλbi)
  • qiqi+α((ruir̂ ui)puλqi)
  • pupu+α((ruir̂ ui)qiλpu)

其中α是更新步长。

五、SVD++:

        用户的隐式反馈可以提供额外的偏好信息,能在一定程度上提高预测准确性。例如SVD++把用户是否对item打分作为一种隐式反馈。 

r̂ ui=μ+bi+bu+qi(pu+|Iu|12jIuyj)

对于用户u打分的item,增加一个隐偏好属性yjRf,表示用户u对打分item的某种偏好。正则化项|Iu|12用于消除用户评分个数的影响。

        模型参数bi,bu,qi,pu,yj通过最优化下面这个目标函数获得: 

minbi,bu,qi,pu(u,i)K(ruiμbubiqi(pu+|Iu|12jIuyj))2+λ{u(b2u+pu2)+i(b2i+qi2+yi2)}

与SVD类似,可以通过梯度下降方法求解参数。

        如果要加入多种隐式反馈信息,如收藏、租借等,则在用户偏好属性中加入多个隐式反馈项即可: 

r̂ ui=μ+bi+bu+qi(pu+|I1u|12jI1uy1j+|I2u|12jI2uy2j+)

六、加入时间信息:

时间信息在推荐中有很重要的地位。一个用户对某个item的评价可能在一年后会发生很大的变化。时间信息可以告诉我们用户在某个时间点对item的喜好程度以及随着时间推移用户偏好的改变。

        在SVD模型中,容易随时间发生变化的参数有:bu如用户打分的严格程度发生改变;bi如item的流行度发生改变;pu用户的喜好发生改变。由于item的属性往往是固定不变的,所以可以认为qi是恒定的。下面介绍bu,bi,pu各项常用的时间函数表示。

bi项:

b1i(t)=bi+bi,Bin(t)

bi是一个常数项偏置,bi,Bin(t)是一个分段函数,Bin(t)是t所在的分段编号。例如从2000年到2016年,每一年分为一段,则总共有16段,如果t是2015年的某一天,则Bin(t)=16

b2i(t)=bi+bi,Bin(t)+bi,period(t)

b1i(t)相比,b2i(t)增加了一个周期项bi,period(t)用来处理周期性的偏差,如羽绒服在不同季节评价的偏差

bu项:

        首先构建用户评分偏置的线性渐变模型(例如用户u的平均评分可能越来越高):定义用户u评分的平均时间为tu,那么在t时刻: 

devu(t)=sign(ttu)|ttu|β

参数β通过交叉验证获得。

b1u(t)=bu+αudevu(t)

b1u(t)每个用户包含两个参数bu,αu

b2u(t)=bu+kul=1eδ|ttul|butlkul=1eδ|ttul|

b2u(t)设置ku个时间点tu1,...,tuku,参数δ通过交叉验证学习得到,butl从评分数据中学习。

b3u(t)=bu+αudevu(t)+bu,t

b3u(t)b1u(t)相比,增加了一项bu,t,用于处理每一天有可能产生的突变。例如用户u在某一天对item 的评分都很高,可能是因为他那天心情很好

b4u(t)=bu+kul=1eδ|ttul|butlkul=1eδ|ttul|+bu,t

同样的,b4u(t)b2u(t)的基础上增加了bu,t。另外,以上这四种方法都可以添加周期项bu,period(t)来处理用户的周期性偏差。

pu项:

        随着时间的改变,用户的喜好也在发生变化,所以把用户的偏好pu作为一个时间函数会比较合适。pu的时间函数和用户的偏置项bu类似,例如: 

pu(t)=pu+αudevu(t)+pu,t

有了前面三项的时间函数,timeSVD++的预测函数如下: 

r̂ ui=μ+bi(tui)+bu(tui)+qi{pu(tui)+|Iu|12jIuyj}

        最后有个问题,预测函数中如何设定未来某一天的参数,如bu,tpu,t?事实上,在训练模型中加入局部时间项主要是为了获得更好的稳定项(如buαudevu(t)),所以在预测过程中可以忽略局部时间项(同时这个也无法计算得到),用稳定项来预测评分。

七、参考资料

Recommender Systems Handbook


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4孩子受凉了呕吐怎么办 尿多是什么原因造成的怎么办 5岁宝宝老尿床怎么办 五岁了还尿床怎么办 2岁宝宝晚上尿床怎么办 胃疼腹泻稀水怎么办 网购成瘾怎么办 知乎 军人被警察打了怎么办 对高院再审不服怎么办 对高院判决不服怎么办 白色砂锅烧黑了怎么办 手机被偷关机了怎么办 狗被眼镜蛇咬了怎么办 穿高跟鞋脚趾头长茧怎么办 穿皮鞋脚底板疼怎么办 鞋子穿了脚趾痛怎么办 脚被鞋子磨肿了怎么办 脚趾磨出茧子怎么办疼 脚掌长茧走路疼怎么办 脚底磨出茧子疼怎么办 手指上写字有茧怎么办 写字磨的茧子疼怎么办 脚上的大脚骨疼怎么办 脸特别烫 又红怎么办 6岁宝宝发音不准怎么办 3岁宝宝发音不准怎么办 5岁宝宝发音不准怎么办 4岁宝宝发音不准怎么办 被螃蟹夹出血了怎么办 苹果6主板坏了怎么办 键盘掉了一个键怎么办 汽车屏幕砸坏了怎么办 电视的屏幕坏了怎么办 高三孩子早恋该怎么办 高一早恋家长该怎么办 高二早恋家长该怎么办 200斤新娘抱不动怎么办 160斤新娘抱不动怎么办 科目二挂了5次怎么办 纹身纹完了肿了怎么办 在宿舍被孤立了怎么办