K-Nearest Neighbors (KNN)
Esplora i K-Nearest Neighbors (KNN). Impara come funziona questo algoritmo di apprendimento supervisionato per classificazione e regressione, il suo uso nella ricerca visiva e l'integrazione con Ultralytics YOLO26.
K-Nearest Neighbors (KNN) è un algoritmo robusto e intuitivo utilizzato nel campo dell'apprendimento supervisionato sia per compiti di classificazione che di regressione. Contraddistinto dalla sua semplicità, KNN è spesso classificato come un "lazy learner" (apprendista pigro) poiché non costruisce un modello o apprende parametri durante una fase di addestramento. Al contrario, memorizza l'intero set di dati di addestramento ed esegue i calcoli solo quando viene richiesta una previsione. Il principio cardine dell'algoritmo si basa sulla similarità delle caratteristiche: presuppone che i punti dati con attributi simili si trovino in stretta vicinanza l'uno all'altro all'interno di uno spazio delle caratteristiche multidimensionale.
Link to this sectionCome opera l'algoritmo#
Il meccanismo di K-Nearest Neighbors è guidato dai calcoli di distanza. Quando viene introdotto un nuovo punto di query, l'algoritmo cerca nel set di dati memorizzato per trovare il numero 'K' di campioni di addestramento 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. Altre metriche come la distanza di Manhattan (geometria del taxi) o la distanza di Minkowski possono essere utilizzate a seconda del tipo di dati.
-
Selezione dei vicini: Dopo aver calcolato le distanze, l'algoritmo le ordina e identifica le prime 'K' voci più vicine.
-
Processo decisionale: - Per la classificazione: L'algoritmo utilizza un sistema di "voto a maggioranza". L'etichetta di classe che appare più frequentemente tra i K vicini viene assegnata al punto di query. Questo è ampiamente utilizzato in compiti base di classificazione delle immagini. - Per la regressione: La previsione viene calcolata mediando i valori dei K vicini più prossimi per stimare una variabile continua.
Link to this sectionScegliere il 'K' giusto#
Selezionare il valore ottimale per 'K' è un passaggio critico nella regolazione degli iperparametri. La scelta di K influenza significativamente le prestazioni del modello e la sua capacità di generalizzare su nuovi dati.
- Valore K basso: Un K piccolo (es. K=1) rende il modello altamente sensibile al rumore e ai valori anomali nei dati, il che può portare a overfitting.
- Valore K alto: Un K grande livella i confini decisionali, riducendo l'effetto del rumore ma potenzialmente sfumando modelli distinti, il che porta a underfitting.
Link to this sectionApplicazioni nel mondo reale#
Nonostante la sua semplicità rispetto alle reti neurali profonde, KNN rimane altamente rilevante nell'IA moderna, in particolare se combinato con tecniche avanzate di estrazione delle caratteristiche.
- Sistemi di raccomandazione: KNN facilita il filtro collaborativo nello streaming multimediale e nell'e-commerce. Identificando utenti con cronologie di visione o comportamenti di acquisto simili (vicini), le piattaforme possono suggerire prodotti che è probabile piacciano a un utente in base alle preferenze dei loro "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 cade lontano dai cluster densi di attività "normale" viene segnalato come potenziale frode o violazione della sicurezza.
- Ricerca visiva: I moderni motori di ricerca vettoriale si affidano spesso ad algoritmi di Approximate Nearest Neighbor (ANN)—una variante ottimizzata di KNN—per recuperare rapidamente immagini simili basate su embeddings ad alta dimensione generati da modelli come YOLO26.
Link to this sectionSfide e considerazioni#
Sebbene efficace, KNN affronta la maledizione della dimensionalità. Man mano che aumenta il 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, KNN può essere intensivo in termini di memoria e soffrire di un'elevata latenza di inferenza su set di dati di grandi dimensioni. Per risolvere questo problema, gli esperti pre-elaborano spesso i dati utilizzando tecniche di riduzione della dimensionalità come la Principal Component Analysis (PCA) o utilizzano strutture dati specializzate come i KD-Tree per velocizzare la ricerca. Per il ridimensionamento su scala aziendale di set di dati e dell'addestramento dei modelli, l'utilizzo della Ultralytics Platform può aiutarti a gestire le risorse di calcolo necessarie per la pre-elaborazione di dati complessi.
Link to this sectionDistinguere KNN da K-Means#
È importante differenziare K-Nearest Neighbors dal K-Means clustering, 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 basati su similarità strutturali.
Link to this sectionEsempio di Implementazione#
Il seguente frammento di codice dimostra 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 solitamente 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)")





