Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Il metodo k-Nearest


Classificare un nuovo esempio o predire un valore target basandosi sui suoi vicini più vicini.

Algoritmo K-Nearest

L'algoritmo k-Nearest Neighbors (KNN) è un algoritmo di apprendimento supervisionato utilizzato per problemi di classificazione e regressione.
L'obiettivo principale di KNN è classificare un'istanza di dati o prevedere il suo valore di output basandosi sui valori delle istanze di dati vicine nel set di addestramento.

Il funzionamento di KNN è semplice: dato un punto di dati di input, l'algoritmo trova i k punti di dati più vicini ad esso nel set di addestramento utilizzando una metrica di distanza (come la distanza euclidea).
Quindi, per problemi di classificazione, restituisce l'etichetta di classe più comune tra i k punti vicini (ad esempio, tramite voto di maggioranza), mentre per problemi di regressione restituisce la media o la mediana dei valori di output dei k punti vicini.

KNN è generalmente utilizzato quando si dispone di un set di dati relativamente piccolo e non lineare e non si conosce la distribuzione dei dati. Tuttavia, può essere computazionalmente costoso per set di dati di grandi dimensioni poiché richiede il calcolo delle distanze tra tutti i punti di dati nel set di addestramento.
Gli obiettivi principali di KNN sono:

  • Classificazione: assegnare una classe a un'istanza di dati in base alle classi delle istanze di dati vicine.
  • Regressione: prevedere il valore numerico di output di un'istanza di dati in base ai valori delle istanze di dati vicine.
In breve, KNN è un algoritmo versatile e semplice da implementare, adatto per problemi di classificazione e regressione in cui non è presente una struttura dati complessa e il set di dati non è troppo grande.

Mentre K-means si concentra sul raggruppamento dei dati in cluster basati sulla similarità, KNN viene utilizzato per classificare nuovi punti di dati o predire valori basati sulla loro vicinanza ai punti di dati esistenti nel set di addestramento.

  • L'algoritmo K-means cerca di dividere i dati in k gruppi (cluster) in modo che gli elementi all'interno di ciascun cluster siano più simili tra loro che con gli elementi in altri cluster.

    Clustering non supervisionato.
  • L'algoritmo KNN cerca di predire l'etichetta di un punto di dati confrontandolo con i k punti di dati più vicini nel set di addestramento.
    Classificazione o regressione supervisionata.

Ecco un esempio di codice Python che implementa KNN utilizzando il set di dati Iris e verifica l'accuratezza del modello:


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
import matplotlib.pyplot as plt

# Carica il set di dati Iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividi il set di dati in set di addestramento e di test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crea il classificatore KNN
knn = KNeighborsClassifier(n_neighbors=3)

# Addestra il classificatore sul set di addestramento
knn.fit(X_train, y_train)

# Esegui la previsione sul set di test
y_pred = knn.predict(X_test)

# Calcola l'accuratezza del modello
accuracy = accuracy_score(y_test, y_pred)
print("Accuratezza del modello KNN:", accuracy)

# Visualizza i risultati utilizzando matplotlib
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='viridis')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Classificazione Iris con KNN')
plt.show()

Questo codice carica il set di dati Iris, lo divide in set di addestramento e di test, addestra un classificatore KNN sul set di addestramento e valuta l'accuratezza del modello.
Infine, visualizza i risultati della classificazione utilizzando Matplotlib.