Explore K-Nearest Neighbors (KNN) for classification and regression. Learn how this intuitive algorithm works with distance metrics and [YOLO26](https://docs.ultralytics.com/models/yolo26/) embeddings on the [Ultralytics Platform](https://platform.ultralytics.com).
K-Nearest Neighbors (KNN) è un algoritmo robusto e intuitivo utilizzato nel campo dell' apprendimento supervisionato sia per compiti di classificazione che di regressione. Caratterizzato dalla sua semplicità, KNN è spesso classificato come un "apprenditore pigro" perché non costruisce un modello né apprende parametri durante la fase di addestramento. Invece, memorizza l'intero set di dati di addestramento ed esegue i calcoli solo quando viene richiesta una previsione. Il principio fondamentale dell'algoritmo si basa sulla similarità delle caratteristiche: presuppone che i punti dati con attributi simili esistano in stretta vicinanza l'uno all'altro all'interno di uno spazio caratteristico multidimensionale.
Il meccanismo di K-Nearest Neighbors è basato sul calcolo delle distanze. Quando viene introdotto un nuovo punto di query, l' algoritmo ricerca nel set di dati memorizzati il numero 'K' di campioni di addestramento più vicini al nuovo input.
La selezione del valore ottimale per "K" è un passaggio fondamentale nella messa a punto degli iperparametri. La scelta di K influenza in modo significativo le prestazioni del modello e la sua capacità di generalizzare nuovi dati.
Nonostante la sua semplicità rispetto alle reti neurali profonde, il KNN rimane altamente rilevante nell'IA moderna, in particolare se combinato con tecniche avanzate di estrazione delle caratteristiche.
Sebbene efficace, il KNN deve affrontare il problema della dimensionalità. Con l'aumentare del numero di caratteristiche (dimensioni), i punti dati diventano sparsi e le metriche di distanza perdono la loro efficacia. Inoltre, poiché memorizza tutti i dati di addestramento, il KNN può richiedere molta memoria e soffrire di un'elevata latenza di inferenza su set di dati di grandi dimensioni. Per ovviare a questo problema, i professionisti spesso pre-elaborano i dati utilizzando tecniche di riduzione della dimensionalità come l' analisi delle componenti principali (PCA) o utilizzano strutture di dati specializzate come gli alberi KD per velocizzare la ricerca. Per il ridimensionamento di livello aziendale dei set di dati e l'addestramento dei modelli, l'utilizzo Ultralytics può aiutare a gestire le risorse di calcolo necessarie per la pre-elaborazione di dati complessi.
È importante distinguere il metodo K-Nearest Neighbors dal cluster K-Means, poiché i loro nomi simili spesso causano confusione.
Il seguente frammento di codice mostra un semplice flusso di lavoro di classificazione KNN utilizzando la popolare libreria Scikit-learn. In un contesto di visione artificiale , le "caratteristiche" di input verrebbero tipicamente estratte da un modello di deep learning come YOLO26 prima di essere passate al classificatore KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")