Algorytm KNN - znajdowanie najbliższych sąsiadów

Wprowadzenie

Algorytm K-najbliższych sąsiadów (KNN) jest rodzajem nadzorowanego algorytmu ML, który może być używany zarówno do klasyfikacji, jak i problemów predykcyjnych regresji. Jednak jest używany głównie do klasyfikacji problemów predykcyjnych w przemyśle. Następujące dwie właściwości dobrze definiują KNN -

  • Lazy learning algorithm - KNN jest algorytmem leniwego uczenia się, ponieważ nie ma wyspecjalizowanej fazy szkolenia i wykorzystuje wszystkie dane do uczenia podczas klasyfikacji.

  • Non-parametric learning algorithm - KNN jest również nieparametrycznym algorytmem uczenia się, ponieważ nie zakłada niczego na temat podstawowych danych.

Działanie algorytmu KNN

Algorytm K-najbliższych sąsiadów (KNN) wykorzystuje „podobieństwo cech” do przewidywania wartości nowych punktów danych, co ponadto oznacza, że ​​nowemu punktowi danych zostanie przypisana wartość na podstawie tego, jak dokładnie pasuje do punktów w zestawie uczącym. Możemy zrozumieć jego działanie, wykonując następujące czynności -

  • Step 1- Do implementacji dowolnego algorytmu potrzebujemy zbioru danych. Dlatego w pierwszym etapie KNN musimy załadować dane treningowe i testowe.

  • Step 2- Następnie musimy wybrać wartość K, czyli najbliższe punkty danych. K może być dowolną liczbą całkowitą.

  • Step 3 - Dla każdego punktu w danych testowych wykonaj następujące czynności -

    3.1- Oblicz odległość między danymi testowymi a każdym wierszem danych treningowych za pomocą dowolnej metody, a mianowicie: odległość euklidesowa, manhattańska lub Hamminga. Najczęściej stosowaną metodą obliczania odległości jest metoda euklidesowa.

    3.2 - Teraz, na podstawie wartości odległości, posortuj je w kolejności rosnącej.

    3.3 - Następnie wybierze K górnych wierszy z posortowanej tablicy.

    3.4 - Teraz przypisze klasę do punktu testowego na podstawie najczęstszych klas tych wierszy.

  • Step 4 - Koniec

Przykład

Poniżej znajduje się przykład zrozumienia pojęcia K i działania algorytmu KNN -

Załóżmy, że mamy zbiór danych, który można wykreślić w następujący sposób:

Teraz musimy zaklasyfikować nowy punkt danych z czarną kropką (w punkcie 60,60) do klasy niebieskiej lub czerwonej. Zakładamy, że K = 3, czyli znajdzie trzy najbliższe punkty danych. Pokazuje to następny diagram -

Na powyższym diagramie widzimy trzy najbliższe sąsiedzi punktu danych z czarną kropką. Spośród tych trzech, dwa z nich należą do klasy czerwonej, stąd czarna kropka zostanie również przypisana do klasy czerwonej.

Implementacja w Pythonie

Jak wiemy, algorytm K-najbliższych sąsiadów (KNN) może być stosowany zarówno do klasyfikacji, jak i do regresji. Poniżej znajdują się przepisy w Pythonie na użycie KNN jako klasyfikatora, a także regresora -

KNN jako klasyfikator

Najpierw zacznij od zaimportowania niezbędnych pakietów Pythona -

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Następnie pobierz zestaw danych tęczówki z łącza internetowego w następujący sposób -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

Następnie musimy przypisać nazwy kolumn do zestawu danych w następujący sposób -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Teraz musimy odczytać zbiór danych do pandy dataframe w następujący sposób -

