J'ai un ensemble de vecteurs. Pour un vecteur dans cet ensemble, j'aime trouver le sous-ensemble le plus proche de ce vecteur. Quel algorithme peut le faire.Algorithmes pour trouver le vecteur le plus proche
Répondre
utiliser la similitude de cosinus (http://en.wikipedia.org/wiki/Cosine_similarity) parmi les vecteurs, puis les trier.
+1 Je n'allais mentionner que le produit scalaire. Je n'ai pas pensé aux longueurs de vecteurs. Merci de me sauver du ridicule;) –
nous ne savons pas ce qu'il veut comme distance –
Cette classe d'algorithmes est appelée Plus proche voisin ou K Plus proche voisin.
Le cosine similarity comme dit excepeiont fonctionnera si la direction du vecteur est importante. Si le vecteur représente une position dans un espace, alors n'importe quelle métrique pour représenter une distance dans l'espace fonctionnera.
Par exemple le Euclidean distance: prenez la racine carrée de la somme des carrés de différence dans chaque dimension. Cela vous donnera une distance pour chaque vecteur, puis triera votre ensemble de vecteurs croissant sur cette distance.
Ce processus sera O (N) dans le temps. Si cela est trop lent pour vous, vous pourriez vouloir regarder quelques algorithmes communs K Nearest Neighbour.
Si votre problème est lié à une grande quantité de données:
I a publié un algorithme connexe sur ddj.com, qui trouve la ligne la plus proche à un point donné :
Accelerated Search For the Nearest Line
Vous Il faudrait modifier cet algorithme, c'est-à-dire en convertissant le vecteur donné en un certain nombre de points. Cela permettra de réduire le nombre de possibles matchs de manière drastique. Le match exact doit alors être vérifiée pour chaque match possible par
- Trouver le point de coupe des deux vecteurs ou
- Get distance de début de vecteur et point final pour le match possible, comme décrit dans l'article
- 1. PHP trouver le nombre le plus proche
- 2. Trouver la plus proche
- 3. Trouver le serveur le plus proche dans le réseau
- 4. Trouver le voisin le plus proche/latitude et longitude
- 5. jQuery le plus proche();
- 6. Trimestre le plus proche
- 7. titre Garniture pour mot le plus proche
- 8. Comment puis-je trouver l'élément le plus proche avec jQuery
- 9. Comment trouver l'arbre le plus proche d'un autre arbre?
- 10. Trouver l'index le plus proche par différence avec BinarySearch
- 11. jquery trouver le plus proche avec classe frère précédent
- 12. java miliseconds trouver le plus proche à l'heure
- 13. Trouver l'aéroport le plus proche en utilisant iOS
- 14. Comment trouver quel rectangle est le plus proche d'un point
- 15. JQuery le plus proche() aider
- 16. plafond le plus proche 50
- 17. Aligner sur le marqueur le plus proche
- 18. Utilitaires ou bibliothèques pour trouver le fichier binaire le plus proche
- 19. Trouver les nombres qui apparaissent le plus dans un vecteur
- 20. MySQL trouver la ligne la plus proche
- 21. Comment trouver une rue plus proche
- 22. Le moyen le plus rapide de trouver le point le plus proche d'un point donné en 3D, en Python
- 23. Arrondi Mécanisme pour le plus proche de 0,05
- 24. Trouver le point le plus proche d'un ensemble de points dans le plan
- 25. Trouvez le numéro le plus proche dans la gamme?
- 26. objet le plus proche de CGPoint
- 27. Implémentation itérative de point le plus proche
- 28. Javascript DOM - Obtenir le nœud le plus proche avec tagName
- 29. Arrondi au 100 le plus proche
- 30. Horodatage du mois le plus proche valide
Vos vecteurs représentent-ils des "points" ou des "directions"? Je demande parce que la mesure de distance cosinus mentionnée dans certaines réponses normalisera l'amplitude, ce qui peut ne pas être ce que vous voulez si vous cherchez une distance euclidienne (ou une autre norme de Minkowski). Si c'est le cas, vous voulez un algorithme conventionnel du plus proche voisin, kd-trees, clustering k-means, etc.) – tzaman