Автор оригинала: Pankaj Kumar.
В этой статье мы научимся реализовывать K-ближайшие соседи с нуля в Python. KNN – это контролируемый алгоритм, который можно использовать как для классификации, так и для задач регрессии.
KNN очень прост в реализации. В этой статье мы реализуем алгоритм KNN с нуля, чтобы выполнить задачу классификации.
Интуиция за алгоритмом соседей K-ближайшего
В ближайших соседях K-ближайших к тому же модель не требуется, поскольку модель хранит весь набор данных и классифицирует точки данных на основе точек, которые похожи на него. Он делает прогнозы, основанные только на учебных данных.
Рассмотрим показамость выше. Есть два класса данных (красный и зеленый), и нам дали новую точку данных (черную) и попросили указать, какой класс принадлежит этот новый DataPoint?
Ну, KNN приводы к понятию, что подобные предметы, как правило, ближе к группам. Таким образом, совершенно очевидно, что новая точка данных ближе к красной группе, и, следовательно, алгоритм будет классифицировать эту точку, как красный. Вы можете прочитать больше о алгоритме на его Wiki Page
Способы расчета расстояния в КНН :
- Манхэттен Метод
- Евклидонский метод
- Минковский метод
- Расстояние Махаланобиса
- так далее..
В этой статье мы будем использовать евклидое расстояние, чтобы рассчитать близость новой точки данных из каждой точки в нашем наборе тренировок.
Реализация K-ближайших соседей с нуля в Python
Сначала мы выясним шаги, участвующие в реализации K-ближайших соседей с нуля.
Шаг 1. Выяснить соответствующее метрику расстояния для расчета расстояния между точками данных.
Шаг 2. Храните расстояние в массиве и сортируйте его в соответствии с порученным порядком их расстояний (сохранение индекса I.E. Можно использовать метод Numpy Argsort).
Шаг 3. Выберите первые элементы K в отсортированном списке.
Шаг 4. Выполните голосование большинства, и класс с максимальным количеством вхождений будет назначен в качестве нового класса для точки данных для классификации.
Полный код Python для ближайших соседей K-ближайших
Теперь конвертируя шаги, упомянутые выше в коде для реализации наших ближайших соседей с нуля
#Importing the required modules import numpy as np from scipy.stats import mode #Euclidean Distance def eucledian(p1,p2): dist = np.sqrt(np.sum((p1-p2)**2)) return dist #Function to calculate KNN def predict(x_train, y , x_input, k): op_labels = [] #Loop through the Datapoints to be classified for item in x_input: #Array to store distances point_dist = [] #Loop through each training Data for j in range(len(x_train)): distances = eucledian(np.array(x_train[j,:]) , item) #Calculating the distance point_dist.append(distances) point_dist = np.array(point_dist) #Sorting the array while preserving the index #Keeping the first K datapoints dist = np.argsort(point_dist)[:k] #Labels of the K datapoints from above labels = y[dist] #Majority voting lab = mode(labels) lab = lab.mode[0] op_labels.append(lab) return op_labels
Наша прогнозная функция требует учебного набора данных, настоящих меток, данных на классификацию данных и количество ближайших соседей (k) в качестве входных аргументов.
К-ближайшие соседи с нуля с набором данных ириса
Теперь пришло время проверить нашу реализацию на некоторые данные.
#Importing the required modules #Importing required modules from sklearn.metrics import accuracy_score from sklearn.datasets import load_iris from numpy.random import randint #Loading the Data iris= load_iris() # Store features matrix in X X= iris.data #Store target vector in y= iris.target #Creating the training Data train_idx = xxx = randint(0,150,100) X_train = X[train_idx] y_train = y[train_idx] #Creating the testing Data test_idx = xxx = randint(0,150,50) #taking 50 random samples X_test = X[test_idx] y_test = y[test_idx] #Applying our function y_pred = predict(X_train,y_train,X_test , 7) #Checking the accuracy accuracy_score(y_test, y_pred)
Выход:
0.98
С K равен до 7, наша реализованная модель кажется очень хорошо в данных данных.
Заключение
В этой статье мы реализовали наши самые собственные ближайшие соседи с нуля и применили его к задаче классификации.
Мы определили внутреннюю работу алгоритма KNN и посмотрели на шаги, участвующие в создании алгоритма. Быть таким простым KNN – очень мощный и полезный алгоритм в машинном обучении.
Если вы заинтересованы в некоторых связанных с нулями реализаций, посмотрите на эти статьи:
- Логистическая регрессия с нуля
- K-означает алгоритм кластеризации с нуля в Python
- Создание сумки слов модели с нуля в Python
- Создание модели TF-IDF с нуля в Python
- Линейная регрессия с нуля
Пока мы не встретимся в следующий раз.
Счастливое обучение!