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

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来说:

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

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


分享,成长,快乐

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值