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:
- K kiezen: Bepaal het aantal dichtstbijzijnde buren (K).
- Afstand berekenen: Bereken de afstand tussen het nieuwe object en elk object in de trainingsset (bijvoorbeeld Euclidische afstand).
- K dichtstbijzijnde vinden: Sorteer de objecten op afstand en kies de K dichtstbijzijnde.
- 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]}")