Виконуючи kNN, потрібно пам’ятати про одне, а саме, що це не строго математичний похідний алгоритм, а простий класифікатор / регресор, заснований на одній інтуїції - основна функція не сильно змінюється, коли аргументи не змінюються багато. Або іншими словами, основна функція локально близька до постійної. З цим припущенням ви можете оцінити значення основної функції в будь-якій заданій точці за (середньозваженим) середнім значенням найближчих k точок.
Маючи це на увазі, ви можете усвідомити, що немає чіткого імперативу, що робити, коли в голосуванні більшості немає чіткого переможця. Ви можете завжди використовувати непарний к або використовувати інжекторне зважування.
У випадку, якщо сусіди 3 - 5 знаходяться на одній відстані від точки, що цікавить, ви можете або використовувати лише два, або використовувати всі 5. Знову ж, пам’ятайте, що kNN - це не якийсь алгоритм, отриманий із складного математичного аналізу, а просто проста інтуїція. Ви вирішуєте, як ви хочете розібратися з цими особливими справами.
1| | х-у| |2
Цього року також була приємна стаття Саморі Кпотуфе та Абдеслама Буларія щодо НІПС, яка торкалася питання пошуку правильної ваги. Їх загальна інтуїція полягає в тому, що основна функція різниться по-різному в різних напрямках (тобто різні її часткові похідні мають різну величину), отже, було б розумно в деякому сенсі змінити показники / зважування відповідно до цієї інтуїції. Вони стверджують, що цей трюк, як правило, покращує ефективність регресії kNN та ядра, і я думаю, що вони навіть мають деякі теоретичні результати, щоб підтвердити цю заяву (хоча я не впевнений, що насправді вимагають ці теоретичні результати, я не встиг піти через весь документ ще). Папір можна безкоштовно завантажити з їхніх сайтів або після Googling "Градієнтні ваги допомагають непараметричним регресорам".
Тепер, напевно, ви захочете дізнатися, як ви можете знайти правильну k, метрику, зважування, дію для виконання, коли є нічия тощо. Сумно в тому, що в основному важко дійти до правильних гіперпараметрів після глибокого роздуму, вам, мабуть, доведеться протестувати різні пучки гіперпараметрів і побачити, які з них добре працюють на якомусь валідаційному наборі. Якщо у вас є деякі обчислювальні ресурси, і ви хочете автоматично добирати потрібні параметри при гарному наборі гіперпараметрів, є недавня ідея (що мені дуже подобається) використовувати процеси Гаусса для оптимізації без похідних в цьому налаштуванні.
Дозвольте мені детальніше розібратися - пошук набору гіперпараметрів (тобто зведення до мінімуму помилок у валідаційних даних) може розглядатися як проблема оптимізації. На жаль, в цьому налаштуванні ми не можемо отримати градієнт функції, яку ми намагаємося оптимізувати (що зазвичай ми хочемо зробити, щоб здійснити спуск градієнта або деякі більш досконалі методи). Гауссові процеси можуть бути використані в цій обстановці для пошуку наборів гіперпараметрів, які мають великі шанси, виконати краще, ніж найкращі, які ми знайшли до цього моменту. Отже, ви можете ітераційним чином запустити алгоритм з деяким набором гіперпараметрів, а потім запитати процес Гаусса, для яких найкраще спробувати наступний, спробувати ці тощо.
Для детальної інформації шукайте документ "Практична байесівська оптимізація алгоритмів машинного навчання" Джаспера Снука, Уго Ларошелла та Райана П Адамса (також їх можна знайти на їх веб-сайтах або через Google).