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:
- Scegliere K: Determinare il numero di vicini più prossimi (K).
- Calcolare la distanza: Calcolare la distanza tra il nuovo oggetto e ogni oggetto nel set di addestramento (ad esempio, distanza euclidea).
- Trovare i K vicini più prossimi: Ordinare gli oggetti per distanza e selezionare i K più vicini.
- 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]}")