При выполнении kNN вам нужно помнить одну вещь, а именно, что это не строго математически производный алгоритм, а простой классификатор / регрессор, основанный на одной интуиции - основная функция не сильно меняется, когда аргументы не меняются много. Или, другими словами, основная функция локально почти постоянна. С этим допущением вы можете оценить значение базовой функции в любой заданной точке с помощью (возможно, взвешенного) среднего значения ближайших k точек.
Имея это в виду, вы можете понять, что нет четкого императива в отношении того, что делать, если в голосовании большинства нет явного победителя. Вы можете либо всегда использовать нечетное k, либо использовать некоторое инъективное взвешивание.
В случае, если соседи с 3 по 5 находятся на одинаковом расстоянии от интересующей вас точки, вы можете либо использовать только две, либо использовать все 5. Опять-таки, имейте в виду, что kNN - это не какой-то алгоритм, полученный из сложного математического анализа, а просто простая интуиция. Вам решать, как вы хотите справиться с этими особыми случаями.
1| | х-у| |2
Также в этом году была опубликована прекрасная статья Самори Кпотуфе и Абдеслама Булариаса о том, как NIPS касается правильного определения веса. Их общая интуиция заключается в том, что основная функция изменяется по-разному в разных направлениях (т. Е. Ее различные частные производные имеют разную величину), поэтому было бы целесообразно в некотором смысле изменить метрики / весовые коэффициенты в соответствии с этой интуицией. Они утверждают, что этот прием обычно улучшает производительность kNN и регрессии ядра, и я думаю, что у них даже есть некоторые теоретические результаты, подтверждающие это утверждение (хотя я не уверен, что на самом деле утверждают эти теоретические результаты, у меня не было времени на это через всю бумагу пока). Бумагу можно бесплатно загрузить с их сайтов или после поиска в Google «Градиентные веса помогают непараметрическим регрессорам».
Теперь вы, вероятно, захотите узнать, как вы можете найти правильные k, метрику, взвешивание, действие, которое нужно выполнить, когда есть розыгрыши и так далее. Печально то, что после некоторого глубокого размышления, в принципе, трудно найти правильные гиперпараметры, вам, вероятно, нужно будет протестировать разные группы гиперпараметров и посмотреть, какие из них хорошо работают на некотором наборе валидации. Если у вас есть некоторые вычислительные ресурсы, и вы хотите автоматически получить правильные параметры при хорошем наборе гиперпараметров, недавно появилась идея (которая мне очень нравится) использовать гауссовские процессы для оптимизации без производных в этой настройке.
Позвольте мне уточнить - нахождение набора гиперпараметров (т. Е. Минимизирующих ошибку в данных валидации) может рассматриваться как проблема оптимизации. К сожалению, в этой настройке мы не можем получить градиент функции, которую мы пытаемся оптимизировать (что мы обычно хотим сделать, выполнить градиентный спуск или некоторые более продвинутые методы). Гауссовские процессы могут использоваться в этой настройке для нахождения наборов гиперпараметров, которые имеют большие шансы, работать лучше, чем лучшие, которые мы нашли до настоящего момента. Следовательно, вы можете итеративно запустить алгоритм с некоторым набором гиперпараметров, а затем спросить гауссовский процесс, для каких из них лучше всего попробовать следующий, попробовать эти и так далее.
За подробностями обращайтесь к статье «Практическая байесовская оптимизация алгоритмов машинного обучения» Джаспера Снока, Хьюго Ларошелла и Райана П. Адамса (которую также можно найти на их веб-сайтах или в Google).