hadoop-mahout 核心算法总结
其实大家都知道hadoop为我们提供了一个大的框架,真正的算法还是要程序员自己去实现,所以了解hadoop大概架构之后就要了解一些基本的算法。
mahout--可以理解为hadoop的驾驶员。学习它一定要从《mahout in action》入手,在此我记录下一些学习的笔记仅供参考。
第一节:基于用户的推荐算法
GenericUserBasedRecommender 算法原理
官方解释:
for every other user w compute a similarity s between u and w retain the top users, ranked by similarity, as a “neighborhood” n for every item i that some user in n has a preference for, but that u has no preference for yet for every other user v in n that has a preference for i compute a similarity s between u and v incorporate v's preference for i, weighted by s, into a running average
一:所有用户与用户U做相似性计算,计算出其邻居集合 n
二:循环所有的商品,计算出邻居集合n有兴趣且用户U没有兴趣的商品集合items
三:循环items和邻居集合n,计算出邻居和用户u 的相似度s集合
四:返回s集合并根据相似度排序。
similarity 几个主要算法
在此只做主要介绍,感兴趣的朋友可以研究下具体公式
1、皮尔逊相关系数
用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。两个变量相关性越高,则系数趋近于1,两个变量相互独立,则系数为0,两系数对立,则系数趋近于0。我们看下书本上的例子:
从上图可以看出 user1 和 user4的相关性 比 user1 和user5的相关性高,这似乎有一些counterintuitive。
还有user1和user3是没有相关系数的,这是因为算法程序的规则。
还有一种情况下相关性是不计算的,如果一个user 对所有的item 的perference value相同。
书中介绍这种算法不好不坏,仅仅让你理解一下它的工作原理就好了。
2、欧几里德距离算法
该算法是基于两个user之间的distance,想象用户的坐标就是用户的preference values,距离越小,则说明用户相似度越高。该算法返回值为 1/(1+d),所以当算法返回值为1时,表示两用户相似度完全相等。看下书本上的例子
可以看出该算法和皮尔逊系数有相同的问题,users 1 and 4 have a higher similarity than users 1 and 5.
3、余弦测量相似度算法
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。我们需要立即的就是余弦值在-1到1之间,角度越小(相似度越高)越趋近于1。
4、
其余更多算法请参考 http://www.cnblogs.com/shipengzhi/articles/2540382.html
第二节:基于物品的推荐算法
GenericItemBasedRecommender 算法原理