Sobes.tech
Middle

Τι είναι ο αλγόριθμος k-πλησιέστερων γειτόνων (kNN);

sobes.tech AI

Απάντηση από AI

Ο αλγόριθμος K-πλησιέστερων γειτόνων (kNN) είναι ένας απλός και μη παραμετρικός αλγόριθμος μηχανικής μάθησης που χρησιμοποιείται τόσο για ταξινόμηση όσο και για παλινδρόμηση.

Ουσία: Αναθέτει ένα νέο αντικείμενο (σημείο δεδομένων) στην πιο αντιπροσωπευτική κλάση μεταξύ των k πλησιέστερων αντικειμένων στο σύνολο εκπαίδευσης. Για παλινόμηση, προβλέπει μια τιμή ως τον μέσο/διάμεσο των τιμών των k πλησιέστερων γειτόνων.

Βασικά βήματα για την ταξινόμηση:

  1. Επιλογή K: Ορίστε τον αριθμό των πλησιέστερων γειτόνων (K).
  2. Υπολογισμός απόστασης: Υπολογίστε την απόσταση μεταξύ του νέου αντικειμένου και κάθε αντικειμένου στο σύνολο εκπαίδευσης (π.χ., Ευκλείδεια απόσταση).
  3. Εύρεση K πλησιέστερων: Ταξινομήστε τα αντικείμενα κατά απόσταση και επιλέξτε τα K πλησιέστερα.
  4. Ψηφοφορία: Καθορίστε την κλάση του νέου αντικειμένου βάσει της πλειοψηφίας των ψήφων μεταξύ των K πλησιέστερων γειτόνων.

Πλεονεκτήματα:

  • Ευκολία υλοποίησης και κατανόησης.
  • Δεν απαιτεί εκπαίδευση μοντέλου (τεμπέλης αλγόριθμος).
  • Προσαρμόζεται σε νέα δεδομένα καθώς εμφανίζονται.

Μειονεκτήματα:

  • Υπολογιστικά δαπανηρός με μεγάλα όγκο δεδομένων (στη φάση πρόβλεψης).
  • Η επιλογή K και της μετρικής απόστασης είναι κρίσιμες.
  • Ευαίσθητος στην κλίμακα των χαρακτηριστικών και στην "κατάρα της διαστατικότητας".
  • Δεν λειτουργεί καλά άμεσα με κατηγορικά χαρακτηριστικά (απαιτεί κωδικοποίηση).

Εφαρμογές:

  • Αναγνώριση προτύπων.
  • Συστήματα συστάσεων.
  • Ιατρική διάγνωση.
  • Αναζήτηση παρόμοιων εγγράφων.
# Παράδειγμα υλοποίησης kNN για ταξινόμηση με χρήση 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

# Δημιουργία δεδομένων επίδειξης
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]) # Ετικέτες κλάσεων

# Διαχωρισμός δεδομένων σε σύνολα εκπαίδευσης και δοκιμής
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Δημιουργία και εκπαίδευση μοντέλου kNN
# K=3, δηλαδή 3 πλησιέστεροι γείτονες
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Πρόβλεψη στο σύνολο δοκιμής
y_pred = knn.predict(X_test)

# Αξιολόγηση ακρίβειας
accuracy = accuracy_score(y_test, y_pred)
# print(f"Ακρίβεια μοντέλου: {accuracy}")

# Πρόβλεψη για ένα νέο σημείο
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Προβλεπόμενη κλάση για το νέο σημείο: {predicted_class[0]}")