Рубрики
Без рубрики

К-ближайшие соседи с нуля с Python

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

Автор оригинала: Pankaj Kumar.

В этой статье мы научимся реализовывать K-ближайшие соседи с нуля в Python. KNN – это контролируемый алгоритм, который можно использовать как для классификации, так и для задач регрессии.

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

Интуиция за алгоритмом соседей K-ближайшего

В ближайших соседях 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
  • Линейная регрессия с нуля

Пока мы не встретимся в следующий раз.

Счастливое обучение!