2010-06-09 116 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)的乘积

当然,还有上千种可能性,因此您必须指定,您要的确切值!