1、简介
mahout已经提供了 item-based cf 算法,但是要想在 mahout 算法上修改item-based cf 相对来说比较繁琐,比如改进相似度或者改进推荐结果计算公式,更加令人头疼的是mahout 修改比较难调试,相比来说 spark 实现起来更加简单方便,同时 spark shell 在调试阶段特别方便,另一方面 mahout 执行速度比较慢。本文使用 spark 编写了 item-based cf 和 user-based cf 两种协同过滤算法。同时,本文使用的是cosine相似度,并对cosine相似度进行了改进。
2、相似度计算
要想理解协同过滤算法,必须弄清楚各种相似度计算公式,下面介绍相似度计算公式:
2.1 欧几里得相似度
欧几里得相似度根据欧几里得距离计算而来,距离越近相似度越高,反之相反。
欧几里得距离公式
dX,Y=∑i=1n(xi−yi)2−−−−−−−−−−−√
欧几里得相似度公式
sim(x,y)=11+d(x,y)
2.2 皮尔逊相似度
皮尔逊相关系数,即概率论中的相关系数,取值范围【-1,+1】。当大于零时,两个变量正相关,当小于零时表示两个向量负相关。
计算公式为
ρX,Y=cov(X,Y)σxσy=E((X−μx)(Y−μy))σx