Sélection des points les plus dispersés dans un ensemble de points

15

Existe-t-il un algorithme (efficace) pour sélectionner un sous-ensemble de points dans un ensemble de points ( ) de telle sorte qu'ils "couvrent" la plus grande partie de la zone (sur tous les sous-ensembles possibles de taille )?MNM<NM

Je suppose que les points sont dans un plan 2D.

L'algorithme naïf est simple, mais prohibitif en termes de complexité temporelle:

for each subset of N points
    sum distance between each pair of points in the subset
    remember subset with the maximum sum

Je recherche une méthode plus efficace voire approximative.

Exemple, voici un avion avec quelques points aléatoires:

entrez la description de l'image ici

Pour , je m'attends à sélectionner des points comme ceux-ci:M=5

entrez la description de l'image ici

Notez que les points sélectionnés (rouges) sont dispersés sur tout le plan.

J'ai trouvé un article " SÉLECTIONNER EFFICACEMENT LES POINTS CLÉS SPATIALEMENT DISTRIBUÉS POUR LE SUIVI VISUEL " qui est lié à ce problème. Cependant, cela suppose que les points sont pondérés.

Libor
la source
2
Pour le cas voyez ceci dans StackOverflow: Algorithme pour trouver les points les plus éloignés - mieux que O (n ^ 2)? . M=2
hardmath
Malheureusement, est généralement autour de 1500-5000 et M est comme 10-50. NM
Libor
Est-ce que et N sont tous les deux fixes, ou modifiez-vous également M (par exemple, parce que vous voulez maximiser la moyenne des distances, auquel cas l'augmentation de M peut entraîner une diminution)? MNMM
Wolfgang Bangerth
1
Je soupçonne fortement que c'est NP-difficile. Il ressemble étroitement à un problème de clique de poids maximum où le poids du bord entre deux sommets est la distance euclidienne entre eux. (Je crois qu'il existe des heuristiques pratiquement efficaces connues pour max-clique. Je ne sais pas lesquelles elles sont.)
tmyklebu
1
@hardmath Désolé, c'était une faute de frappe. J'ai essayé d'illustrer ce que je dois accomplir. Le problème vient de l'extraction des caractéristiques de l'image où je n'ai besoin que d'une poignée de caractéristiques ponctuelles, mais de les avoir dispersées sur toute l'image car elles sont utilisées pour l'estimation de la transformation et lorsqu'elles sont dispersées dans l'espace, l'estimation est plus stable. Peut-être que "l'entropie" est une meilleure mesure - je voudrais choisir points tels qu'ils soient partout, comme un gaz en état d'entropie max. D'un autre côté, j'essaie d'éviter que les points sélectionnés soient regroupés. M
Libor

Réponses:

11

Voici une solution approximative. Puisque N est si grand et M est si petit, que diriez-vous de ce qui suit:

  1. Calculer la coque convexe de N
  2. Sélectionnez jusqu'à M points de la coque qui répondent à vos critères de distance maximale.
  3. Si l'étape 2 vous laisse moins de M points, sélectionnez 1 point de l'intérieur qui maximise sa distance par rapport aux points précédemment sélectionnés.
  4. Répétez l'étape 3 jusqu'à ce que le nombre de points sélectionnés soit M

L'intuition derrière cela est que depuis N >> M , et que vous voulez des points aussi éloignés les uns des autres que possible, ils seront probablement proches des bords des données, vous pouvez donc aussi bien commencer par la coque, puis de manière itérative travaillez votre chemin à partir de là.

De plus, en commençant par la coque, vous réduisez votre recherche initiale de N à N 1/2 .


MISE À JOUR

