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:
- K kiválasztása: Határozza meg a legközelebbi szomszédok számát (K).
- 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).
- K legközelebbi megtalálása: Rendezze a példányokat távolság szerint, és válassza ki a K legközelebbit.
- 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]}")