Sobes.tech
Middle

Wat is het k-Nearest Neighbors (kNN) algoritme?

sobes.tech AI

Antwoord van AI

Het K-dichtstbijzijnde buren (kNN) algoritme is een eenvoudige, niet-parametrische machine learning-algoritme die wordt gebruikt voor zowel classificatie als regressie.

Kernidee: Ken een nieuw object (gegevenspunt) toe aan de klasse die het meest vertegenwoordigd is onder de k dichtstbijzijnde objecten in de trainingsset. Voor regressie voorspelt het een waarde als het gemiddelde/mediane van de waarden van de k dichtstbijzijnde buren.

Belangrijkste stappen voor classificatie:

  1. K kiezen: Bepaal het aantal dichtstbijzijnde buren (K).
  2. Afstand berekenen: Bereken de afstand tussen het nieuwe object en elk object in de trainingsset (bijvoorbeeld Euclidische afstand).
  3. K dichtstbijzijnde vinden: Sorteer de objecten op afstand en kies de K dichtstbijzijnde.
  4. Stemmen: Bepaal de klasse van het nieuwe object op basis van de meerderheid van stemmen onder de K dichtstbijzijnde buren.

Voordelen:

  • Eenvoudig te implementeren en te begrijpen.
  • Vereist geen modeltraining (lui algoritme).
  • Past zich aan nieuwe gegevens aan naarmate ze verschijnen.

Nadelen:

  • Computationeel duur bij grote datasets (bij de voorspelfase).
  • K en de afstandsmetrie zijn cruciaal.
  • Gevoelig voor de schaal van kenmerken en de "vloek van dimensionaliteit".
  • Werkt niet goed direct met categorische kenmerken (vereist codering).

Toepassingen:

  • Patroonherkenning.
  • Aanbevelingssystemen.
  • Medische diagnose.
  • Zoeken naar vergelijkbare documenten.
# Voorbeeld van implementatie van kNN voor classificatie met 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

# Demonstratiedata maken
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]) # Klasse-labels

# Data splitsen in training- en testsets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN-model maken en trainen
# K=3, dat wil zeggen 3 dichtstbijzijnde buren
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Voorspelling op de testset
y_pred = knn.predict(X_test)

# Nauwkeurigheid beoordelen
accuracy = accuracy_score(y_test, y_pred)
# print(f"Modelnauwkeurigheid: {accuracy}")

# Voorspelling voor een nieuw punt
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Voorspelde klasse voor het nieuwe punt: {predicted_class[0]}")