问题
I Have an object with a set of parameters like:
var obj = new {Param1 = 100; Param2 = 212; Param3 = 311; param4 = 11; Param5 = 290;}
On the other side i have a list of object:
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 ; }
What is the best (easiest) algorithm to find the closest match for the first obj in the listed objects?
回答1:
You must define the term closest match before trying to find it!!
1- One way many people use is Mean Squared Error (or Euclidean Distance) :
Calculate mean square error for all objects:
Sqr(obj.Param1-obj1.Param1) + Sqr(obj.Param2-obj1.Param2) + ..... // for obj1
Sqr(obj.Param1-obj2.Param1) + Sqr(obj.Param2-obj2.Param2) + ..... // for obj2
and choose the one with the minimum value...
2- You may also use Minimum absolute error :
Abs(obj.Param1-obj1.Param1) + Abs(obj.Param2-obj1.Param2) + ..... // for obj1
Abs(obj.Param1-obj2.Param1) + Abs(obj.Param2-obj2.Param2) + ..... // for obj2
and choose the one with the minimum value...
3- Also you can apply k-nearest neighbour with any criteria you have chosen above
It all depends on the properties of these parameters...
For more reading you may look at List of Classification algorithms
回答2:
Depends, i guess. Several possibilities come to my mind:
- SAD: calculate the absolute difference of each pair of parameters (the one you test and each of your candidates) and sum them up. Lowest number is closest
- L2-Norm: Calculate the difference of each pair of parameters, square them, sum them up, take square root
- Cosine: Multiply each parameter with the other parameter, sum up. Divide result by product of length (L2-Norm) of both objects
of course, there are thousand more possibilities, therefore you have to specify, what you want exactly!
回答3:
You could also use the Euclidean Distance.
Essentially you pretend each object is a point in 5 dimensions and look for the point that's closest (i.e.: has the shortest distance).
来源:https://stackoverflow.com/questions/3007790/finding-the-closest-match