Поиск ближайшего совпадения

У меня есть объект с набором параметров, например:

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 в перечисленных объектах?


person Faris Zacina    schedule 09.06.2010    source источник
comment
Как вы определяете ближайшее соответствие? Минимальная квадратичная ошибка? Минимальная ошибка? Наибольшее количество точных совпадений параметров (с дополнительными правилами разрешения конфликтов)?   -  person Brian    schedule 09.06.2010


Ответы (3)


Вы должны определить термин ближайшее соответствие, прежде чем пытаться его найти !!



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-ближайший сосед с любыми критериями, которые вы выбрали выше



Все зависит от свойств этих параметров ...

Дополнительную информацию можно найти в списке алгоритмов классификации

person Betamoo    schedule 09.06.2010

Думаю, зависит. Мне на ум приходит несколько возможностей:

  • САД: рассчитайте абсолютную разницу каждой пары параметров (тестируемой вами и каждого из ваших кандидатов) и просуммируйте их. Наименьшее число ближе всего
  • L2-Norm: вычислить разницу каждой пары параметров, возвести их в квадрат, просуммировать, извлечь квадратный корень
  • Косинус: умножьте каждый параметр на другой, просуммируйте. Разделите результат на произведение длины (L2-норма) обоих объектов.

конечно, есть еще тысяча возможностей, поэтому вы должны указать, что именно вы хотите!

person zerm    schedule 09.06.2010

Вы также можете использовать Евклидово расстояние.

По сути, вы представляете, что каждый объект представляет собой точку в 5 измерениях, и ищете ближайшую точку (т. Е .: имеющую кратчайшее расстояние).

person Ben S    schedule 09.06.2010