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:
- K valimine: Määrata lähimate naabrite arv (K).
- Kauguse arvutamine: Arvutada kaugus uue objekti ja iga treeningu kogumi objekti vahel (näiteks Euklidi kaugus).
- K lähima otsimine: Sorteerida objektid kauguse järgi ja valida K lähimat.
- 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]}")