Cos'è l'algoritmo dei k vicini più prossimi?
sobes.tech AI
Risposta dell'AI
L'algoritmo dei k vicini più prossimi (k-NN) è un semplice algoritmo di apprendimento automatico, non parametrico e lazy, utilizzato sia per la classificazione che per la regressione.
Principio di funzionamento:
- Classificazione: Per un nuovo punto dati, l'algoritmo trova i k punti più vicini nel set di addestramento. La classe del nuovo punto è determinata dalla maggioranza dei voti tra questi k vicini.
- Regressione: Per un nuovo punto dati, l'algoritmo trova i k punti più vicini nel set di addestramento. Il valore del nuovo punto è determinato facendo la media dei valori della variabile target di questi k vicini.
La "vicinanza" è generalmente misurata usando metriche di distanza come la distanza euclidea, la distanza di Manhattan o la distanza di Minkowski.
La scelta del valore di k è cruciale e può influenzare le prestazioni. Un k troppo piccolo è sensibile al rumore, mentre uno troppo grande appiattisce i confini delle classi.
L'algoritmo appartiene ai "pigri" (apprendenti pigri), perché non costruisce un modello esplicito durante la fase di addestramento, ma semplicemente memorizza tutto il set di addestramento. Tutti i calcoli avvengono durante la fase di previsione.
Esempio di utilizzo in Python con la libreria scikit-learn:
# Importare le librerie necessarie
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# Caricare il dataset (esempio: iris)
iris = load_iris()
X, y = iris.data, iris.target
# Dividere i dati in set di addestramento e di test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Creare un'istanza del classificatore k-NN (ad esempio, k=3)
knn = KNeighborsClassifier(n_neighbors=3)
# Addestrare il modello
knn.fit(X_train, y_train)
# Prevedere sul set di test
y_pred = knn.predict(X_test)
# Valutare la precisione
accuracy = accuracy_score(y_test, y_pred)
# print(f"Precisione del modello: {accuracy}")
Vantaggi:
- Facile da implementare e interpretare.
- Non richiede assunzioni sulla distribuzione dei dati.
Svantaggi:
- Alto costo computazionale nella fase di previsione per grandi set di dati.
- Sensibile agli outlier e alla scala delle caratteristiche.
- Non efficiente in dati ad alta dimensione.