Sobes.tech
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:

  1. Alege K: Determină numărul de vecini cei mai apropiați (K).
  2. Calcularea distanței: Calculează distanța între noul obiect și fiecare obiect din setul de antrenament (de exemplu, distanța euclidiană).
  3. Găsește cei K vecini cei mai apropiați: Sortează obiectele după distanță și selectează cei K cei mai apropiați.
  4. 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]}")