Sobes.tech
Middle

Mi az a k-legközelebbi szomszédok (kNN) algoritmus?

sobes.tech MI

Válasz az MI-től

A K-legközelebbi szomszéd (kNN) algoritmus egy egyszerű, nem paraméteres gépi tanulási algoritmus, amelyet mind osztályozásra, mind regresszióra használnak.

Lényege: Egy új objektumot (adatpontot) a tanulási készletben a leggyakrabban képviselt osztályhoz rendel. Regresszió esetén a k legközelebbi szomszéd értékeinek átlagát/mediánját jósolja.

Fő lépések az osztályozáshoz:

  1. K kiválasztása: Határozza meg a legközelebbi szomszédok számát (K).
  2. Távolság számítása: Számítsa ki a távolságot az új objektum és minden tanulási példány között (pl. Euklideszi távolság).
  3. K legközelebbi megtalálása: Rendezze a példányokat távolság szerint, és válassza ki a K legközelebbit.
  4. Szavazás: Határozza meg az új objektum osztályát a K legközelebbi szomszéd többségi szavazata alapján.

Előnyök:

  • Egyszerű végrehajtás és megértés.
  • Nem igényel modell tanítást (lusta algoritmus).
  • Alkalmazkodik az új adatokhoz, ahogy azok megjelennek.

Hátrányok:

  • Számításilag költséges nagy adatmennyiség esetén (előrejelzési szakaszban).
  • A K és a távolsági metrika kiválasztása kritikus.
  • Érzékeny a jellemzők skálájára és a "dimenzió átok"-jára.
  • Nem működik jól közvetlenül kategóriás jellemzőkkel (kódolás szükséges).

Alkalmazások:

  • Mintafelismerés.
  • Ajánlórendszerek.
  • Orvosi diagnózis.
  • Hasonló dokumentumok keresése.
# KNN osztályozási példa scikit-learn használatával

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

# Demonstrációs adatok létrehozása
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]) # Osztálycímkék

# Adatok felosztása tanulási és tesztkészletekre
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN modell létrehozása és tanítása
# K=3, azaz 3 legközelebbi szomszéd
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Előrejelzés a tesztkészleten
y_pred = knn.predict(X_test)

# Pontosság értékelése
accuracy = accuracy_score(y_test, y_pred)
# print(f"A modell pontossága: {accuracy}")

# Új pont előrejelzése
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Az új pont osztálya: {predicted_class[0]}")