2010-06-09 137 views
4

我有一組類似參數的對象:尋找最接近的匹配

var obj = new {Param1 = 100; Param2 = 212; Param3 = 311; param4 = 11; Param5 = 290;} 

在另一邊,我有對象的列表:

var obj1 = new {Param1 = 1221 ; Param2 = 212 ; Param3 = 311 ; param4 = 11 ; Param5 = 290 ; } 
var obj3 = new {Param1 = 35 ; Param2 = 11 ; Param3 = 319 ; param4 = 211 ; Param5 = 790 ; } 
var obj4 = new {Param1 = 126 ; Param2 = 218 ; Param3 = 2 ; param4 = 6 ; Param5 = 190 ; } 
var obj5 = new {Param1 = 213 ; Param2 = 121 ; Param3 = 61 ; param4 = 11 ; Param5 = 29 ; } 
var obj7 = new {Param1 = 161 ; Param2 = 21 ; Param3 = 71 ; param4 = 51 ; Param5 = 232 ; } 
var obj9 = new {Param1 = 891 ; Param2 = 58 ; Param3 = 311 ; param4 = 21 ; Param5 = 590 ; } 
var obj11 = new {Param1 = 61 ; Param2 = 212 ; Param3 = 843 ; param4 = 89 ; Param5 = 210 ; } 

什麼是最好的(最簡單)算法找到列出的對象中第一個obj的最接近的匹配項?

+1

你如何定義最接近的匹配?最小平方誤差?最小錯誤?精確參數匹配的最大數量(帶有可選的打破平局規則)? – Brian 2010-06-09 16:49:35

+0

相關:http://stackoverflow.com/questions/2981743/ways-to-calculate-similarity/2981772#2981772 – Betamoo 2010-06-09 17:02:46

+0

相關:http://stackoverflow.com/questions/2887541/similarity-in-data-mining – Betamoo 2010-06-09 17:11:34

回答

4

在嘗試找到它之前,您必須定義術語最接近的匹配!許多人使用



1的一種方法是Mean Squared Error(或Euclidean Distance):

計算均方誤差爲所有對象:

Sqr(obj.Param1-obj1.Param1) + Sqr(obj.Param2-obj1.Param2) + ..... // for obj1 
Sqr(obj.Param1-obj2.Param1) + Sqr(obj.Param2-obj2.Param2) + ..... // for obj2 

,並選擇具有最小值...



2 - 你也可以使用最小絕對誤差:

Abs(obj.Param1-obj1.Param1) + Abs(obj.Param2-obj1.Param2) + ..... // for obj1 
Abs(obj.Param1-obj2.Param1) + Abs(obj.Param2-obj2.Param2) + ..... // for obj2 

,並選擇具有最小值...



3-你也可以申請k-nearest neighbour與任何以上選擇的標準



這一切都取決於這些參數的屬性...

更多的閱讀,你可以看List of Classification algorithms

1

您也可以使用Euclidean Distance

基本上你假裝每個物體都是5維的一個點,並尋找最接近的點(即:具有最短距離)。

0

取決於我想。我想到了幾種可能性:

  • SAD:計算每對參數(您測試的那個參數和您的每個候選者)的絕對差值並將它們相加。最低的數字最接近
  • L2-Norm:計算每對參數的差值,將它們平方,將它們相加,取平方根
  • 餘弦:將每個參數與另一個參數相乘,總結。除以兩個物體的長度(L2-Norm)的乘積

當然,還有上千種可能性,因此您必須指定,您要的確切值!