菜单

矩阵分解在引进系统中的应用

2019年3月30日 - 注册免费送38元体验金

 

矩阵分解是最近几年相比较火的算法,经过kddcup和netflix比赛的多少人反复检验,矩阵分解能够推动更好的结果,而且能够尽量地考虑各个因素的熏陶,有丰裕好的扩张性,因为要考虑四种成分的综合效率,往往要求协会cost
function来将矩阵分解难点转化为优化难点,依据要考虑的要素为优化难题添加constraints,然后经过迭代的点子开始展览矩阵分解,原来评分矩阵中的missing
vlaue能够由此分解后获得的矩阵求的。

本文将不难介绍下近年来求学到的矩阵分解方法。

(1)PureSvd

怎么评价那种措施吗?开端认为那种艺术很神奇很数学,而且在实际应用的时候也相当好用。

但多年来读了Yehuda大神的paper之后,觉得那种格局比较粗俗。

其实,矩阵分解的为主是将三个可怜稀疏的评分矩阵分解为七个矩阵,三个意味user的特点,贰个表示item的个性,将三个矩阵中各取一行和一列向量做内积就足以获取相应评分。

那便是说如何将一个矩阵分解为五个矩阵正是唯一的题材了。

说到此地我们就只怕想起了在线代和数值分析中学到的各样矩阵分解方法,Q凯雷德,Jordan,三角分解,SVD。。。

此地说说svd分解。

svd是将一个任意实矩阵分解为多个矩阵U,S,V,其中,U,V是多个正交矩阵,称为左右奇异矩阵,S是个对角阵,称为奇异值矩阵。

其实svd分解的标题得以消除为特征值分解的难点。

评分矩阵A(m*n)=U(m*k)*S(k*k)*V'(k*n)

令B(m*m)=A(m*n)*A'(n*m)

B矩阵正是一个方阵,可以选拔各类简单的方法将B实行特征值分解:

Bv=av,

v是方阵B的特征向量,a是特色向量v对应的特征值。

从而奇异值s=sqrt(a),

左奇异向量u=A*v/s

如出一辙的不二法门能够求得右奇异向量。

如此那般我们就赢得了svd分解后的八个矩阵。(你能够本身写个c程序计算,当然也可以用matlab算算取得)

表明后的多少个矩阵都存有各自的意思,

U:每一行表示3个user的性状。

V:每一列表示2个item的性子。

S:表示对应的user和item的相关性。

为此能够考虑用U和V将S吸收进来,形成八个矩阵分别表示user的矩阵和item的矩阵。

获得那些未来后边的事体就好办了。

怎么说这几个艺术猥琐呢?

因为作者觉得,那种方法有着矩阵分解算法的表,却能够十分简单地达成矩阵的分解,然后填充稀疏的评分矩阵。

但它考虑的因素太少了,不过对于简易的引进系统,这种格局还是不行有含义的,简单达成,而且结果也不会太差。

(2)Latent Factor Model

那是真正的矩阵分解算法,经超过实际践验证,具有拾分高的准确性和易扩张性。

正如上边提到的,完毕推荐系统结果的靶子是将那个稀疏的评分矩阵分解成五个矩阵,八个象征user的feature,1个代表item的feature,然后做内积得到预测。

本来要落实满足一定约束原则的矩阵分解,可不像下面的PureSVD那样简单,必要组织1个优化难点,用部分错综复杂的算法求解优化难题。而这一个优化难题往往是NP难点,唯有部分最优解。

先是构造一个优化目的函数,

设想到最后的评说目标是预计分值和事实上分值之间的误差的平方(帕杰罗MSE),所以组织的对象函数也是误差的平方的函数。

干什么如此的算法能够获得更优的结果吧?因为算法能够很不难地扩张很多的feature进来,尤其可观地考虑了种种震慑推荐效果的逼真的因素。

 

因为部分用户总是会打出比旁人高的分,或然说有的用户他的评价尺度相比宽大;同样一些item总是被打高分。那是三个普遍存在的题目,所以在结构指标函数的时候要求追加几项:全部评分的平均值miu,user的偏见分数bu,item的偏见分数bi。

比如:求用户x对电影y的打分,

持有评分电影的评分的平分分是miu=3.5,

影视y比有所评分电影平均分高bi=0.5

可是用户x是个比较严刻的用户,评分总是相对偏低,所以bu=-0.3

由此用户x对电影y的打分为3.7

用户在行使web应用的时候,会时有爆发大量的表现,充裕发掘这一部分的价值,将会很好地进步推荐的功用。

