K-Nearest Neighbors (KNN)
Esplora i K-Nearest Neighbors (KNN). Scopri come funziona questo algoritmo di apprendimento supervisionato per la classificazione e la regressione, il suo uso nella ricerca visiva e l'integrazione con Ultralytics YOLO26.
K-vicini più prossimi (KNN) è un algoritmo robusto e intuitivo utilizzato nel campo dell'apprendimento supervisionato per attività di classificazione e regressione. Grazie alla sua semplicità, KNN è spesso classificato come "apprendista pigro" perché non costruisce un modello né apprende parametri durante una fase di addestramento. Memorizza invece 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 si trovino vicini gli uni agli altri all'interno di uno spazio delle caratteristiche multidimensionale.
Come funziona l'algoritmo#
Il meccanismo dei K-vicini più prossimi si basa sui calcoli delle distanze. Quando viene introdotto un nuovo punto di query, l'algoritmo cerca nel dataset memorizzato i campioni di addestramento, in numero pari a 'K', più vicini al nuovo input.
-
Misurazione della distanza: Il sistema calcola la distanza tra il punto di query e ogni altro punto nel database. La metrica più comune è la distanza euclidea, che misura la distanza in linea retta tra i punti. A seconda del tipo di dati, possono essere utilizzate altre metriche, come la distanza di Manhattan (geometria dei taxi) o la distanza di Minkowski.
-
Selezione dei vicini: Dopo aver calcolato le distanze, l'algoritmo le ordina e identifica le 'K' voci più vicine.
-
Processo decisionale: - Per la classificazione: l'algoritmo utilizza un sistema di "voto a maggioranza". L'etichetta di classe che compare più frequentemente tra i K vicini viene assegnata al punto di query. Questo approccio è ampiamente utilizzato nelle attività di base di classificazione delle immagini. - Per la regressione: la previsione viene calcolata facendo la media dei valori dei K vicini più prossimi per stimare una variabile continua.
Scegliere il valore corretto di 'K'#
La selezione del valore ottimale di 'K' è un passaggio fondamentale nell'ottimizzazione degli iperparametri. La scelta di K influenza significativamente le prestazioni del modello e la sua capacità di generalizzare a nuovi dati.
- Valore basso di K: un valore ridotto di K (ad esempio, K=1) rende il modello molto sensibile al rumore e ai valori anomali nei dati, il che può portare all'overfitting.
- Valore alto di K: un valore elevato di K rende più uniformi i confini decisionali, riducendo l'effetto del rumore ma potenzialmente sfumando schemi distinti, con conseguente underfitting.
Applicazioni nel mondo reale#
Nonostante la sua semplicità rispetto alle reti neurali profonde, KNN rimane molto rilevante nell'AI moderna, in particolare quando viene combinato con tecniche avanzate di estrazione delle caratteristiche.
- Sistemi di raccomandazione: KNN facilita il filtraggio collaborativo nei servizi di streaming multimediale e nell'e-commerce. Identificando gli utenti con cronologie di visualizzazione o comportamenti di acquisto simili (i vicini), le piattaforme possono suggerire prodotti che probabilmente piaceranno a un utente, sulla base delle preferenze dei suoi "vicini più prossimi".
- Rilevamento delle anomalie: nella sicurezza informatica e nella finanza, KNN viene utilizzato per il rilevamento delle anomalie. Le transazioni o le attività di rete vengono mappate in uno spazio delle caratteristiche; qualsiasi nuovo punto dati che si trovi lontano dai cluster densi delle attività "normali" viene segnalato come potenziale frode o violazione della sicurezza.
- Ricerca visiva: i moderni motori di ricerca vettoriale si basano spesso su algoritmi di Nearest Neighbor approssimato (ANN), una variante ottimizzata di KNN, per recuperare rapidamente immagini simili sulla base di embedding ad alta dimensionalità generati da modelli come YOLO26.
Sfide e considerazioni#
Sebbene sia efficace, KNN è soggetto alla maledizione della dimensionalità. All'aumentare del numero di caratteristiche (dimensioni), i punti dati diventano sparsi e le metriche di distanza perdono efficacia. Inoltre, poiché memorizza tutti i dati di addestramento, KNN può richiedere molta memoria e soffrire di un'elevata [latenza di inferenza](https://ultralytics-translation-1.invalid su dataset di grandi dimensioni. Per affrontare questo problema, i professionisti spesso preelaborano i dati utilizzando tecniche di riduzione della dimensionalità come l'Analisi delle componenti principali (PCA) oppure utilizzano strutture dati specializzate come gli alberi KD per velocizzare la ricerca. Per la scalabilità a livello enterprise dei dataset e dell'addestramento dei modelli, l'utilizzo della Ultralytics Platform può aiutare a gestire le risorse di calcolo necessarie per la preelaborazione di dati complessi.
Distinguere KNN da K-Means#
È importante distinguere i K-vicini più prossimi dal clustering K-Means, poiché i loro nomi simili causano spesso confusione.
- KNN è un algoritmo di apprendimento supervisionato che utilizza dati etichettati per effettuare previsioni.
- K-Means è un algoritmo di apprendimento non supervisionato utilizzato per raggruppare dati non etichettati in cluster sulla base di similarità strutturali.
Esempio di implementazione#
Il seguente frammento di codice dimostra un semplice workflow di classificazione KNN utilizzando la popolare libreria Scikit-learn. In un contesto di computer vision, le "caratteristiche" di input verrebbero in genere 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)")








