Sobes.tech
Middle

Cos'è l'algoritmo dei k-Nearest Neighbors (kNN)?

sobes.tech AI

Risposta dell'AI

L'algoritmo dei k più vicini (kNN) è un semplice algoritmo di apprendimento automatico non parametrico, utilizzato sia per la classificazione che per la regressione.

Sostanza: Assegna un nuovo oggetto (punto dati) alla classe più rappresentata tra i k vicini più prossimi nel set di addestramento. Per la regressione, prevede un valore come la media/mediana dei valori dei k vicini più prossimi.

Passaggi principali per la classificazione:

  1. Scegliere K: Determinare il numero di vicini più prossimi (K).
  2. Calcolare la distanza: Calcolare la distanza tra il nuovo oggetto e ogni oggetto nel set di addestramento (ad esempio, distanza euclidea).
  3. Trovare i K vicini più prossimi: Ordinare gli oggetti per distanza e selezionare i K più vicini.
  4. Votazione: Determinare la classe del nuovo oggetto in base alla maggioranza dei voti tra i K vicini più prossimi.

Vantaggi:

  • Facile da implementare e comprendere.
  • Non richiede l'addestramento di un modello (algoritmo pigro).
  • Si adatta ai nuovi dati man mano che vengono disponibili.

Svantaggi:

  • Costoso computazionalmente con grandi volumi di dati (fase di previsione).
  • La scelta di K e della metrica di distanza sono critici.
  • Sensibile alla scala delle caratteristiche e alla "maledizione della dimensionalità".
  • Non funziona bene direttamente con caratteristiche categoriche (richiede codifica).

Applicazioni:

  • Riconoscimento di pattern.
  • Sistemi di raccomandazione.
  • Diagnostica medica.
  • Ricerca di documenti simili.
# Esempio di implementazione di kNN per classificazione usando scikit-learn

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Creazione di dati dimostrativi
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Etichette di classe

# Divisione dei dati in set di addestramento e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Creazione e addestramento del modello kNN
# K=3, cioè 3 vicini più prossimi
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Previsione sul set di test
y_pred = knn.predict(X_test)

# Valutazione della precisione
accuracy = accuracy_score(y_test, y_pred)
# print(f"Precisione del modello: {accuracy}")

# Previsione per un nuovo punto
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Classe prevista per il nuovo punto: {predicted_class[0]}")