Trouver la plus proche
-
26-09-2019 - |
Question
J'ai un objet avec un ensemble de paramètres tels que:
var obj = new {Param1 = 100; Param2 = 212; Param3 = 311; param4 = 11; Param5 = 290;}
De l'autre côté j'ai une liste d'objets:
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 ; }
Quel est le meilleur (le plus facile) algorithme pour trouver le match le plus proche pour la première obj dans les objets répertoriés?
La solution
Vous devez définir le terme match le plus proche avant d'essayer de le trouver !!
1- Une façon beaucoup de gens utilisent est moyenne d'erreur Squared (ou euclidienne Distance ):
Calculer l'erreur quadratique moyenne pour tous les objets:
Sqr(obj.Param1-obj1.Param1) + Sqr(obj.Param2-obj1.Param2) + ..... // for obj1
Sqr(obj.Param1-obj2.Param1) + Sqr(obj.Param2-obj2.Param2) + ..... // for obj2
et choisissez celui avec la valeur minimale ...
2- Vous pouvez également utiliser erreur absolue minimum:
Abs(obj.Param1-obj1.Param1) + Abs(obj.Param2-obj1.Param2) + ..... // for obj1
Abs(obj.Param1-obj2.Param1) + Abs(obj.Param2-obj2.Param2) + ..... // for obj2
et choisissez celui avec la valeur minimale ...
3- Aussi, vous pouvez appliquer k-plus proche voisin avec tous les critères que vous avez choisi ci-dessus
Tout dépend des propriétés de ces paramètres ...
Pour plus de lecture que vous pouvez regarder Liste des algorithmes de classification
Autres conseils
depends, je suppose. Plusieurs possibilités viennent à l'esprit:
- SAD: calculer la différence absolue de chaque paire de paramètres (celui que vous tester et chacun de vos candidats) et les résumer. Le plus bas nombre est le plus proche
- L2-Norm: Calculer la différence de chaque paire de paramètres, les carrés, les résumer, prendre la racine carrée
- Cosinus: Multiplier chaque paramètre avec l'autre paramètre, résumé. diviser le résultat par produit de la longueur (L2-Norm) des deux objets
Bien sûr, il y a des milliers d'autres possibilités, donc vous devez spécifier, ce que vous voulez exactement!
Vous pouvez également utiliser le euclidienne Distance .
Essentiellement, vous faites semblant chaque objet est un point en 5 dimensions et chercher le point le plus proche est (i.e. .: a la distance la plus courte).