Знаходження відомої кількості центрів кіл, які максимізують кількість точок на певній відстані


10

У мене є набір 2-D даних, де я хочу знайти центри визначеної кількості центрів кіл ( ), які максимізують загальну кількість точок на заданій відстані ( ).NR

наприклад, у мене є 10 000 точок даних і я хочу знайти центри кіл, які захоплюють якомога більше точок в радіусі . Заздалегідь наводяться 5 центрів і радіус 10, не отримані з даних.(Xi,Yi)N=5R=10

Наявність точки даних у колі - це двійкове або / або пропозиція. Якщо , немає значення різниці в точці від 11 одиниць від відстані 100 одиниць, оскільки вони обидві> 10. Так само, якщо знаходитись у колі, немає зайвого значення знаходитись поблизу центру проти краю . Точка даних знаходиться або в одному з кіл, або поза.R=10

Чи є хороший алгоритм, який можна використовувати для вирішення цієї проблеми? Вони, мабуть, пов'язані з методами кластеризації, але замість мінімізації середньої відстані, функція "відстань" дорівнює 0, якщо точка знаходиться в межах будь-якої з точок, а 1 в іншому випадку.RN

Моїм перевагою було б знайти спосіб зробити це в R, але будь-який підхід був би вдячний.


Чи допускається перекриття кола?
curious_cat

1
Це по суті сусідська (або фокусна) операція на растровому наборі даних. Було б добре перевірити сайт ГІС, щоб перевірити, чи на нього відповіли, та вивчити пакети R для проведення растрового аналізу.
Andy W

1
Допускається перекриття кола, але точки даних, охоплені обома колами, не будуть подвійними. Дякуємо за вказівник на сусідство / фокусну роботу на растрових наборах даних. Я буду шукати щось за цими напрямками.
colonel.triq

@Andy W Хоча фокальні операції, природно, брали участь у вирішенні, це питання виходить за межі досвіду ГІС-спільноти, IMHO, оскільки це справді (досить складна) проблема оптимізації. Це не є простою знахідкою-максимумом -фокальної-середньої сітки. Я рекомендую тримати його тут деякий час, а потім, якщо не з’явиться задовільного рішення, перехід на сайт, орієнтований на програмування.
whuber

.... або переходить на math.overflow? Вони також можуть мати деяку інформацію про це.
curious_cat

Відповіді:


1

Це варіація k-означає проблему. Радіус центрів не має значення, якщо їх вважати рівними.

Посилання:

Він розмістить центри кіл у місцях найбільшої ймовірності точок.

Класична процедура К-засобів:

  1. встановити кількість кластерів до 5
  2. поставити кожну крапку у випадковому кластері
  3. для кожного кластера обчисліть середню позицію
  4. для кожної точки обчисліть відстань до кожної нової середньої позиції
  5. асоціювати членство з найближчим кластером
  6. повторювати до завершення (ітерації, зміна положення чи інший показник помилки)

Параметри:

  • Ви можете скористатися деякою недостатністю релаксації після 3, коли середнє положення повільно переводите у нове положення.
  • це дискретна система, тому вона не ідеально збігається. Іноді це відбувається, і ти можеш закінчитися, коли точки перестають змінювати членство, але іноді вони просто трохи хитаються.
  • Якщо ви робите власний код (як і більшість людей), то ви можете використовувати вищезазначені значення POR k як вихідну точку, а також зробити деякі зміни на ЕМ, поінформовані виключно на відсотки пунктів та повністю охоплені колами.

Чому K-засоби атакують проблему:

  • Це еквівалент примірності моделі Гауссова суміші, коли коваріації компонентів рівні. Центри компонентів суміші розташовуватимуться на позиціях найбільших очікувань точок. Криві постійної ймовірності будуть колами. Це алгоритм ЕМ, тому він має асимптотичну конвергенцію. Членства важкі, не м'які.
  • Я думаю, що якщо фундаментальне припущення про модель суміші рівних дисперсійних компонентів є розумно «близьким», що б це не означало, то цей метод підходить. Якщо ви просто випадковим чином розподіляєте бали, це менше шансів добре підходити.

