我正在寻找一种在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作为最不相关的。
所以不确定要使用哪些包和算法。
答案 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)
您还可以执行更复杂的操作,例如差异的均方根平均值,或者对差异应用指数函数,以便异常值更突出。这一切都取决于你想对数据做什么。