Middle
Τι είναι ο αλγόριθμος k-πλησιέστερων γειτόνων (kNN);
sobes.tech AI
Απάντηση από AI
Ο αλγόριθμος K-πλησιέστερων γειτόνων (kNN) είναι ένας απλός και μη παραμετρικός αλγόριθμος μηχανικής μάθησης που χρησιμοποιείται τόσο για ταξινόμηση όσο και για παλινδρόμηση.
Ουσία: Αναθέτει ένα νέο αντικείμενο (σημείο δεδομένων) στην πιο αντιπροσωπευτική κλάση μεταξύ των k πλησιέστερων αντικειμένων στο σύνολο εκπαίδευσης. Για παλινόμηση, προβλέπει μια τιμή ως τον μέσο/διάμεσο των τιμών των k πλησιέστερων γειτόνων.
Βασικά βήματα για την ταξινόμηση:
- Επιλογή K: Ορίστε τον αριθμό των πλησιέστερων γειτόνων (K).
- Υπολογισμός απόστασης: Υπολογίστε την απόσταση μεταξύ του νέου αντικειμένου και κάθε αντικειμένου στο σύνολο εκπαίδευσης (π.χ., Ευκλείδεια απόσταση).
- Εύρεση K πλησιέστερων: Ταξινομήστε τα αντικείμενα κατά απόσταση και επιλέξτε τα K πλησιέστερα.
- Ψηφοφορία: Καθορίστε την κλάση του νέου αντικειμένου βάσει της πλειοψηφίας των ψήφων μεταξύ των 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]}")