Має бути якийсь аналог "нульового завищеного пуассона", де є компонент, який не є гауссом, який підбирає рівномірний розподіл.

Якщо ви хотіли «налаштувати» модель і були впевнені, що є достатньо точок вибірки, тоді ви можете ініціалізувати з k-засобами, а потім зробити розширений регулятор k-засобів, який видаляє точки поза радіусами кіл від конкуренції. Це дещо потурбує ваші кола, але це може дещо покращити ефективність даних.


Не могли б ви бути трохи більш чіткими щодо того, як K-засоби вирішують цю проблему?
whuber

Дякую за пропозицію. Ще мені не зрозуміло, що підхід К-засобів вирішує проблему? Розглянемо на прикладі трьох кластерів нормальних (0,1) згенерованих даних, де центри зміщені на 5 одиниць. Центри К-засобів давали б максимальну щільність. Тепер виріжте деякі точки з "отворами" таким чином, що дані ближче до 0,5 до центрів видаляються. K-засоби все одно будуть показувати приблизно однакові центри, але якщо ви намагаєтеся отримати максимальне покриття для N = 3, R = 0,5, це явно не є правильною відповіддю (адже отвори для пончиків не містять даних). Я щось нерозумію?
colonel.triq

Більше розберемось у вашому питанні для кращої відповіді, коли я встигну. Я люблю допускати негативні ваги. Іноді може обробляти дані пончики, а також радіальні раціональні многочлени.
EngrStudent

0

Хтось, мабуть, має кращий офіційний алгоритм, але ось один підхід грубої сили (хакер?). Я буду використовувати один з шестикутних алгоритмів бінінгу для обчислення 2D гістограми. Як hexbinу R.

Я б використовував розмір шестикутника, який приблизно обріс ваше коло радіуса R, а потім сортувати на вершині N бункерів. Якщо у вас є Nчіткі далекі бункери, чудово. Тепер одним із способів є переміщення навколо кола локально за шкалою 2 * R (у напрямку x та y) від центру шестикутників верхньої щільності. Обчислювальна щільність може приблизно оптимізувати місцеве місце. Це буде враховувати той факт, що шестикутники не були рухомим вікном щодо фіксованого походження.

Якщо всі верхні бункери знаходяться поруч, вам доведеться мати розумніший спосіб переміщення ваших кіл у тій околиці.

Зауважте, що я можу придумати кілька найважливіших випадків, коли така наївна стратегія вражає невдачею. І все-таки лише відправна точка.

Тим часом, сподіваюся, у когось кращий алгоритм.


1
Щось подібне може вирішити проблему, принаймні приблизно, для одного кола. (Це легко зробити за допомогою фокусних підрахунків за допомогою ГІС.) Але це не вирішить проблему з кількома колами.
whuber

@whuber: А що з розв’язуванням для одного кола, потім відкинути всі точки, що лежать у ньому, а потім повторити початковий алгоритм? Чи можете ви бачити ситуації, коли це не вдасться?
curious_cat

Так, легко. (Ваш - «жадібний алгоритм».) Розгляньте випадок в одному вимірі з точками . Ваш алгоритм ставить перше коло, що охоплює а друге охоплює : вісім точок у тото . Краще рішення охоплює одним колом і іншим: дев'ять балів. 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: Правда. Ти правий. Хоча залежно від структури вхідних точок у деяких (багатьох?) Випадках жадібні та не жадібні рішення можуть бути однаковими чи близькими? Не знаю.
curious_cat

@whuber: Проблема здається здебільшого в межах. Що робити , якщо (кілька , як я вже говорив в моїй обороні) один переміщує вікно +Rі -Rпотім поміщає всі можливі рішення по стеку і вибирає серед них. Наприклад, у вашому 1Dприкладі при натисканні 28,29,30,31,32воно просуне вікно 18-28і 38-48шукає всі можливі рішення. Тоді всередині цих можна шукати максимально точкові комбінації. Не знаєте, чи допоможе це? Я намагаюся дізнатися, чи можна врятувати мій наївний алгоритм? :)
curious_cat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.