一尘不染

寻找最接近的匹配

algorithm

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

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


阅读 206

收藏
2020-07-28

共1个答案

一尘不染

您必须先定义 最接近的匹配项, 然后才能找到它!!

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最近的邻居
应用于上面选择的任何条件

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

有关更多阅读,您可以查看分类算法列表

2020-07-28