Middle
Kas yra k artimiausių kaimynų algoritmas (kNN)?
sobes.tech AI
Atsakymas iš AI
K artimiausių kaimynų algoritmas (kNN) yra paprastas, neparametrinis mašininio mokymosi algoritmas, naudojamas tiek klasifikacijai, tiek regresijai.
Prasmė: Naujas objektas (duomenų taškas) priskiriamas klasei, kuri yra dažniausiai atstovaujama tarp k artimiausių jam objektų mokymo rinkinyje. Regresijai prognozuoja reikšmę kaip k artimiausių kaimynų vidurkį/mediana.
Pagrindiniai žingsniai klasifikacijai:
- K pasirinkimas: Nustatyti artimiausių kaimynų skaičių (K).
- Atstumo skaičiavimas: Apskaičiuoti atstumą tarp naujo objekto ir kiekvieno objekto mokymo rinkinyje (pvz., Euklido atstumas).
- K artimiausių paieška: Rūšiuoti objektus pagal atstumą ir pasirinkti K artimiausių.
- Balsavimas: Nustatyti naujo objekto klasę remiantis daugumos balsavimu tarp K artimiausių kaimynų.
Privalumai:
- Paprasta įgyvendinti ir suprasti.
- Nereikalauja modelio mokymo (tingus algoritmas).
- Prisitaiko prie naujų duomenų, kai jie atsiranda.
Trūkumai:
- Skaičiavimai yra brangūs dideliuose duomenų kiekiuose (prognozės etape).
- K pasirinkimas ir atstumo metrika yra kritiški.
- Yra jautrus duomenų masteliui ir "dimensijų prakeiksmui".
- Tiesiogiai neveikia su kategoriniais požymiais (reikia kodavimo).
Pritaikymas:
- Modelių atpažinimas.
- Rekomendacijų sistemos.
- Medicininė diagnostika.
- Panašių dokumentų paieška.
# Pavyzdys, kaip įgyvendinti kNN naudojant scikit-learn
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# Demonstraciniai duomenys
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Klasės
# Duomenų padalijimas į mokymosi ir testavimo rinkinius
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN modelio sukūrimas ir mokymas
# K=3, tai yra 3 artimiausi
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Prognozavimas testavimo rinkinyje
y_pred = knn.predict(X_test)
# Tikslumo įvertinimas
accuracy = accuracy_score(y_test, y_pred)
# print(f"Modelio tikslumas: {accuracy}")
# Naujo taško prognozavimas
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Naujo taško prognozuota klasė: {predicted_class[0]}")