K алгоритм ближайшего соседа - PullRequest
19 голосов
/ 03 февраля 2011

Возможно, я довольно глуп, но просто не могу найти удовлетворительный ответ: используя алгоритм KNN, скажем, k = 5.Теперь я пытаюсь классифицировать неизвестный объект, получая его 5 ближайших соседей.Что делать, если после определения 4 ближайших соседей следующие 2 (или более) ближайших объекта имеют одинаковое расстояние?Какой объект из этих 2 или более следует выбрать в качестве пятого ближайшего соседа?

Заранее спасибо:)

Ответы [ 5 ]

18 голосов
/ 03 февраля 2011

Какой объект из этих 2 или более следует выбрать в качестве пятого ближайшего соседа?

Это действительно зависит от того, как вы хотите это реализовать.

Большинство алгоритмов делают одну из трех вещей:

  1. Включите все точки равного расстояния, поэтому для этой оценки они будут использовать 6 точек, а не 5.
  2. Используйте «первую» найденную точку двух равных расстояний.
  3. Выберите случайную (обычно с последовательным начальным числом, чтобы результаты были воспроизводимыми) точку из 2 найденных точек.

При этом большинство алгоритмов, основанных на радиальном поиске, имеют внутреннее предположение о стационарности, и в этом случае действительно не должно иметь значения, какой из указанных выше вариантов вы выберете. В общем, любой из них должен теоретически обеспечивать разумные значения по умолчанию (особенно, поскольку они являются самыми дальними точками в приближении и должны иметь самые низкие эффективные веса).

6 голосов
/ 09 мая 2011

Еще один интересный вариант - использовать ближайшего соседа так:

  • Вы рассчитываете расстояния 5 ближайших соседей от каждого класса до выборки: у вас будет 5 расстояний от каждого класса.

  • Тогда вы получите среднее расстояние для каждого класса.

  • Это меньшее среднее расстояние будет классом, который вы назначите для выборки.

Этот способ эффективен для наборов данных классов, которые перекрываются.

5 голосов
/ 06 июля 2011

Если у вас есть другая функция расстояния, вы можете использовать ее, чтобы разорвать связь. Даже плохой может сделать эту работу, лучше, если у вас есть эвристика. Например, если вы знаете, что одна из функций, рассматриваемых для вычисления вашего основного расстояния, является более значимой, используйте только эту функцию для устранения связи.

Если это не так, выбирайте наугад. Несколько раз запустите вашу программу на одном и том же тестовом наборе, чтобы проверить, имеет ли значение случайный выбор.

2 голосов
/ 06 июля 2011

Может быть, вы можете попробовать нечеткий кнн.Я думаю, что для выбора k нужно провести много экспериментов, чтобы получить наилучший результат классификации.

0 голосов
/ 31 января 2019

Если у вас есть k = 5, вы посмотрите на пять лучших записей, посмотрите на наиболее распространенный результат из этих пяти.Вполне вероятно, что вы получите две пары, которые поставят вас в затруднительное положение, и это будет сложно, потому что тогда у вас есть шанс 50/50 для каждой пары.

Так что жизнь становится сложной.Итак, как вы выбираете значение для к?Есть некоторые метрики, которые вы можете использовать для анализа результата после факта, но нет строгого правила того, каким должно быть k, поэтому я бы упростил для себя, только начав и придерживаясь k = 3 вместо k = 5 и затем внизПо пути рассмотрим некоторые стратегии, которые могут помочь вам оптимизировать значение k, взглянув на фактическую точность ваших прогнозов.

...