Здравствуйте, добро пожаловать в нашу статью 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 можно использовать несколько формул измерения расстояния. Эти:
- Расстояние Минковского
- Манхэттен Расстояние
- Евклидово расстояние
- Косинусное расстояние
- Жаккард Расстояние
- Расстояние Хэмминга
Существуют различные формулы измерения расстояния, подобные этим. Мы будем использовать евклидово расстояние, которое часто используется в нашем коде. Чтобы увидеть влияние других измерителей расстояния на код, я предлагаю вам прочитать статью «Влияние выбора меры расстояния на производительность классификатора 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