Yolo Vision Shenzhen
Shenzhen
Iscriviti ora
Glossario

K-Nearest Neighbors (KNN)

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.

Come funziona l'algoritmo

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.

  1. 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, è possibile utilizzare altre metriche come la distanza di Manhattan (geometria dei taxi) o la distanza di Minkowski. .
  2. Selezione dei vicini: dopo aver calcolato le distanze, l'algoritmo le ordina e identifica le prime 'K' voci più vicine.
  3. 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 classificazione delle immagini di base .
    • Per la regressione: la previsione viene calcolata facendo la media dei valori dei K vicini più prossimi per stimare una variabile continua.

Scegliere la "K" giusta

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.

  • Valore K basso: un valore K basso (ad esempio K=1) rende il modello altamente sensibile al rumore e ai valori anomali nei dati, il che può portare a un overfitting.
  • Valore K elevato: un valore K elevato attenua i confini decisionali, riducendo l'effetto del rumore ma potenzialmente offuscando modelli distinti, il che si traduce in un underfitting.

Applicazioni nel mondo reale

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.

  • Sistemi di raccomandazione: KNN facilita il filtraggio collaborativo nello streaming multimediale e nell' e-commerce. Identificando gli utenti con cronologie di visualizzazione o comportamenti di acquisto simili (vicini), le piattaforme possono suggerire prodotti che un utente potrebbe apprezzare in base alle preferenze dei suoi "vicini più prossimi".
  • Rilevamento delle anomalie: nella sicurezza informatica e nella finanza, il KNN viene utilizzato per il rilevamento delle anomalie. Le transazioni o le attività di rete vengono mappate in uno spazio caratteristico; qualsiasi nuovo punto dati che si discosta dai cluster densi di attività "normali" viene segnalato come potenziale frode o violazione della sicurezza.
  • Ricerca visiva: i moderni motori di ricerca vettoriali spesso si basano su algoritmi ANN (Approximate Nearest Neighbor), una variante ottimizzata di KNN, per recuperare rapidamente immagini simili sulla base di incorporamenti ad alta dimensionalità generati da modelli come YOLO26.

Sfide e considerazioni

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.

Distinguere KNN da K-Means

È importante distinguere il metodo K-Nearest Neighbors dal cluster K-Means, poiché i loro nomi simili spesso causano 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 somiglianze strutturali.

Esempio di implementazione

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)")

Unitevi alla comunità di Ultralytics

Entra nel futuro dell'AI. Connettiti, collabora e cresci con innovatori globali

Iscriviti ora