Алгоритм k-ближайших соседей

Алгоритм k-ближайших соседей продолжает серию статей о Топ-10 data mining алгоритмах.

kNN (k-Nearest Neighbors) – это алгоритм классификации, однако это – ленивый классификатор.

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

Активный же классификатор создает классификационную модель в процессе обучения. Когда вводятся новые данные, такой классификатор «скармливает» данные классификационной модели.

Какими классификаторами являются C4.5, SVM и AdaBoost? В отличие от kNN, они все – активные классификаторы.

Вот почему:

  • C4.5 строит дерево решений в процессе обучения;
  • SVM строит гиперплоскость;
  • AdaBoost строит ансамблевую классификацию.
  • Что делает kNN? kNN не строит никакую классификационную модель. Вместо этого он просто сохраняет размеченные тренировочные данные.

    Когда появляется новые неразмеченные данные, kNN проходит по 2 базовым шагам:

    Сначала он ищет k ближайших размеченных точек данных – другими словами, k ближайших соседей.

    Затем, используя классы соседей, kNN решает, как лучше классифицировать новые данные.

    Как kNN понимает, какие точки находятся ближе всего? Для непрерывных данных kNN использует дистанционную метрику, например, Евклидову дистанцию (метрику). Выбор метрики зависит от типа данных. Некоторые советуют даже выбирать дистанционную метрику на основании тренировочных данных. Есть очень много нюансов, описанных во многих работах по дистанционным метрикам kNN.

    При работе с дискретными данными, они сначала преобразуются в непрерывные. Вот 2 примера:

  • Использование расстояния Хэмминга как метрики для определения «близости» двух текстовых строк;
  • Преобразование дискретных данных в бинарные числа.
  • 2 треда со Stack Overflow предлагают еще несколько решений:

  • kNN классификация категорийных данных;
  • Использование kNN в R с категорийными величинами.
  • Как kNN классифицирует новые данные, если соседи «не согласны»? kNN легко решает, к какому классу отнести данные, если все соседи принадлежат одному классу. Логика проста – если все соседи «согласны», то новые данные отводятся в их класс.

    Как kNN решает, к какому классу отнести данные, если соседи не принадлежат одному классу?

    Для решения этой проблемы используются 2 классические техники:

      1. Принять за правильное решение простое большинство. К какому классу относится наиболее количество соседей, туда и определяют точку данных.
      2. Проделать то же самое, но дать ближайшим соседям больший вес. Самый простой способ сделать это – использовать квантиль расстояния. Если сосед отстоит на 5 единиц, то его вес будет 1/5. При увеличении дистанции вес становится все меньше и меньше. Это как раз то, что нам нужно.

    Требует ли этот метод обучения или он самообучающийся? Этот метод требует обучения, поскольку kNN необходим размеченный набор данных.

    Почему именно kNN? kNN легок в понимании и легко реализуем – это две главные причины. В зависимости от выбора дистанционной метрики, kNN может показывать достаточно точные результаты.

    Вот 5 вещей, за которыми нужно следить:

    1. kNN может быть очень ресурсозатратным, если пытаться определить ближайших соседей на большом наборе данных.
    2. Зашумленные данные могут испортить kNN-классификацию.
    3. Нужно учитывать количество значений. Характеристики с большим количеством значений могут оказывать влияние на дистанционную метрику, по отношению к характеристикам с меньшим количеством значений.
    4. Поскольку обработка данных «откладывается», kNN обычно требует больше места, чем активные классификаторы.
    5. Выбор правильной дистанционной метрики очень важен для точности kNN.

    Где он используется? Существуют несколько реализаций:

  • MATLAB kNN классификация
  • scikit-learn KNeighborsClassifier
  • kNN классификация в R
  • Источник

    Алгоритм kNN (видео)

    Реализация kNN в R

    Документация: пакет «kknn», другой knn

    Пример 1. Классификация ирисов

    Источник примера 1

    Пример 2.

    Источник примера 2

    Ещё примерчик

    Реализация kNN в Python

    Пример 1. Nearest Neighbors regression

    Источник примера 1

    Пример 2. Классификация ирисов

    Источник примера 2

    Документация по sklearn.neighbors и другие примеры

    Data Scientist # 1

    Машинное обучение, большие данные, наука о данных, анализ данных, цифровой маркетинг, искусственный интеллект, нейронные сети, глубокое обучение, data science, data scientist, machine learning, artificial intelligence, big data, deep learning

    Данные — новый актив!

    Эффективно управлять можно только тем, что можно измерить.
    Copyright © 2016-2021 Data Scientist. Все права защищены.