Sobes.tech
Middle

Mis on k-lähedaste naabrite algoritm (kNN)?

sobes.tech AI

Vastus AI-lt

K-lähimate naabrite algoritm (kNN) on lihtne, mitteparameetriline masinõppe algoritm, mida kasutatakse nii klassifikatsioonis kui ka regressioonis.

Sisu: Uus objekt (andmepunkt) määratakse klassile, mis on kõige rohkem esindatud k lähima objekti seas treeningu kogumis. Regressiooni puhul prognoosib see väärtust k lähima naabri keskmise/mediana väärtusena.

Peamised sammud klassifikatsioonis:

  1. K valimine: Määrata lähimate naabrite arv (K).
  2. Kauguse arvutamine: Arvutada kaugus uue objekti ja iga treeningu kogumi objekti vahel (näiteks Euklidi kaugus).
  3. K lähima otsimine: Sorteerida objektid kauguse järgi ja valida K lähimat.
  4. Hääletus: Määrata uue objekti klass, põhinedes K lähimate naabrite enamushääletusel.

Eelised:

  • Lihtne rakendada ja mõista.
  • Ei vaja mudeli koolitamist (laisk algoritm).
  • Kohandub uute andmetega nende ilmumisel.

Miinused:

  • Arvutamine on kulukas suurte andmekogumite puhul (prognoosimise etapis).
  • K valik ja kaugusmõõdik on kriitilised.
  • On tundlik andmete skaalale ja "dimensioonide needusele".
  • Ei tööta otse kategoriale iseloomustavate tunnustega (vajab kodeerimist).

Rakendused:

  • Musterite äratundmine.
  • Soovitussüsteemid.
  • Meditsiiniline diagnostika.
  • Sarnaste dokumentide otsing.
# Näide kNN rakendamisest scikit-learn abil

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Demonstratsioonandmed
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]) # Klassid

# Andmete jagamine treening- ja testkogumiteks
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN mudeli loomine ja koolitamine
# K=3, ehk 3 lähimat naabrit
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Ennustamine testkogumil
y_pred = knn.predict(X_test)

# Täpsuse hindamine
accuracy = accuracy_score(y_test, y_pred)
# print(f"Mudeliläbimõju täpsus: {accuracy}")

# Uue punkti ennustamine
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Uue punkti ennustatud klass: {predicted_class[0]}")