2014-11-14 84 views
0

我正在寻找一种在python中的n元素对象上使用最近邻居搜索的方法。我想要我的父对象,然后根据最近的元素从最近到最远排序其他元素。所以例子是:在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

什么它应该像套做: '家长:1,1,1,1,1' '01:1,1,1,1,6' 'O2:2,2,2,2 ,2' – Slater 2014-11-14 19:51:31

+0

不知怎的,我将不得不定义关于两者之间的密切关系的规则。也许就像两者之间的平均差距? (平均每个元素除以5之间的差值)然后按那个排序?在这种情况下,这两个将被绑定,并不重要的顺序? – 2014-11-14 19:54:17

回答

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) 

你也可以做更复杂的东西,喜欢的根均方平均差异或对差异应用指数函数,以便异常值更加突出。这完全取决于你想要对数据做什么。