Middle
Ce este algoritmul k-vecini cei mai apropiați (kNN)?
sobes.tech AI
Răspuns de la AI
Algoritmul celor mai apropiați k vecini (kNN) este un algoritm simplu și neparametric de învățare automată, utilizat atât pentru clasificare, cât și pentru regresie.
Esenta: Atribuie un nou obiect (punct de date) clasei celei mai reprezentate între cei k vecini cei mai apropiați din setul de antrenament. Pentru regresie, prevede o valoare ca media/mediana valorilor celor k vecini cei mai apropiați.
Pașii principali pentru clasificare:
- Alege K: Determină numărul de vecini cei mai apropiați (K).
- Calcularea distanței: Calculează distanța între noul obiect și fiecare obiect din setul de antrenament (de exemplu, distanța euclidiană).
- Găsește cei K vecini cei mai apropiați: Sortează obiectele după distanță și selectează cei K cei mai apropiați.
- Votare: Determină clasa noului obiect pe baza votului majoritar între cei K vecini cei mai apropiați.
Avantaje:
- Ușor de implementat și de înțeles.
- Nu necesită antrenarea unui model (algoritm leneș).
- Se adaptează noilor date pe măsură ce apar.
Dezavantaje:
- Costisitor din punct de vedere computațional cu volume mari de date (în faza de predicție).
- Alegerea lui K și a metricii de distanță sunt critice.
- Sensibil la scala caracteristicilor și la "blestemul dimensionalității".
- Nu funcționează bine direct cu caracteristici categorice (este necesară codificarea).
Aplicații:
- Recunoașterea modelelor.
- Sistemele de recomandare.
- Diagnosticul medical.
- Căutarea documentelor similare.
# Exemplu de implementare kNN pentru clasificare folosind 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
# Crearea datelor demonstrative
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]) # Etichete de clase
# Împărțirea datelor în seturi de antrenament și test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Crearea și antrenarea modelului kNN
# K=3, adică 3 vecini cei mai apropiați
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Prezicerea pe setul de test
y_pred = knn.predict(X_test)
# Evaluarea acurateței
accuracy = accuracy_score(y_test, y_pred)
# print(f"Acuratețea modelului: {accuracy}")
# Prezicerea pentru un nou punct
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Clasa prezisă pentru noul punct: {predicted_class[0]}")