Si les étapes 3 et 4 ci-dessus prennent trop de temps (puisque vous testez de manière itérative l'intérieur de votre ensemble de données), deux autres idées me sont venues à l'esprit pour accélérer votre problème.

  1. Recherche aléatoire : Supposons que vous ayez trouvé des points P sur la coque à l'étape 2. Ensuite, tirez au hasard M - P points de l'intérieur. Sélectionnez le meilleur ensemble après X essais.
  2. Recuit simulé : calculez le plus petit cadre englobant qui couvre votre jeu de données (n'a pas besoin d'être aligné avec les axes, peut être incliné). Définissez ensuite un ensemble de M points de grille uniformément répartis sur cette boîte englobante. Notez que ces points ne coïncident pas nécessairement avec l'un de vos points de jeu de données. Ensuite, pour chaque point de grille, recherchez les k voisins les plus proches dans votre jeu de données. Parcourez chaque combinaison M x k et sélectionnez celle qui répond à vos critères de distance maximale. En d'autres termes, vous utilisez la grille initiale comme bootstrap pour trouver une bonne solution initiale.
dpmcmlxxvi
la source
Merci. Peut-être a-t-il mal formulé la question. Je vise un ensemble de points tels qu'ils "couvrent" la plupart des domaines. Je pensais que les critères de distance suffisaient mais il semble que quelque chose de plus doit être ajouté.
Libor
M
1
Peut-être qu'une façon plus formelle d'énoncer votre problème est que vous voulez une tessellation de taille M qui couvre N et minimise la surface moyenne des facettes de tessellation? Minimiser les zones des facettes semble être un moyen de répartir les points autour et de s'assurer qu'ils ne s'agglutinent pas.
dpmcmlxxvi
Oui. Je voulais éviter d'utiliser la grille, car si les points peuvent être accidentellement regroupés autour des lignes de la grille, ils seront ensuite regroupés dans la sélection.
Libor
Le seul problème avec votre algorithme gourmand que vous mentionnez est qu'il sera très sensible au point de départ initial. Les algorithmes de croissance des semences (où vous commencez de l'intérieur vers l'extérieur) ont ce problème. L'approche de coque que je mentionne sera probablement plus stable car elle fonctionne de l'extérieur vers l'intérieur.
dpmcmlxxvi
6

NM

MM

M1M=3,4,5

M=31M=4M=51

Si nous voulons éviter une sélection prédominante de points à la périphérie, un objectif différent peut s'avérer utile. La maximisation de la distance minimale entre les points est un tel critère. Des problèmes connexes ont été abordés chez StackOverflow , Computer Science SE , Math.SE et MathOverflow .

MM

hardmath
la source
1

OK, vous voulez donc sélectionner M points dans un ensemble donné de N points dans le plan euclidien, afin que la somme des distances par paire des points sélectionnés soit maximale, n'est-ce pas?

L'algorithme de recherche locale standard est assez rapide et offre une assez bonne approximation. Le temps d'exécution est linéaire en N et quadratique en M. Son rapport d'approximation est de 1 à 4 / M. Cela signifie que le rapport s'améliore à mesure que M augmente. Par exemple, pour M = 10, elle obtient 60% de la valeur optimale et pour M = 50, elle obtient 92% de la valeur optimale.

L'algorithme fonctionne également pour les espaces euclidiens de dimension générale. Dans ce cas, le problème est NP-difficile. Mais dans l'avion, on ne sait pas s'il est dur NP.

La source est cet article . J'espère que cela t'aides! Bien, Alfonso


Alfonso
la source
1
J'ai déjà résolu ce problème en utilisant l'algorithme "Suppression via Disk Covering" du document "Sélection efficace de points clés répartis spatialement pour le suivi visuel" 2011 18e Conférence internationale IEEE sur le traitement d'image. IEEE, 2011
Libor
1
Alfonso, veuillez expliciter votre affiliation au document suggéré.
nicoguaro
0

Une solution est:

  • O(n)

  • Faites M artificiels, même des points répartis à l'intérieur de ce rectangle englobant, certains M sont plus difficiles que d'autres. Dans votre cas, quatre dans les coins du rectangle et un au centre

  • O(n(log(n)))

  • O(m(log(n)))

O(n(log(n)))MN

Jan Hackenberg
la source