寻找最接近的匹配

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 ; }

什么是最好的(最简单的)算法来查找列出的对象中与第一个对象最接近的匹配项?


1
你如何定义最接近的匹配?最小平方误差?最小误差?最高数量的精确参数匹配(带有可选的打破平局规则)? - Brian
相关链接:https://dev59.com/G3A85IYBdhLWcg3wBOxO#2981772 - Betamoo
相关:https://dev59.com/F03Sa4cB1Zd3GeqPzfXO - Betamoo
3个回答

4

在尝试寻找“最接近的匹配项”之前,您必须定义此术语closest match



1- 许多人使用的一种方法是均方误差(或欧几里得距离):

为所有对象计算均方误差:

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近邻算法,并选择上述任何标准



这完全取决于这些参数的属性...

如需更多阅读材料,请参阅分类算法列表


1

你也可以使用欧几里得距离

本质上,你可以将每个对象视为5维空间中的一个点,并寻找最接近的点(即:距离最短的点)。


1

这要看情况。我脑海中有几种可能性:

  • SAD:计算每对参数(测试参数和每个候选参数)的绝对差并将它们相加。最小值最接近
  • L2-Norm:计算每对参数的差,平方,相加,再取平方根
  • Cosine:将每个参数与另一个参数相乘,相加。将结果除以两个对象长度(L2-Norm)的乘积

当然,还有成千上万种可能性,因此您必须明确您想要什么!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接