Sobes.tech
Middle

Kas ir k tuvāko kaimiņu algoritms (kNN)?

sobes.tech AI

Atbilde no AI

K- tuvāko kaimiņu algoritms (kNN) ir vienkāršs, neparametriska mašīnmācīšanās algoritms, ko izmanto gan klasifikācijā, gan regresijā.

Satura būtība: Jauns objekts (datu punkts) tiek piešķirts klasei, kas ir visbiežāk pārstāvēta starp k tuvākajiem tam objektiem mācību kopā. Regresijā tas prognozē vērtību kā k tuvāko kaimiņu vidējo/mediānu vērtību.

Galvenie soļi klasifikācijā:

  1. K izvēle: Nosaka tuvāko kaimiņu skaitu (K).
  2. Attāluma aprēķins: Aprēķina attālumu starp jauno objektu un katru citu objektu mācību kopā (piemēram, Eiklīda attālumu).
  3. K tuvāko meklēšana: Sakārto objektus pēc attāluma un izvēlas K tuvākos.
  4. Balsošana: Nosaka jauna objekta klasi, balstoties uz vairākuma balsojumu starp K tuvākajiem kaimiņiem.

Priekšrocības:

  • Vienkārša realizācija un saprotamība.
  • Nepieciešama modeļa apmācība (slinks algoritms).
  • Pielāgojas jauniem datiem, kad tie parādās.

Trūkumi:

  • Aprēķini ir dārgi lielos datu apjomos (prognozes posmā).
  • K izvēle un attāluma metrika ir kritiski svarīgi.
  • Ir jutīgs pret datu mērogu un "dimensiju lāstu".
  • Tieši nestrādā ar kategoriskiem raksturlielumiem (ir nepieciešama kodēšana).

Pielietojums:

  • Modeļu atpazīšana.
  • Ieteikumu sistēmas.
  • Medicīniskā diagnostika.
  • Līdzīgu dokumentu meklēšana.
# Piemērs, kā realizēt kNN, izmantojot 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

# Demonstrācijas dati
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]) # Klases

# Datu sadalīšana apmācības un testēšanas kopās
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN modeļa izveide un apmācība
# K=3, tas ir 3 tuvākie
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Prognozēšana testēšanas kopā
y_pred = knn.predict(X_test)

# Precizitātes novērtējums
accuracy = accuracy_score(y_test, y_pred)
# print(f"Modeļa precizitāte: {accuracy}")

# Jauna punkta prognozēšana
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Jauna punkta prognozētā klase: {predicted_class[0]}")