我有一个带有一组参数的对象,如:
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的最接近匹配的最佳(最简单)算法是什么?
答案 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)
取决于,我想。我想到了几种可能性:
当然,还有更多的可能性,因此你必须指明你想要的东西!