进行推荐一

来源:互联网 发布:flashplayer mac 编辑:程序博客网 时间:2024/06/05 02:23

引言
前面提到的两种典型的推荐算法,他们均在Mahout中得到实现:基于用户的推荐程序和基于物品的推荐程序。两种算法均依赖于两个事物(用户或物品)之间的相似性度量,或者说等同性定义。相似性的定义有多种:包括基于皮尔逊相关系数(Pearson correlation)、对数似然值(log likehood)、斯皮尔曼相关系数(Spearman correlation)、谷本系数(Tanimoto coefficient)等实现。


理解基于用户的推荐

基于用户的推荐算法的典型特征是,建立在用户间有某种相似性的基础上。事实上,这种算法在日常生活中很常见,根据人群之间的相似性进行推荐是非常合理的。


算法:

for(用户u尚未表达偏好的) 每个物品i{    for(对i有偏好的) 每个其他用户v{        计算u和v之间的相似度        按照权重s将v对i的偏好并入平均值    }}return 值最高的物品(按加权平均排序)

说明:外层循环简单地把每个已知的物品(用户未对其表达偏好的)作为候选的推荐项。内层循环逐个查看对候选物品做过评价的其他用户,并记下他们对该物品的偏好值。最终,将这些值的加权平均作为目标用户对物品偏好值的预测。每个偏好值的权重取决于该用户与目标用户之间的相似度。与目标用户越相似,他的偏好值所占权重越大。
但是,每个物品都检查实在是太慢了。实际应用中,通常会先计算出一个最相似用户的领域,然后仅考虑 这些用户评价过的物品:

for每个其他用户 w{    计算用户u和用户w的相似度s    按相似度排序后,将位置靠前的用户作为领域n}for(n中用户有偏好,而u中用户无偏好的){    每个物品i    for(n中用户对i有偏好的){        每个其他用户v        计算用户u和用户v的相似度s        按权重s将v对i的偏好并入平均值    }}

这个过程与前面的区别在于首先确定相似的用户,在考虑这些最相似用户对什么物品感兴趣。这些物品就成为推荐的候选项。后续的过程是一样的。这就是标准的基于用户推荐算法,也是他在Mahut中的实现方式。


引入新的相似性度量,结果就会发生显著变化。由此可知,提供推荐的方式是多种多样的——而这还只是调整了方法的一个侧面。Mahout是由多个组件混搭而成的,而非单一的推荐引擎,其各个组件的组合可以定制,从而针对特定应用提供理想的推荐。通常包括如下组件:

  • 数据模型,由DataModel实现
  • 用户间的相似性度量,由UserSimilarity实现
  • 用户领域的定义,由UserNeighborhood实现
  • 推荐引擎的定义,由Recommender实现

总之,要想推荐得更好更快,就必然需要经历一个漫长的实验和调优过程。

0 0
原创粉丝点击