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 del supervised learning sia per attività di classificazione che di regressione. Contraddistinto dalla sua semplicità, KNN viene spesso classificato come "apprendista pigro" poiché non costruisce un modello o apprende parametri durante una fase di addestramento. Al contrario, memorizza l'intero set di training data ed esegue calcoli solo quando viene richiesta una previsione. Il principio fondamentale dell'algoritmo si basa sulla somiglianza delle caratteristiche: presuppone che punti di dati con attributi simili esistano in stretta prossimità l'uno rispetto all'altro all'interno di uno spazio di caratteristiche multidimensionale.
Come 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 Euclidean distance, che misura la distanza in linea retta tra i punti. Altre metriche come Manhattan distance (geometria del taxicab) o Minkowski distance 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 nelle attività di base di image classification. - Per la regressione: La previsione viene calcolata mediando i valori dei K vicini più prossimi per stimare una variabile continua.
Scegliere il 'K' giusto#
La selezione del valore ottimale per 'K' è un passaggio critico nell'hyperparameter tuning. 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 (ad 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 attenua i confini decisionali, riducendo l'effetto del rumore ma potenzialmente sfocando i pattern distinti, il che risulta in underfitting.
Applicazioni nel mondo reale#
Nonostante la sua semplicità rispetto alle reti neurali profonde, KNN rimane altamente rilevante nell'AI moderna, in particolare se combinato con tecniche avanzate di feature extraction.
- Sistemi di raccomandazione: KNN facilita il collaborative filtering 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 un utente probabilmente apprezzerà in base alle preferenze dei suoi "vicini più prossimi".
- Rilevamento delle anomalie: Nella sicurezza informatica e nella finanza, KNN viene utilizzato per il anomaly detection. Transazioni o attività di rete vengono mappate in uno spazio di caratteristiche; qualsiasi nuovo punto di dati che cade lontano dai cluster densi di attività "normale" viene segnalato come potenziale frode o violazione della sicurezza.
- La moderna vector search basata su motori di ricerca spesso si affida ad algoritmi Approximate Nearest Neighbor (ANN)—una variazione ottimizzata di KNN—per recuperare rapidamente immagini simili basate su embeddings ad alta dimensionalità generati da modelli come YOLO26.
Sfide e considerazioni#
Sebbene efficace, KNN affronta la curse of dimensionality. Con l'aumentare del numero di caratteristiche (dimensioni), i punti di dati diventano sparsi e le metriche di distanza perdono la loro efficacia. Inoltre, poiché memorizza tutti i dati di addestramento, KNN può richiedere molta memoria e soffrire di un'alta inference latency su dataset di grandi dimensioni. Per affrontare questo problema, i professionisti spesso pre-elaborano i dati utilizzando tecniche di dimensionality reduction come Principal Component Analysis (PCA) o utilizzano strutture dati specializzate come KD-Trees per accelerare la ricerca. Per il ridimensionamento di livello aziendale dei dataset e dell'addestramento dei modelli, l'utilizzo di Ultralytics Platform può aiutare a gestire le risorse di calcolo richieste per pre-elaborare dati complessi.
Distinguere KNN da K-Means#
È importante differenziare K-Nearest Neighbors da 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 unsupervised learning utilizzato per raggruppare dati non etichettati in cluster basati su somiglianze strutturali.
Esempio di Implementazione#
Il seguente snippet 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 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)")





