<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">看了不少书,不同的算法中经常使用不同的距离函数。然而,基本都是在一个文件里只用特定的某一种距离函数,缺乏一个整体的距离包来直接用于调用,不是特别方便。因此,我写了个将各种常用距离函数放在一起的包,包括了欧氏距离、曼哈顿距离、切比雪夫距离和余弦相似度,马氏距离暂时就先不管了,做推荐或者医学数据挖掘用的也确实不算多,而且scipy里有scipy.spatial.distance包可以调用。本文涉及的代码主要参考了《写给程序员的数据挖掘实践指南》一书。</span>
欧氏距离 (Euclidean Distance):
这个还是比较容易理解的,就是两点之间连线的长度,对于两个n维的向量rating1和rating2(原书中计算距离的主要目的是根据评分进行推荐,所以变量名取成了这个样子),欧氏距离可以计算如下(已经导入了numpy):
def euclidean(rating1, rating2):
distance = 0
for key in rating1:
if key in rating2:
temp = (rating1[key] - rating2[key]) ** 2
distance += temp
distance = sqrt(distance)
return distance
曼哈顿距离 (Manhattan Distance):
又称城市街区距离,顾名思义,就像穿行在曼哈顿的街区一样,只能走直线然后拐弯在接着走直线,而不是两点之间直线最短,毕竟前面都是居民区对不对...
def manhattan(rating1, rating2):
distance = 0
for key in rating1:
if key in rating2:
distance += abs(rating1[key] - ratin