2014-11-14 118 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) 

你也可以做更復雜的東西,喜歡的根均方平均差異或對差異應用指數函數,以便異常值更加突出。這完全取決於你想要對數據做什麼。