Здравствуйте, добро пожаловать в нашу статью K-Nearest Neighbor with Scratch, третью статью из серии "Машинное обучение с помощью Scratch". В этой статье мы вместе с вами рассмотрим и закодируем алгоритм K-Nearest Neighbor.

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

из sklearn импортировать наборы данных
iris = datasets.load_iris()

K-ближайший сосед

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

Так что это значит?

Если мы рассматриваем данные как систему координат, середина (звезда) — это место данных, которые мы будем прогнозировать в системе координат. А ближайший к нему элемент K говорит нам, к какой категории на самом деле близки наши данные. На этом рисунке мы видим, что 2 разных значения, 3 и 6, обрабатываются для K. Если K равно 3, в ближайшей точке к значению, которое мы можем найти, есть 1 член класса A и 2 B. оценить. Глядя на это неравенство, мы можем сказать, что наши звездные данные относятся к классу B. На этом рисунке мы видим, что для K используется 6 переменных. Для 6 значений K ситуации меняются, и наши данные соседствуют с данными из 4 A и 2 B классы. В этом случае кажется, что наиболее логичным решением для наших звездных данных является класс А.

Наша цель при использовании нашего алгоритма — найти наилучшее значение K и свести к минимуму погрешность.

Кратко; На основе алгоритма KNN существует 2 различных основных полюса: расстояние и K (номер ближайшего соседа). Как я писал в предыдущих частях текста, определяемся с К.

Так что же мы используем в качестве переменных расстояния?

В качестве ответа на этот вопрос в алгоритме KNN можно использовать несколько формул измерения расстояния. Эти:

  1. Расстояние Минковского
  2. Манхэттен Расстояние
  3. Евклидово расстояние
  4. Косинусное расстояние
  5. Жаккард Расстояние
  6. Расстояние Хэмминга

Существуют различные формулы измерения расстояния, подобные этим. Мы будем использовать евклидово расстояние, которое часто используется в нашем коде. Чтобы увидеть влияние других измерителей расстояния на код, я предлагаю вам прочитать статью «Влияние выбора меры расстояния на производительность классификатора KNN — обзор.»

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

Евклидово расстояние является наиболее часто используемым типом расстояния в алгоритме KNN. Он принимает принцип определения расстояния в геометрии в качестве своего рабочего принципа.

Почему значение K важно?

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

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

Давайте закодируем:

1. Во-первых, давайте импортируем необходимые библиотеки.

2. Загружаем наши данные и передаем их модели после предварительной обработки 😊

В этом фрагменте кода после загрузки нашего набора данных мы делим их на две части как df и df_test. После этого мы пробуем значения в диапазоне (3,10), чтобы определить значение K и вычислить оценку ошибки.

3. Мы кодируем структуру нашего класса.

Мы начинаем кодировать нашу структуру класса с предварительных определений в функции «__init__». В качестве следующего шага мы добавляем функцию «__distance» и определяем функцию euclid, которую мы будем использовать в нашем классе. В качестве последнего шага мы закончим наш код нашей функцией «предсказания». В функции Predict мы используем структуру «heapq» для сортировки измеренных расстояний. Здесь вы можете отсортировать расстояния в обычный список, но структура «heapq» еще немного улучшит ваш код. После сортировки измеренных расстояний от малого к большому вы можете получить результат, к какой категории относятся ваши данные, обработав первый элемент K.

Это из этой статьи 😊

Чтобы увидеть полную версию кода, посетите мою страницу Github: https://github.com/capogluuu/ml_scratch

СПАСИБО