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.