dataset = pd.read_csv(path, names=headernames)
dataset.head()
slno. długość działki sepal-width długość płatka szerokość płatka Klasa
0 5.1 3.5 1.4 0,2 Iris-setosa
1 4.9 3.0 1.4 0,2 Iris-setosa
2 4.7 3.2 1.3 0,2 Iris-setosa
3 4.6 3.1 1.5 0,2 Iris-setosa
4 5.0 3.6 1.4 0,2 Iris-setosa

Wstępne przetwarzanie danych zostanie wykonane za pomocą następujących wierszy skryptu -

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

Następnie podzielimy dane na podział na pociąg i test. Poniższy kod podzieli zbiór danych na 60% danych szkoleniowych i 40% danych testowych -

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)

Następnie skalowanie danych zostanie wykonane w następujący sposób -

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

Następnie wytrenuj model za pomocą klasy sklearn KNeighborsClassifier w następujący sposób -

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)

W końcu musimy przewidzieć. Można to zrobić za pomocą następującego skryptu -

y_pred = classifier.predict(X_test)

Następnie wydrukuj wyniki w następujący sposób -

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Wynik

Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
            precision      recall       f1-score       support
Iris-setosa       1.00        1.00         1.00          21
Iris-versicolor   0.70        1.00         0.82          16
Iris-virginica    1.00        0.70         0.82          23
micro avg         0.88        0.88         0.88          60
macro avg         0.90        0.90         0.88          60
weighted avg      0.92        0.88         0.88          60


Accuracy: 0.8833333333333333

KNN jako regresor

Najpierw zacznij od zaimportowania niezbędnych pakietów Pythona -

import numpy as np
import pandas as pd

Następnie pobierz zestaw danych tęczówki z łącza internetowego w następujący sposób -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

Następnie musimy przypisać nazwy kolumn do zestawu danych w następujący sposób -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Teraz musimy odczytać zbiór danych do pandy dataframe w następujący sposób -

data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape

output:(150, 5)

Następnie zaimportuj KNeighborsRegressor ze sklearn, aby dopasować model -

from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)

W końcu możemy znaleźć MSE w następujący sposób -

print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))

Wynik

The MSE is: 0.12226666666666669

Plusy i minusy KNN

Plusy

  • Jest to bardzo prosty algorytm do zrozumienia i zinterpretowania.

  • Jest to bardzo przydatne w przypadku danych nieliniowych, ponieważ nie ma założeń dotyczących danych w tym algorytmie.

  • Jest to wszechstronny algorytm, ponieważ możemy go używać zarówno do klasyfikacji, jak i regresji.

  • Ma stosunkowo wysoką dokładność, ale istnieją znacznie lepsze nadzorowane modele uczenia się niż KNN.

Cons

  • Jest to algorytm nieco drogi obliczeniowo, ponieważ przechowuje wszystkie dane szkoleniowe.

  • Wymagana duża ilość pamięci w porównaniu z innymi algorytmami nadzorowanego uczenia się.

  • Prognozowanie jest powolne w przypadku dużego N.

  • Jest bardzo wrażliwy na skalę danych i nieistotne cechy.

Zastosowania KNN

Oto niektóre obszary, w których można z powodzeniem zastosować KNN -

System bankowy

KNN może być używany w systemie bankowym do przewidywania, czy dana osoba jest zdolna do zatwierdzenia kredytu? Czy ta osoba ma cechy podobne do tych, którzy upadli?

Obliczanie ratingów kredytowych

Algorytmy KNN można wykorzystać do ustalenia ratingu kredytowego danej osoby poprzez porównanie z osobami o podobnych cechach.

Polityka

Za pomocą algorytmów KNN możemy zaklasyfikować potencjalnego wyborcę do różnych klas, takich jak „Będzie głosować”, „Nie będzie głosować”, „Zagłosuje na kongres partii”, „Zagłosuje na„ BJP ”partii.

Inne obszary, w których można zastosować algorytm KNN, to Rozpoznawanie mowy, Wykrywanie pisma ręcznego, Rozpoznawanie obrazu i Rozpoznawanie wideo.