Лінія розділяє два набори точок


19

Якщо є спосіб визначити, чи можна розділити два набори точок лінією?

У нас є два набори точок і якщо є пряма, яка розділяє і таку, що всі точки і лише з одного боку прямої, і всі точки і тільки з іншого боку.Б А В А А Б ВАБАБААББ

Найбільш наївний алгоритм, який я придумав, - це побудувати опуклий багатокутник для і і перевірити їх на перетин. Час складності для цього має бути для побудови опуклого багатокутника. Насправді я не очікую жодних покращень у часовій складності, я не впевнений, що її взагалі можна покращити. Але принаймні повинен бути більш красивий спосіб визначити, чи є така лінія.B O ( n журнал h )АБО(нжурналгод)

Відповіді:


19

І улі, і Дейв Кларк правильно зауважують, що це проблема лінійного програмування навіть у більш високих розмірах (Чи можна розділити ці два точкові множини гіперплан?), І тому це можна вирішити в поліноміальний час. Але оскільки ваші точки лежать у площині, вашу проблему насправді можна вирішити за час, де n - загальна кількість балів.О(н)н

Найпростішим рішенням є, мабуть, рандомізований алгоритм Сейделя. Виберіть вхідну точку рівномірно і рекурсивно обчисліть роздільну лінію для всіх точок, крім p .p p

  • Якщо такої лінії немає, то вихідні точки не можна розділити.

  • Якщо знаходиться на правильній стороні л , то відокремлює вихідні точки.p

  • Якщо стоїть з неправильної сторони , то або вихідні точки можна відокремити лінією через p , або початкові точки взагалі не відокремити. Цю умову легко перевірити в O ( n ) час [вправа].ppО(н)

Цей алгоритм працює з часом з високою ймовірністю (стосовно випадкових виборів алгоритму). Більш детально див . Оригінальний документ або будь-яку кількість онлайн-конспектів лекцій.О(н)


Дуже дякую, я збираюся заглибитися в цей документ.
com

У третьому випадку ви заявляєте, що це може бути так, що лінія проходить через , як це допомагає це знати? p
Тарраш

10

Властивість двох ваших наборів даних полягає в лінійній роздільності , просто в тому, що існує лінія, яка їх розділяє. Багато машинного навчання присвячено пошуку лінійних класифікаторів , які є лініями, які виконують відокремлення, яке вас цікавить.

Як ви говорите про лінії, я припускаю, що ваші точки лежать у площині. Те , що ви хочете зробити , це знайти значення , ш 2 і ш 3 , таке , що для всіх точок ( в 1 , 2 ) в безлічі А , ш 1 1 + W 2 2W 3 і для всіх точок ( b 1 , b 2 ) в B , w 1 b 1 +ш1ш2ш3(а1,а2)Аш1а1+ш2а2ш3(б1,б2)Б . Таким чином, нерівність ш 1 х + ш 2 у ш 3 можна розглядати як класифікатор для безлічі A .ш1б1+ш2б2<ш3ш1х+ш2уш3А

Існує набір алгоритмів машинного навчання для визначення оптимальної лінії (лінійна регресія, логістична регресія тощо). Вони знайдуть значення для на основі деякої метрики помилок. Потім ви можете перевірити, чи правильно класифіковані всі бали. Тобто, чи всі з значень в A задовольняє рівняння вище і аналогічно для B .ш1,ш2,ш3АБ

Оскільки вас цікавить лише те, чи існує така лінія, вам потрібно було використовувати існуючі методи (хоча це, мабуть, було б простіше). Просто встановіть наступну сукупність рівностей за вільними змінними .ш1,ш2,ш3

для кожного я = 1 , . . , | А | , де A = { ( a 1 1 , a 1 2 ) , , ( a | A | 1 , a | A | 2 ) } .ш1а1i+ш2а2iш3i=1,..,|А|А={(а11,а21),,(а1|А|,а2|А|)}

для кожного J = 1 , . . , | Б | , де B = { ( b 1 1 , b 1 2 ) , , ( b | B | 1 , b | B | 2 ) } .ш1б1j+ш2б2j<ш3j=1,..,|Б|Б={(б11,б21),,(б1|Б|,б2|Б|)}

Якщо ці обмеження узгоджуються, то лінія існує.


5

Якщо я добре пам'ятаю, підтримуючі векторні машини будують окремі гіперплани. Якщо ви виберете розмірність звичайно, гіперплан стає лінією. Можливо, вам доведеться перевірити, чи є додаткові припущення, які необхідно виконати. У двох вимірах весь підхід може значно спроститись, тому час виконання може бути кращим, ніж для загального підходу.2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.