推荐引擎对因特网用户而言已经不再是什么新鲜事。Amazon会根据顾客的购买历史向他们推荐物品,Netflix会向其用户推荐电影,新闻网站会对用户推荐新闻报道…..当然,有很多方法可以实现推荐功能,这里我们只使用一种称为协同过滤(collaborative filtering)的方法。协同过滤是通过将用户和其他用户的数据进行对比来实现推荐的。
1.1 相似度计算
计算物品之间的相似度,一般来说,我们有3种方法:
1. 欧氏距离:我们希望相似度值在0到1之间变化,并且物品对越相似,它们的相似度值也就越大。可以用“相似度=1/(1+距离)”这样的算式来计算相似度。当距离为0时,相似度值为1;如果距离很大,相似度也就趋近于0。
def eulidSim(inA, inB):
return 1.0/(1.0+linalg.norm(inA-inB)) #norm求范数
2.皮尔逊相关系数: 它度量的是两个向量之间的相似度,在Numpy中,皮尔逊相关系数的计算是由函数corrcoef()进行的。皮尔逊相关系数的取值范围从-1到1,通过0.5+0.5*corrcoef()这个函数计算,把取值范围归一化到0到1之间。
def pearsSim(inA,inB):
if len(inA)<3 :return 1.0
return 0.5+0.5*corrcoef(inA,inB,rowvar = 0)[0][1]
3. 余弦相似度: