找到最接近的匹配

时间:2010-06-09 16:26:47

标签: algorithm similarity pattern-recognition classification

我有一个带有一组参数的对象,如:

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的最接近匹配的最佳(最简单)算法是什么?

3 个答案:

答案 0 :(得分: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 :(得分:1)

您也可以使用Euclidean Distance

基本上你假装每个物体都是5维的点,并寻找最接近的点(即:距离最短)。

答案 2 :(得分:1)

取决于,我想。我想到了几种可能性:

  • SAD:计算每对参数(您测试的参数和每个候选参数)的绝对差值并总结。最低的数字是最接近的
  • L2-Norm:计算每对参数的差值,将它们平方,求和,取平方根
  • 余弦:将每个参数乘以另一个参数,总结。将结果除以两个对象的长度(L2-Norm)的乘积

当然,还有更多的可能性,因此你必须指明你想要的东西!