mahout算法源码分析之Itembased Collaborative Filtering(六)总结

来源:互联网 发布:青岛邮箱数据 编辑:程序博客网 时间:2024/05/22 06:40

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。

本篇是ItemBased Collaborative Filtering的算法综述,即总结前面几篇blog,分析该算法的数据流,主要使用的数据是《mahout in action》中的listing2.1的数据。

首先贴上下面的一个图:


看到上面的图片(这个算法计算到上图中的矩阵还没有结束,还有一个图,在下面分析),其实大概就可以了解到这个算法的数据流了。

1.首先根据原始数据得到userRatings和ItemRatings这两个步骤应该很好理解了(对应上图中的①②),然后第③步其实就是求ItemRatings中的所有项的平方和向量norms。第④步就是根据ItemRatings和norms求出项目之间的相似度矩阵similarity,这个计算过程也有点复杂,等下在后面分析;然后第⑤步就是根据userRatings和similarity整合用户所有信息,然后就是第⑥步,更加整合的信息求出最后的推荐信息,第六步如下图:


第六步也有点复杂,稍后分析。

2. 分析第四步,根据ItemRatings和Norms求出Similarity矩阵,这里使用的算法如下



其中,I1、I2分别代表项目I1和项目I2,PuiI1代表用户ui对项目I1的评分,PuiI2代表用户ui对项目I2的评分,normsI1就是norms中对应I1的平方和;

比如102项目和103项目:102={5:3.0,2:2.5,1:3.0},103={5:2.0,4:3.0,2:5.0,1:2.5},可以得到dot=26,norms(102)=24.25,norms(103)=44.25,带入上面的公式,可以得到simi(102*103)=0.197,可见和上面的一样;


3. 分析第六步,更加第五步得到的用户整合信息进行分析,比如用户1来说:

[plain] view plaincopy
  1. 1:  
  2. {[3.0,[106:0.1497250646352768,105:0.14328432083129883,104:0.12789210677146912,103:0.19754962623119354,102:NaN,101:0.14201472699642181]],  
  3. [2.5,[106:0.14243397116661072,105:0.11208890378475189,104:0.140376016497612,103:NaN,102:0.19754962623119354,101:0.15548737347126007]],  
  4. [5.0,[107:0.10275248438119888,106:0.14243397116661072,105:0.11584573984146118,104:0.1601526141166687,103:0.15548737347126007,102:0.14201472699642181,101:NaN]]  
  5. }  
针对用户的每条记录,使用相应的项乘以前面的prefValue值,然后全部加起来得到A;只针对每条记录中的项全部加起来得到B,然后使用A除以B中对应的项即可得到用户1的所有项目的评分值(其中的NaN/NaN在mahout中默认还是NaN,其实NaN就是 表示这个用户已经评价过的项目了),最后再针对所有不是NaN的项目进行一个排序即可得到最后的结果了。

至此,这个算法系列算是完了,如果还有一些什么想法,后面再补充吧。


分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990

0 0
原创粉丝点击