K-NN означает K-ближайший сосед. K-NN — один из самых простых, простых в реализации и высокоточных алгоритмов контролируемого машинного обучения, который можно использовать как для классификации, так и для регрессии. K-NN классифицирует точку данных на основе точек, которые более похожи на нее, что означает точки данных, которые ближе всего к ней. Он использует метрики расстояния для измерения расстояний между точками данных.

  • K-NN — это непараметрический алгоритм, что означает, что он не делает никаких предположений относительно базовых данных.
  • K-NN также известен как ленивый ученик.

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

  • K-NN имеет очень высокую временную и пространственную сложность

Алгоритм K-NN широко используется в распознавании образов, распознавании изображений, классификации.

Институция K-NN:

Проблема. Предположим, нам задан рост и вес, и нам нужно предсказать пол на основе этих признаков.

Согласно нашей постановке задачи, рост и вес являются нашей входной переменной, а пол — нашей целевой переменной.

X — → (Рост, Вес)

y — — —› (Пол)

Анализ исторических данных:

Мы хотим, чтобы наша машина понимала закономерности и взаимосвязь между ростом и весом среди полов. Машина принимает входные переменные, пропускает их через алгоритм и предсказывает результат.

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

  1. Мы проверяем, доступны ли исторические данные? В нашем случае да

3. Доступны ли целевые данные в исторических данных? Да, у нас есть пол в наших данных

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

Учитывая точку запроса:

  • Найдите k ближайших соседей.
  • Выполнить голосование (подсчет)’
  • Рассчитать большинство голосов.
  • Определите класс на основе большинства

Точность нашей модели зависит от значения K, поэтому нам нужно выбрать наилучшее значение K.

Как мы выбираем значение «K»?

Чтобы найти наилучшее значение K, мы проводим настройку гиперпараметров. Мы также можем попробовать разные значения «K» и проверить наилучшую точность.

Число «К» не должно быть ни слишком маленьким, ни слишком большим. Значение по умолчанию K = 5 для модуля sklearn, но мы также можем изменить это.

Для данных бинарной классификации, например: (Мужской/Женский), (Да/Нет) мы берем нечетное значение «К», то есть либо 3, либо 5, 7 и т. д.

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

Очень низкое значение K, такое как K=1 или K=2, может быть зашумленным и привести к выбросам в модели.

Большие значения для K хороши, но могут возникнуть некоторые трудности.

Если «К» слишком мало, это приводит к переоснащению модели, а если «К» слишком велико, это приводит к недостаточному соответствию.

Рассчитать расстояние между точками данных:

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

  • Евклидово расстояние:

Евклидово расстояние рассчитывается как квадратный корень из суммы квадратов разностей между новой точкой (x) и существующей точкой (y).

  • Манхэттенское расстояние:

Это расстояние между реальными векторами с использованием суммы их абсолютной разности.

  • Угловое расстояние: измерение угла между двумя векторами.

Алгоритм для K-NN:

  1. Определите значение «k» ← количество ближайших соседей.
  2. Расстояния = [ ] ← Для сохранения всех расстояний между всеми точками данных, которые будут использоваться в будущем.
  3. KNNPTS = [ ] ← Для сохранения ближайших соседних точек.
  4. Для каждой точки данных в наборе данных (Dn):
  • Вычислите расстояния («евклидово» расстояние по умолчанию, но мы можем использовать другие показатели) между точкой запроса и точкой данных.
  • Расст. = Расстояние (точка_запроса, точка_данных)
  • Distances.append((data_point, dist.))
  • Расстояния = [(dp1,x1), (dp2,y1), — -
  1. Сортировать расстояния
  2. KNNpts = расстояния[:k]

выберите первые k значений в качестве соседей.

7. Голосование:

количество_мужчин = 0

count_female = 0

для pt в KNNpts:

если pt мужчина:

Count_мужчина += 1

еще:

Count_female += 1

8. Голосование большинством:

если count_male › count_female:

Распечатать («Мужчина»)

еще:

Распечатать("Женщина")

K-NN для регрессии:

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

Преимущества алгоритма KNN:

  • Это просто реализовать.
  • Он устойчив к зашумленным тренировочным данным
  • Это может быть более эффективным, если обучающие данные большие.

Недостатки алгоритма KNN:

  • Всегда нужно определить значение K, которое иногда может быть сложным.
  • Стоимость вычислений высока из-за расчета расстояния между точками данных для всех обучающих выборок.
  • По мере увеличения объема данных KNN становится медленнее.

Некоторыми из лучших альтернатив K-NN являются приблизительный ближайший сосед (A-NN), Kdtree, Ball Tree. Они помогают повысить эффективность алгоритма K-NN.

Реализация KNN с использованием Python:

Мы используем набор данных Iris для реализации классификации KNN.

Ниже перечислены шаги, которые необходимо выполнить:

  1. Загрузите данные
  2. Подготовка данных — нормализация или масштабирование
  3. поезд-тест Сплит
  4. Обучение модели
  5. Прогноз
  6. Оценка

Импорт необходимых библиотек и данных:

Мы импортируем numpy и pandas для обработки и анализа данных, matplotlib и seaborn — библиотеки визуализации, которые помогают отображать и визуализировать данные.

Мы загружаем наш набор данных «Ирис», который содержит данные о цветке ириса. Он имеет 150 строк и пять столбцов.

Набор данных состоит из столбца «Виды», который является нашей целевой переменной. В этой колонке есть разные виды цветка, основанные на их чашелистике, длине и ширине лепестков.

Есть три вида, и каждый вид имеет 50 рядов.

Идентификация входных и целевых переменных:

  • Виды — наша целевая переменная.
  • Длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка — наши входные переменные.

Следующее мы выполняем разделение обучения и тестирования.

Мы разделяем наши данные для выполнения обучения и тестирования. Мы импортируем модуль train_test_split для выполнения разделения. Test_size = 0,25 указывает, что наше разделение выполнено в соотношении 75:25, где 25% — это размер нашего теста, а 75% — размер нашего поезда.

Выполнение стандартизации:

Затем мы выполняем метод преобразования данных, называемый стандартизацией, чтобы преобразовать все наши числовые данные в общий масштаб. Из sklearn мы импортируем StandardScalar для выполнения стандартизации.

Мы инициализируем объект классификатора классом KNeighbourClassifier для выполнения классификации KNN для данных X_train_transformed.

После выполнения классификации на тестовых данных мы теперь выполняем прогнозирование в данных Train, используя y_test и y_test_pred, чтобы сравнить результат.

Оценка:

Наша модель имеет точность около 97 %, что означает, что наша модель смогла правильно предсказать «виды»97 % раз.

  • KNN требует очень меньше времени, высокой пространственной сложности для обучения данных и много времени для прогнозирования данных.
  • Это происходит потому, что на этапе обучения он только запоминает данные, а не учится. Вся работа происходит на этапе тестирования.
  • Когда приходит точка запроса, именно тогда она вычисляет расстояние, сортирует их, находит k-ближайших и классифицирует по своему классу. Из-за чего у него высокое время предсказания.
  • KNN по этой причине также называют ленивым учеником.

Применения алгоритма K-NN:

  • K-NN используется в системах рекомендаций для социальных сетей, таких как Youtube, Spotify, Netflix и т. д.
  • Обнаружение мошенничества.
  • Анализ настроений.
  • Распознавание изображений, Распознавание объектов.
  • Распознавание лиц.
  • Мониторинг и обнаружение здоровья.

Заключение:

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