-->

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

DB Scan


Identificare cluster di forma arbitraria e gestire il rumore nei dati.

Cos'è il DBSCAN?


DBSCAN (Density-Based Spatial Clustering of Applications with Noise) è un algoritmo di clustering basato sulla densità che è particolarmente utile per identificare cluster di forma arbitraria e per gestire il rumore nei dati. A differenza di algoritmi come K-means, DBSCAN non richiede che venga specificato il numero di cluster a priori.
Invece, utilizza due parametri principali:
1. Epsilon (ε): La distanza massima tra due punti affinché uno possa essere considerato come parte del cluster dell'altro.
2. **MinPts**: Il numero minimo di punti necessari per formare un cluster.

Come funziona il DBSCAN

1.Punti Core: Un punto è un punto core se ha almeno `MinPts` punti nel raggio ε.
2. Punti di Bordo: Un punto è un punto di bordo se si trova entro la distanza ε di un punto core, ma non ha abbastanza punti per essere esso stesso un punto core.
3. Punti di Rumore: Un punto che non è né un punto core né un punto di bordo.
DBSCAN inizia con un punto non visitato, lo considera un punto core se ci sono abbastanza punti nel suo intorno ε, e itera espandendo i cluster a partire dai punti core.

Esempio di Utilizzo del DBSCAN

Utilizzeremo il dataset generato con `make_moons`, che crea un dataset di due mezze lune, un classico esempio di dati non linearmente separabili.

Generazione del Dataset e Visualizzazione


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons

# Generazione del dataset
X, y = make_moons(n_samples=300, noise=0.05, random_state=42)

# Visualizzazione del dataset
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')
plt.title('Dataset generato (make_moons)')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Applicazione del DBSCAN


from sklearn.cluster import DBSCAN

# Applicazione del clustering DBSCAN
dbscan = DBSCAN(eps=0.2, min_samples=5)
clusters = dbscan.fit_predict(X)

Visualizzazione dei Cluster


# Visualizzazione dei cluster
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=clusters, s=50, cmap='viridis')
plt.title('Clustering DBSCAN')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Spiegazione del Codice

1.Generazione del Dataset: Utilizziamo `make_moons` per generare un dataset sintetico con 300 campioni e rumore aggiunto per simulare dati non linearmente separabili.
2. Visualizzazione del Dataset: Visualizziamo il dataset generato con un grafico a dispersione, colorando i punti in base alla loro etichetta.
3. Applicazione del DBSCAN: Utilizziamo `DBSCAN` da `sklearn.cluster` per applicare il clustering basato sulla densità al dataset. Impostiamo ε a 0.2 e `min_samples` a 5.
4. Visualizzazione dei Cluster: Visualizziamo i cluster risultanti con un grafico a dispersione, utilizzando colori diversi per rappresentare i diversi cluster identificati da DBSCAN.