在n元素对象上使用最近邻搜索

时间:2014-11-14 19:49:00

标签: python algorithm search nearest-neighbor

我正在寻找一种在python中的n元素对象上使用最近邻搜索的方法。我想拥有我的父对象,然后根据距离最近到最远的最近元素对其他对象进行排序。例如可以:

Parents: 1, 1, 1, 1, 1

和其他对象说

O1 = 1, 2, 2, 1, 2
O2 = 5, 5, 5, 5, 5
O3 = 3, 3, 3, 3, 3

所以我希望它将O1作为最相关的,O2作为最不相关的。

所以不确定要使用哪些包和算法。

1 个答案:

答案 0 :(得分:2)

这是一个起点:

def get_nearest(src, others):
    nearest = None
    nearest_dist = float("inf") # Some huge number that everything is less than
    for i in others:
        dist = metric(src, i) # But what is metric?
        if dist < nearest_dist:
            nearest = i
            nearest_dist = dist

    return nearest

根据一些函数metric返回最接近的匹配,该函数接收两个对象并返回一些距离值。

那你如何定义metric?嗯,这取决于。有几种方法可以做到这一点,你需要选择一个最适合你正在使用的数据以及两个对象是“关闭”的方法。

对于您的数字列表,您可以尝试选择对应值之间平均差异最小的对象:

def metric(a, b):
    s = 0
    for x, y in zip(a,b):
        s += abs(x-y)
    return s / len(a)

您还可以执行更复杂的操作,例如差异的均方根平均值,或者对差异应用指数函数,以便异常值更突出。这一切都取决于你想对数据做什么。