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ā:
- K izvēle: Nosaka tuvāko kaimiņu skaitu (K).
- 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).
- K tuvāko meklēšana: Sakārto objektus pēc attāluma un izvēlas K tuvākos.
- 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]}")