Znalezienie znanej liczby środków okręgu, które maksymalizują liczbę punktów w ustalonej odległości

10

Mam zestaw danych 2D, w których chcę znaleźć środki o określonej liczbie środków kół ( ), które maksymalizują całkowitą liczbę punktów w określonej odległości ( ).RNR

np. mam 10 000 punktów danych (Xi,Yi) i chcę znaleźć środki N=5 okręgów, które przechwytują jak najwięcej punktów w promieniu R=10 . 5 centrów i promień 10 są podane wcześniej, a nie pochodzą z danych.

Obecność punktu danych w okręgu jest albo wartością binarną albo / albo. Jeśli R=10 , nie ma różnicy wartości w stosunku do punktu oddalonego o 11 jednostek w porównaniu do 100 jednostek w oddaleniu, ponieważ oba są w odległości> 10. Podobnie w przypadku przebywania w kręgu, nie ma żadnej dodatkowej wartości będąc blisko środka vs. blisko krawędzi . Punkt danych znajduje się w jednym z okręgów lub na zewnątrz.

Czy istnieje dobry algorytm, którego można użyć do rozwiązania tego problemu? Wydaje się, że są one związane z technikami grupowania, ale zamiast minimalizować średni dystans, funkcja „odległości” wynosi 0, jeśli punkt znajduje się w obrębie R dowolnego z N punktów, a 1 w przeciwnym razie.

Wolę znaleźć sposób na zrobienie tego w R, ale każde podejście byłoby mile widziane.

colonel.triq
źródło
Czy dozwolone jest nakładanie się okręgu?
curious_cat 11.04.13
1
Jest to zasadniczo operacja sąsiedzka (lub centralna) na zestawie danych rastrowych. Dobrze byłoby zajrzeć na stronę GIS, aby sprawdzić, czy udzielono odpowiedzi, i zbadać pakiety R w celu przeprowadzenia analizy Raster.
Andy W
1
Nakładanie się kół jest dozwolone, ale punkty danych pokryte przez oba koła nie będą podwójnie liczone. Dzięki za wskaźnik do operacji sąsiedztwa / ogniskowej na zestawach danych rastrowych. Będę szukać czegoś w tym stylu.
colonel.triq
@Andy W Chociaż operacje ogniskowe naturalnie byłyby zaangażowane w rozwiązanie, pytanie to wykracza poza kompetencje społeczności GIS, IMHO, ponieważ jest to (dość trudny) problem optymalizacji. To nie jest prosta metoda znajdowania maksymalnej wartości średniej ogniskowej. Polecam pozostawienie go tutaj przez chwilę, a następnie, jeśli nie pojawi się zadowalające rozwiązanie, migracja do strony zorientowanej na programowanie.
whuber
.... czy migrujesz do math.overflow? Mogą mieć także pewne spostrzeżenia na ten temat.
curious_cat

Odpowiedzi:

1

Jest to wariacja problemu k-średnich. Promień centrów nie ma znaczenia, o ile zakłada się, że są one równe.

Spinki do mankietów:

Umieści środki okręgów w miejscach o najwyższym prawdopodobieństwie punktów.

Klasyczne K-oznacza Procedura:

  1. ustaw liczbę klastrów na 5
  2. umieść każdy punkt w losowej grupie
  3. dla każdego klastra oblicz średnią pozycję
  4. dla każdego punktu obliczyć odległość do każdej nowej średniej pozycji
  5. powiązać członkostwo z najbliższym klastrem
  6. powtarzaj aż do zakończenia (iteracje, zmiana pozycji lub inne dane błędu)

Opcje:

  • Po 3 możesz użyć trochę rozluźnienia, w którym powoli przesuwasz średnią pozycję w kierunku nowej pozycji.
  • jest to dyskretny system, więc nie łączy się idealnie. Czasami tak się dzieje i możesz skończyć, gdy punkty przestaną zmieniać członkostwo, ale czasami po prostu trochę się poruszają.
  • Jeśli tworzysz swój własny kod (jak powinna większość ludzi), możesz użyć powyższych wartości POR k-średnich jako punktu początkowego i wprowadzić pewne zmiany w EM, oparte na procentach punktów wyłącznie i całkowicie objętych kręgami.

Dlaczego K-znaczy atakuje problem:

  • Jest to odpowiednik dopasowania modelu mieszanki Gaussa, w którym kowariancje składników są równe. Ośrodki składników mieszanki będą znajdować się w miejscach o najwyższym oczekiwaniu punktów. Krzywe stałego prawdopodobieństwa będą kołami. Jest to algorytm EM, więc ma asymptotyczną zbieżność. Członkostwo jest trudne, a nie miękkie.
  • Myślę, że jeśli fundamentalne założenie modelu mieszanki składników o równej wariancji jest dość „bliskie”, cokolwiek to znaczy, to metoda ta będzie pasować. Jeśli losowo rozdzielisz punkty, mniej prawdopodobne jest, aby pasowały dobrze.

Powinien istnieć jakiś analog „Zero Inflated Poissona”, w którym występuje element niegaussowski, który odbiera rozkład równomierny.

