En entrée, j'ai deux ensembles de points dans R N , généralement pour un grand N, par exemple N = 40. Supposons que les deux ensembles ont m éléments:
S = s 1 ... s m
T = t 1 ... t m
Sémantiquement, les deux ensembles sont égaux, mais en raison du bruit (de quelque nature que ce soit) sur les points R ^ N, les éléments qui devraient être sémantiquement les mêmes ont toujours une distance supérieure à 0.
Ce que je veux trouver, c'est m tuples (s i , t j ) tels que la somme des distances (s i , t j ) soit minimisée et tels que s k et t k se produisent exactement une fois dans l'ensemble de tuples pour k = 1 ... m. Fondamentalement (i, j) doivent être choisis comme des tours sur un échiquier qui ne peuvent pas se heurter tout en minimisant les distances totalisées.
En d'autres termes, je veux trouver une carte un à un entre S et T qui "est en quelque sorte une carte d'identité, mais robuste au bruit". Nous supposons que la mesure de distance est une bonne indication de la similitude des éléments.
Fondamentalement, j'ai besoin de trouver une permutation de 1 ... N, et donc je pense que ce problème est soit NP-dur ou NP-complet, car il "se sent" assez similaire au TSP; cependant, je n'ai pas pu réécrire le problème TSP dans un sous-ensemble de mon problème ici.
Ce problème peut-il être résolu de manière réaliste pour un grand N? Y a-t-il un nom pour ce problème? Quelle serait une solution réalisable? Y a-t-il un autre critère qui pourrait être meilleur que les distances additionnées?
J'ai pensé à une approche gourmande, soit D une matrice des distances, d ij = distance (s i , t j ).
T = {}
while D is not empty:
(i,j) = argmin-(i,j) dij
append (i,j) to T
set row i and column j to infinity.
Cela n'aboutit pas à la solution optimale, mais trouve une solution. Serait-ce mon meilleur pari? Dois-je utiliser un recuit simulé ou est-ce exagéré?
PS: de mon point de vue, ce n'est qu'un problème mineur dans un problème ML plus important, cependant, je suis très intéressé par l'arrière-plan CS de celui-ci.
la source
Réponses:
C'est le problème de trouver la correspondance maximale dans un graphe biparti pondéré. Il existe des algorithmes efficaces qui résolvent ce problème en temps polynomial.
Fondamentalement, vous avez un graphique bipartite complet avec2 m sommets. S forme un ensemble de sommets; T forme l'autre ensemble de sommets. Pour chaquei , j , créez un bord à partir de sje à tj dont le poids est égal à - d(sje,tj) , la négation de la distance entre sje et tj .
Maintenant, vous voulez trouver une correspondance dont le poids est aussi grand que possible. Cela correspond à un ensemble de paires(sje,tj) dont la distance totale est la plus petite possible. À partir de là, vous pouvez utiliser les algorithmes existants sur ce graphique pour trouver la correspondance de poids maximum.
la source
Voici une méthode probabiliste rapide qui pourrait vous convenir.
Projetez vos points sur une ligne aléatoire et résolvez le problème de correspondance 1D dans cette ligne.
Répétez le processus pour une poignée de lignes aléatoires différentes pour obtenir une collection de correspondances candidates.
Demandez à vos candidats candidats de «voter» point par point pour trouver le «meilleur» match.
la source