Sobes.tech
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:

  1. K pasirinkimas: Nustatyti artimiausių kaimynų skaičių (K).
  2. Atstumo skaičiavimas: Apskaičiuoti atstumą tarp naujo objekto ir kiekvieno objekto mokymo rinkinyje (pvz., Euklido atstumas).
  3. K artimiausių paieška: Rūšiuoti objektus pagal atstumą ir pasirinkti K artimiausių.
  4. 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]}")