协作推荐
Posted: August 21st, 2009 | Author: laomi | Filed under: 推荐系统 | Tags: 协作推荐, 相似度计算, 推荐系统 | No Comments »前面的文章介绍了基于内容的推荐方法,它使用的是用户的过去的浏览记录来给用户做推荐,而协作推荐它是使用与用户喜好相似的用户们的喜好推荐给此用户,所以协作推荐系统它所看到的推荐项实质上是与他有相似喜好用户的浏览记录。例如一个电影评价网站中,系统会根据你在系统中的浏览记录,在系统中找出与你喜好相似的用户群,然后再将他们的喜好推荐给你。
协作推荐的效用函数的表达:项目s对于用户c的效用函数值主要取决于与用户有相似用户效用函数的值。例如:在电影推荐系统中,你所得到推荐项是那些和你有相同喜好的用户们的最喜欢的电影。根据协作过滤的算法,一般将协作过滤的方法分为两类:启发式的协作过滤和基于模型的协作过滤。
启发式协作过滤主要是根据所有用户以前评价过的项目记录来进行评价预测(就是计算效用函数的值,或者是说来运用说有的用户的评价项目来进行推荐),根据前面的知道我们知道,启发式的方法主要是凭借经验来计算效用函数。启发式的协作过滤对于用户c来说他对项目s的评价值(效用函数的值)就是其他的用户对项目s的评价值的聚合,运用公式的表达形式如下:
[pmath size=14]{r_{c,s} = aggrr_{c,s prime }}under{c prime notin hat{C}} ~~~delim{[}{1}{]}[/pmath]
在表达式[1]中[pmath size=8];hat{C}[/pmath]表示的是对项目s已经评价过的所有与用户c相似的用户的集合。一些关于集合函数如下:
- [pmath size=10]r_{c,s}= 1/N sum{c prime notin hat{C}}{}{r_{c,s prime }} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(a)[/pmath]
- [pmath size=10] r_{c,s}= k sum{c prime notin hat{C}}{}{sim(c,c prime) r_{c,s prime }}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(b) [/pmath]
- [pmath size=10]r_{c,s}= overline{r_{c}} + k sum{c prime notin hat{C}}{}{sim(c,c prime) * (r_{c,s prime} – overline{r_{c}})}~~~~~~~~~~~~~~(c)[/pmath]
在公式(b)和(c)中k充当的是一个归一化参数,k的取值常常是:[pmath size=8] k= 1{/}sum{c prime in hat{C}}{}{delim{|}{sim(c,c prime)}{|}[/pmath],在公式(c)中,用户c的平均评价值的计算公式为:[pmath size=8] overline{r_{c}} = (1 {/} delim{|}{S_{c}}{|})sum{s in S_{c}}{}{r_{c,s}}, where S_{c} = delim{lbrace}{s in S_{c} delim{|}{r_{c,s}}{} <> varnothing}{rbrace} [/pmath]。但是在上述的三个公式(a)(b)(c)中,公式(a)直接通过计算与用户c相似的用户的对于推荐项s的评价的平均值进行计算,从而给用户c的评价r的值。公式(b)中考虑了一些权值问题和归一化问题,其中主要是考虑了其他用户与用户c 喜好的相似程度,k主要是对相似度做了归一化运算。至于公式(c)在公示(b)的基础之上考虑了用户c 的评价习惯和其他用户与用户c评价之间的差异性问题。
在协作推荐系统中有很多方法来计算两个用户之间的喜好的相似性问题,但是常见的相似性计算的方法有:相关性方法和基于cosine值的方法。在相关性方法中常常是通过计算两个用户之间的相关系数来计算两个用户之间的相似性问题:
[pmath size=10] sim(x,y) = sum{s in S_{xy}}{}{(r_{x,s}-overline{ r_{x}})(r_{y,s}-overline{ r_{y}})}/ sqrt{ sum{s in S_{xy}{}{ (r_{x,s}-overline{ r_{x}})^2 } sum{s in S_{xy}{}{ (r_{y,s}-overline{ r_{y}})^2 } } [/pmath]
在基于cosine值的方法中,是通过计算两个m(m的值为有相同评价记录的数量)维向量的cosine值来进行,o用公式的表示为:
[pmath size=10] sim(x,y) = cos(vec{x},vec{y}) = {vec{x}.vec{y}}/{delim{vert}{x}{vert}_2 * delim{vert}{y}{vert}_2} = sum{s in S_xy}{}{r_{x,s} r_{y,s}} / {sum{s in S_xy}{}{{r_{x,s}}^2}sum{s in S_xy}{}{{r_{y,s}}^2}} [/pmath]
上述公式中的[pmath size=8]S_xy = delim{lbrace}{s in S delim{|}{r_{x,s}<> varnothing & r_{y,s}<> varnothing}{}}{rbrace}[/pmath]。在协作推荐系统中,这些用户相似性计算都是预先计算好的,等到用户登入到系统之后,系统会根据事先计算好的用户相似性计算的结果给用户做推荐。
在基于内容的推荐方法中有基于cosine值的相似度计算,但是在协作推荐方法中也有基于cosine值的相似性计算,这两者之间是不一样的。在基于内容的推荐方法中给予cosine值计算的是由tf-idf计算出来的内容的向量,从而计算内容之间的相似性,而协作推荐方法计算的是用户的评价值。
基于模型的方法就是根据其他用户的评价值去得出一种模型用来做预测、推荐。这部分主要是根据与用c相似的用户来学习出用户对于评价的具体值的概率,然后再计算出用户c的评价值。常常用到的方法就是聚类分析和贝叶斯网络。
协作推荐能够根据其他用户的评价项向用户做推荐,它的局限性主要有:
- 新用户问题。新用户由于一上来没有什么浏览记录,很难从其他用户中找出相似性比较高的用户来今天推荐。
- 新推荐项问题。当推荐系统中添加了一个新的推荐项,而基于协作的推荐方法是找出与用户相似较高的用户的评价比较高的项目推荐给用户。当一个新的推荐项添加到系统中之后,所有的用户都是没有访问过的,因为它不能被推荐。
- 稀疏问题。由于推荐的结果只是所有推荐项中很少的一部分,从而那些大部分的推荐项很难推荐到。
Leave a Reply