Справа з зв'язками, гирями та голосуванням в kNN


15

Я програмую kNN алгоритм і хотів би знати наступне:

Перерви у краватці:

  1. Що станеться, якщо чіткого переможця в голосуванні більшості немає? Наприклад, всі k найближчі сусіди є з різних класів, або для k = 4 є 2 сусіди з класу A і 2 сусіди з класу B?
  2. Що станеться, якщо неможливо точно визначити k найближчих сусідів, оскільки є більше сусідів, які мають однакову відстань? Наприклад, для списку відстаней (x1;2), (x2;3.5), (x3;4.8), (x4;4.8), (x5;4.8), (x6;9.2)не можна було б визначити k = 3 або k = 4 найближчих сусідів, тому що всі сусіди 3-го-5-го мають однакову відстань.

Ваги:

  1. Я читаю, що добре зважити k-найближчих сусідів перед тим, як вибрати клас-переможець. Як це працює? Тобто, як зважуються сусіди і як тоді визначається клас?

Більшість альтернатив голосування:

  1. Чи існують інші правила / стратегії для визначення класу-переможця, окрім голосів більшості?

Відповіді:


7

На мій погляд, ідеальним способом розірвати краватку для k найближчого сусіда було б зменшити k на 1, поки ви не порушите краватку. Це завжди спрацює незалежно від схеми зважування голосів, оскільки нічия неможлива, коли k = 1. Якби ви збільшили k , очікуючи на схему зважування та кількість категорій, ви не зможете гарантувати розрив матчу.


12
чому зв’язування неможливе, коли k = 1, а якщо два сусідки належать до різних класів з однаковою відстані, як визначити найближчого сусіда з k = 1?
j5shi

7

Виконуючи kNN, потрібно пам’ятати про одне, а саме, що це не строго математичний похідний алгоритм, а простий класифікатор / регресор, заснований на одній інтуїції - основна функція не сильно змінюється, коли аргументи не змінюються багато. Або іншими словами, основна функція локально близька до постійної. З цим припущенням ви можете оцінити значення основної функції в будь-якій заданій точці за (середньозваженим) середнім значенням найближчих k точок.

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

У випадку, якщо сусіди 3 - 5 знаходяться на одній відстані від точки, що цікавить, ви можете або використовувати лише два, або використовувати всі 5. Знову ж, пам’ятайте, що kNN - це не якийсь алгоритм, отриманий із складного математичного аналізу, а просто проста інтуїція. Ви вирішуєте, як ви хочете розібратися з цими особливими справами.

1||х-у||2

Цього року також була приємна стаття Саморі Кпотуфе та Абдеслама Буларія щодо НІПС, яка торкалася питання пошуку правильної ваги. Їх загальна інтуїція полягає в тому, що основна функція різниться по-різному в різних напрямках (тобто різні її часткові похідні мають різну величину), отже, було б розумно в деякому сенсі змінити показники / зважування відповідно до цієї інтуїції. Вони стверджують, що цей трюк, як правило, покращує ефективність регресії kNN та ядра, і я думаю, що вони навіть мають деякі теоретичні результати, щоб підтвердити цю заяву (хоча я не впевнений, що насправді вимагають ці теоретичні результати, я не встиг піти через весь документ ще). Папір можна безкоштовно завантажити з їхніх сайтів або після Googling "Градієнтні ваги допомагають непараметричним регресорам".

Тепер, напевно, ви захочете дізнатися, як ви можете знайти правильну k, метрику, зважування, дію для виконання, коли є нічия тощо. Сумно в тому, що в основному важко дійти до правильних гіперпараметрів після глибокого роздуму, вам, мабуть, доведеться протестувати різні пучки гіперпараметрів і побачити, які з них добре працюють на якомусь валідаційному наборі. Якщо у вас є деякі обчислювальні ресурси, і ви хочете автоматично добирати потрібні параметри при гарному наборі гіперпараметрів, є недавня ідея (що мені дуже подобається) використовувати процеси Гаусса для оптимізації без похідних в цьому налаштуванні.

Дозвольте мені детальніше розібратися - пошук набору гіперпараметрів (тобто зведення до мінімуму помилок у валідаційних даних) може розглядатися як проблема оптимізації. На жаль, в цьому налаштуванні ми не можемо отримати градієнт функції, яку ми намагаємося оптимізувати (що зазвичай ми хочемо зробити, щоб здійснити спуск градієнта або деякі більш досконалі методи). Гауссові процеси можуть бути використані в цій обстановці для пошуку наборів гіперпараметрів, які мають великі шанси, виконати краще, ніж найкращі, які ми знайшли до цього моменту. Отже, ви можете ітераційним чином запустити алгоритм з деяким набором гіперпараметрів, а потім запитати процес Гаусса, для яких найкраще спробувати наступний, спробувати ці тощо.

Для детальної інформації шукайте документ "Практична байесівська оптимізація алгоритмів машинного навчання" Джаспера Снука, Уго Ларошелла та Райана П Адамса (також їх можна знайти на їх веб-сайтах або через Google).


2
Попередження: оптимізація гіперпараметрів для найкращої точності набору валідацій є прямим способом подолання забуття. Ви хочете вкласти резюме.

Швидке зауваження, що "непарний k" не обов'язково вирішить проблему зв'язання ... наприклад, k = 3 при класифікації трьох груп. Крім того, я згоден. Приємне пояснення.
Пілл

1

Щодо цієї частини краватки, найкраща ідея базових ліній для зв'язків зазвичай є випадковим розривом, тому вибір випадкового класу всіх виграючих у голосуванні та випадковий вибір підмножини зв'язаних об'єктів, достатньо великих розмірів, щоб заповнити k.

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


0

Один з можливих способів - алгоритм автоматично збільшувати або зменшувати k, поки ви не отримаєте чіткого переможця.

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