Jeśli chcesz „dostroić” swój model i masz pewność, że istnieje wystarczająca liczba punktów próbnych, możesz zainicjować za pomocą k-średnich, a następnie wykonać ulepszony regulator k-średnich, który usuwa punkty poza promieniami kręgów z konkurencji. Lekko zakłócałoby to twoje kręgi, ale może nieco poprawić wydajność, biorąc pod uwagę dane.

EngrStudent
źródło
Czy mógłbyś powiedzieć coś więcej o tym, jak K-oznacza rozwiązuje ten problem?
whuber
Dzieki za sugestie. Nadal nie jest dla mnie jasne, czy podejście K-średnich rozwiązuje problem? Rozważ przykład trzech klastrów danych generowanych normalnie (0,1), w których centra są przesunięte o około 5 jednostek. Centra K-średnich dają maksymalną gęstość. Teraz wytnij niektóre punkty z „dziurami”, tak że dane bliżej środka niż 0,5 zostaną usunięte. Środki K nadal będą wyświetlać informacje o tych samych centrach, ale jeśli próbujesz uzyskać maksymalne pokrycie dla N = 3, R = 0,5, to wyraźnie nie jest poprawna odpowiedź (ponieważ otwory na pączki nie zawierają danych). Czy coś nie rozumiem?
colonel.triq
Zastanowię się więcej nad twoim pytaniem, aby uzyskać lepszą odpowiedź, gdy będę miał czas. Lubię dopuszczać wagi ujemne. Czasami mogą obsługiwać pączki danych, a także promieniowe racjonalne wielomiany.
EngrStudent
0

Ktoś prawdopodobnie ma lepszy algorytm formalny, ale oto jedno podejście brutalnej siły (hack?). Użyłbym jednego z sześciokątnych algorytmów binowania do obliczenia histogramu 2D. Podobnie jak hexbinw R.

Użyłbym sześciokąta, który z grubsza określiłby twój okrąg o promieniu R, a następnie posortowałbym według górnych N pojemników. Jeśli masz Nwyraźne odległe kosze, świetnie. Teraz jednym ze sposobów jest lokalne poruszanie się po okręgu w skali 2 * R (w kierunkach x i y) od środka sześciokątów o największej gęstości. Gęstości obliczeniowe mogą z grubsza optymalizować lokalnie pozycję. To wyjaśnia fakt, że sześciokąty nie były ruchomym oknem w odniesieniu do ustalonego początku.

Jeśli wszystkie górne kosze są blisko, musisz mieć lepszy sposób na przemieszczanie swoich kręgów w tej okolicy.

Zauważ, że mogę myśleć o kilku narożnych przypadkach, w których tak naiwna strategia spektakularnie się nie powiedzie. Ale to tylko punkt wyjścia.

Tymczasem mam nadzieję, że ktoś ma lepszy algorytm.

ciekawy kot
źródło
1
Coś takiego może rozwiązać problem, przynajmniej w przybliżeniu, dla jednego koła. (Można to łatwo zrobić za pomocą zliczeń ogniskowych z GIS.) Ale to nie rozwiąże problemu wielu kół.
whuber
@whuber: A co z rozwiązaniem dla jednego koła, a następnie upuszczeniem wszystkich punktów znajdujących się w tym okręgu, a następnie powtórzeniem oryginalnego algorytmu? Czy widzisz sytuacje, w których to się nie udałoby?
curious_cat
Tak, łatwo. (Twój jest „chciwym algorytmem”). Rozważmy przypadek w jednym wymiarze z punktami na . Twój algorytm umieszcza pierwszy okrąg obejmujący 28, 29, 30, 31, a drugi obejmujący : osiem punktów w całości . Lepsze rozwiązanie obejmuje z jednym kołem i z innym: dziewięć punktów. 0 , 1 , 2 , 20 , 21 , 28 , 29 , 30 , 31 , 32 , 39 , 40 28 , 29 , 30 , 31 , 32 0 , 1 , 2 20 , 21 , 28 , 29 , 30 30 , 31 , 32 ,R=10,N=20,1,2,20,21,28,29,30,31,32,39,4028,29,30,31,320,1,220,21,28,29,3030,31,32,39,40
whuber
@whuber: Prawda. Masz rację. Chociaż w zależności od struktury punktów wejściowych w niektórych (wielu?) Przypadkach zachłanne i niechciane rozwiązania mogą być identyczne lub zbliżone? Nie wiem
curious_cat
@whuber: Problem wydaje się głównie na granicach. Co jeśli (trochę jak wspomniałem w mojej odpowiedzi) jeden przesuwa okno +Ri -R, a następnie umieszcza wszelkie możliwe rozwiązania na stosie i wybiera spośród nich. np. w twoim 1Duderzeniu 28,29,30,31,32przesuwałbym okno do 18-28i 38-48szukał wszystkich możliwych rozwiązań. Następnie można w nich znaleźć kombinacje maksymalnego uzyskiwania punktów. Nie jesteś pewien, czy to pomogłoby? Próbuję sprawdzić, czy mój naiwny algorytm da się uratować? :)
curious_cat