行使用户的隐式反馈,也便是丰富的行使了评分矩阵中的missing
value的价值,用户在页面包车型客车停留时间,检索,浏览,点击等等各样行为都能够建立模型,内含到目的函数中。

此间,能够将不难地用二个Boolean来描述一种行为有依然没有。

不过在应用的时候,要求进行归一化处理。

依照用户的社会化属性举办推荐介绍也是一种很基本的引进,当然也足以设想到指标函数中。

用户的志趣包罗长时间和短时间,动态地考虑一段时间内用户的兴趣是很有须求的。

上边的多少个要素中趁着时光变更的有,user的bias项bu=bu(t),item的bias项bi=bi(t),以及user的factor向量pu=pu(t),这里可以忽略item的factor向量的扭转,因为item是比较稳定的。

因为在处理上述的要素的时候,很多都以比较主观的,所以需求给每一种因素丰富一个相信权重,以抵消整个结果。

 

通过结构出那一个目的函数,然后添加相应的约束规范,接下去的题材正是求解这一个优化难点。

常见相比较好的章程是Stochastic gradient desent。

 

PS:那种艺术是明日教育界的主流格局,大家能够参阅Yehuda的神作(http://research.yahoo.com/Yehuda_Koren)以及上海医中国科学技术大学学在当年kddcup获奖方法的paper以及他们的开源系统(http://apex.sjtu.edu.cn/apex_wiki/svdfeature

 

 

 

(3)NMF(非负矩阵分解)

众三人用那种情势是因为他们认为唯有二个非负的值对于实际的例子才会有意义。

设想到svd恐怕latent factor
model会获得负的值,所以那种方法的情理意义比较分明。

平等的道理,NMF也是将评分矩阵的转置矩阵分解成四个矩阵。

不等的是那四个矩阵有着和地点的矩阵不一致的大体意义。

个中二个是基矩阵W,另3个是投影矩阵H,即LAND'(n*m)=W(n*r)*H(r*m)

W:每一列包括2个基向量,那组基向量构成3个r维的空间。

H:每一列则类似为原本数据对应的列向量在该r维空间的黑影。

做这一个解释的法门也是构造1个对象函数和一些羁绊规范,然后用梯度降低的算法来计量获得一个有些最优解。

那种格局的笔触差不离是那般的:

 

可以看出来,那种办法的思绪和上面包车型地铁三种依旧很不均等的,主要依然在测算指标用户的近年邻集合,首要考虑照旧knn,只是在中游用了矩阵分解的法门降维下跌了总计的时光复杂度。

 

矩阵分解在念书的时候觉得既没用又麻烦,越发是线代里面做矩阵的表明计算,无聊的很。

今昔总的来说,矩阵分解非凡有意义。

 

 

 

 

 

 

续:

 

近来研商了下Yehuda大神的paper,学习了下矩阵分解方法在举荐系统中怎样用。

正文中涉及的矩阵分解是一般的解释,即宝马7系=M*N的形式。

壹 、矩阵分解方法的根源

CF里的矩阵分解思想是发源于I卡宴领域的Latent Semantic
Analysis(LSA)。google黑板报的《数学之美》中很清楚地讲了SVD分解在IOdyssey中的应用。(http://www.google.com.hk/ggblog/googlechinablog/2006/12/blog-post_8935.html

贰 、矩阵分解的高低

优点是:

 

症结是:推荐的结果不持有很好的可解释性。因为把ratings
matrix分解成user-factor matrix和item-factor
matrix,那里的factor很难用实际意义的概念来诠释。然则,矩阵分解的经过也等于八个软聚类的历程,获得的每二个factor约等于每贰个聚类后的分组,只是大家并未2个通用的形式来为那么些分组命名。

但是在骨子里的利用中,咱们可以领到这么些分组中最卓绝的风味来给那一个factor命名。比如,拿新闻资讯类的引荐系统来说,做好解释之后,各种factor都足以用作是一类资源音信,可以从这个音信中领取部分特色来给这么些factor命名。

 

三 、矩阵分解的模型(Latent Factor Model)

矩阵分解的思绪是把评分矩阵通过分解,用1个低秩的矩阵来逼近原来的评分矩阵,逼近的对象正是让预测的矩阵和原来的矩阵之间的误差平方最小。(矩阵分解一般不要数学上一直表达的主意,固然分解出来的精度很高,不过功效实在太低!矩阵分解往往会转化为三个优化难点,通过迭代求局地最优解。)

可是有个难点是,原来的评分矩阵的稀疏度太大,分解很不难生出overfitting(过度拟合,意思即是为了退让一些错误的偏僻的值导致整个模型错误)的标题。所以今后的措施是在对象函数中扩充一项regularization(正则化),来制止overfitting问题。

因而一般的矩阵分解的对象函数(只怕叫做loss function)是:

注册免费送38元体验金 1

前一项是猜想后的矩阵和水保的评分矩阵的误差,那里计算只针对评分矩阵中一度评分的项。

后一项正是正则化项,用来消除过于拟合的难题。

其一优化难题求解的就是表明之后的user-factor,item-factor矩阵的factor向量。(qi是item的factor向量,pu是user的factor向量)

求解那么些优化难点常用三种艺术,一种是alternative least
squares(交叉最小二乘法),另一种是stochastic gradient
descent(随机梯度降低法)。

前一种方法会涉及到矩阵的求逆难点,所以总计起来会比较费心。

后一种格局,只需供给梯度,就能够迭代计算了,因而会不难很多。

迭代方程如下:

注册免费送38元体验金 2

注册免费送38元体验金 3

其中,gamma是读书速率,lamda是正则化周全,是五个可选的参数,而且对于最终的结果非凡首要。

那里,gamma的轻重不仅会潜移默化到教练时间,还会影响到结果的收敛性。gamma太大的话会招致结果发散,一般都会把gamma取得十分的小,区别的数据集取得值分歧,但大体是0.001以此量级。那样的话练习的时刻会长一些,但结果会相比好。

lamda的值一般也正如小,差不多取0.01以此量级就好了。

迭代启幕前,须要对user和item的特征向量赋初值,那几个初值很重庆大学,会严重地影响到计算速度。一般的做法是在拥有已评分的平均分附近发生局地肆意数作为初值。

迭代告竣的规格相似是loss function开端扩展了,也许loss
function的值小于了某贰个阈值。

当大家获得总结出来的user,item的factor向量后,最终预测结果时有二种选择,一种是保存总计出来的小数rating,一种是将这个小数rating四舍五入并压缩到[1,5]以此区间内。

对此实际的引进系统的话,结果是小数如故平头,没有所谓,因为我们并不会把预测的分数给用户看,而只是回来三个推荐列表。

但对此线下磨炼参数可能做杂文的童鞋来说,分歧的拍卖措施赢得的奇骏MSE只怕MAE的值可分裂。

本身用那一个的算法对movielens
100k的小数码做了测试,用十分的短的大运就能够总结好,可是那个参数的选拔需求不断地用PAJEROMSE
来总结得出。在任何的音讯都并未行使的情事下,也足以收获0.90这几个量级的汉兰达MSE。

 

四 、扩充一些扩大项

上边的模子中只简简单单的用了已知的评分数据,很多的音讯都没有设想进来。

(1)增加biases信息

因为某些user总是趋向于打三个很高的分,而一些user相比较严刻,总是打1个极低的分,有的item总是被打一个很高的分,而有些item总是被低估。所以大家必要给模型扩张biases项,loss
function如下:

注册免费送38元体验金 4

迭代方程变成了:

注册免费送38元体验金 5

一样的主意,只是多了对bu和bi的赋初值。

平等,笔者用movielens的100k数码总计,得到的索罗德MSE值也在0.90以此量级,但完全要比没有考虑biases结果好。

(2)增加implicit feedback信息

评分是1个显性的举报格局,然则在很多时候显性的反馈很少很少,而user的大队人马行为都得以展示出她们对item的态势,所以利用implicit
feedback是十一分须要的。给模型扩大implicit feedback项,预测模型如下:

注册免费送38元体验金 6

迭代方程如下:

注册免费送38元体验金 7

implicit
feedback音信对于超级市场来说,可能是买入,浏览等等作为,对于Netflix那样的网站的话,可能是浏览,租售等等。

 

(3)考虑temporal信息

因为用户的兴味也许对某三个item的千姿百态是和时间关于的,比如说,可能我当年不太喜欢羽绒服那么些事物,因为自身用不着,所以小编不会购销,但只怕若干年后本人只好穿西装的时候,作者决然会去买,也正是说作者给推荐系统留住本身欣赏马夹那一个东西的回忆。(就算笔者真的不欣赏奶罩。)

动态地考虑user的趣味只怕供给是可怜须要的。

 

矩阵分解是及时分外流行的算法,能够考虑将那种算法和观念的KNN结合在一齐来做推荐,相信效果会很不错。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图