Come Funziona l’Algoritmo K-Nearest Neighbors (KNN) in Python?

AI, INTELLIGENZA ARTIFICIALE

Oggi proverò a descrivere  uno degli algoritmi di classificazione più intuitivi e affascinanti nella sua semplicità: il K-Nearest Neighbors , noto come KNN .

Il KNN si basa su un concetto semplice ma potente: “Dimmi con chi vai e ti dirò chi sei”. In termini pratici, classifica un nuovo dato basandosi sui k dati del set di training che gli sono più vicini, utilizzando la distanza euclidea come metrica.

I Vicini Più Prossimi

Immagina di avere un dataset che rappresenta vari animali in uno zoo, con informazioni come peso, altezza ed età. Quando un nuovo animale viene aggiunto, il KNN controlla quali sono i k animali più vicini in termini di distanza euclidea e utilizza queste informazioni per classificarlo. È un approccio semplice ma estremamente efficace.

Distanza Euclidea

La distanza euclidea rappresenta la “linea retta” tra due punti in uno spazio euclideo. Matematicamente, la distanza tra due punti  P(x1, y1)  e  Q(x2, y2)  si calcola come:

sqrt((x2 - x1)2 + (y2 - y1)2)

Questo metodo si estende facilmente a spazi multidimensionali, rendendolo adatto per dataset con molte caratteristiche.

Implementazione in Python

Vediamo come mettere in pratica il KNN utilizzando scikit-learn , una libreria Python che semplifica l’implementazione degli algoritmi di machine learning.

# Importiamo le librerie necessarie
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# Creiamo un piccolo dataset di esempio
X = np.array([[1, 2], [2, 3], [3, 4], [6, 7], [7, 8]])
y = np.array([0, 0, 0, 1, 1])

# Inizializziamo il classificatore KNN con k=3
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X, y)

# Prediciamo la classe di un nuovo elemento
nuova_entrata = np.array([[5, 5]])
predizione = knn.predict(nuova_entrata)

print("Classe predetta:", predizione[0])  # Output: 0 o 1, a seconda dei vicini più prossimi

In poche righe di codice, abbiamo creato, addestrato e utilizzato un classificatore KNN. Questo esempio illustra la semplicità con cui è possibile implementare questo algoritmo.

Vantaggi e Limitazioni del KNN

Dopo aver esplorato il funzionamento del KNN, è importante esaminare i suoi vantaggi e le sue limitazioni.

Vantaggi del KNN

– Semplicità : Facile da implementare e da comprendere.
– Assenza di Assunzioni Preliminari : Essendo un algoritmo non parametrico, non fa assunzioni sulla distribuzione dei dati.
– Adattabilità Multiclasse : Può gestire facilmente problemi di classificazione con più classi.
– Versatilità : Può essere utilizzato sia per problemi di classificazione che di regressione.

Limitazioni del KNN

– Efficienza Computazionale : Può essere lento su grandi dataset poiché richiede il calcolo della distanza con tutti i punti del set.
– Sensibilità agli Outlier : Gli outlier possono influenzare negativamente le predizioni.
– Curse of Dimensionality : In spazi ad alta dimensionalità, la distanza euclidea può diventare meno significativa.
– Scelta del Valore di k : Trovare il valore ottimale di k richiede spesso sperimentazione e validazione.

In sintesi, il KNN è un algoritmo potente ma è fondamentale comprendere quando e come utilizzarlo al meglio.

Esempio Pratico: Classificazione di Specie di Fiori con il Dataset Iris

Per illustrare ulteriormente l’uso del KNN, consideriamo il famoso dataset Iris , che contiene 150 campioni di fiori suddivisi in tre specie: Setosa, Versicolor e Virginica. Ogni campione include quattro caratteristiche: lunghezza e larghezza del sepalo, lunghezza e larghezza del petalo.

Implementazione del KNN in Python

Ecco come implementare il KNN per classificare le specie di fiori:

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

# Carichiamo il dataset Iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividiamo il dataset in training set e test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# Creiamo il modello KNN con k=3
knn = KNeighborsClassifier(n_neighbors=3)

# Addestriamo il modello
knn.fit(X_train, y_train)

# Facciamo le predizioni
y_pred = knn.predict(X_test)

# Calcoliamo la precisione
accuracy = accuracy_score(y_test, y_pred)

print(f"Precisione del modello: {accuracy * 100:.2f}%")

– Dataset : Utilizzo del dataset Iris con `load_iris()`.
– Preparazione dei Dati : Divisione dei dati in training set e test set con `train_test_split()`.
– Creazione del Modello : Inizializzazione del classificatore KNN con `n_neighbors=3`.
– Addestramento del Modello : Addestramento con `fit()`.
– Predizione e Valutazione : Predizione delle classi e calcolo dell’accuratezza con `accuracy_score()`.

Questo esempio dimostra come il KNN possa essere utilizzato per risolvere problemi reali di classificazione.

 

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form