Machine Learning Academy · Lezione

DBSCAN: punti core, punti di bordo e rumore

Imparerete a configurare eps e min_samples, identificare i punti core, di bordo e di rumore su un dataset a forma di mezzaluna e osservare DBSCAN individuare cluster non convessi che K-Means non rileva.

Lezione 3 di 413 passaggi

DBSCAN: punti core, punti di bordo e rumore è una lezione Machine Learning Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Machine Learning Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Machine Learning Academy include 4 lezioni in totale.

Perché K-Means fallisce con forme arbitrarie

K-Means presuppone che i cluster siano convessi e più o meno sferici. Non funziona con forme a mezzaluna, ad anello o allungate perché suddivide i punti in base alla distanza dai centroidi. DBSCAN (Density-Based Spatial Clustering of Applications with Noise) supera questo limite definendo i cluster come regioni dense separate da aree a bassa densità, e individua cluster di qualsiasi forma.

Due iperparametri fondamentali: eps e min_samples

DBSCAN è controllato da due parametri: eps (epsilon) definisce il raggio del vicinato attorno a un punto, mentre min_samples imposta il numero minimo di punti, incluso il punto stesso, richiesto entro tale raggio affinché l’area venga considerata una regione densa. Insieme, questi parametri determinano quali punti siano punti core, punti di bordo o rumore.

Punti fondamentali: gli ancoraggi delle regioni dense

Un punto è un punto core se almeno min_samples punti (incluso il punto stesso) si trovano a una distanza non superiore a eps. I punti core sono i semi da cui si sviluppano i cluster. Ogni punto nella regione di vicinato del punto core è direttamente raggiungibile da esso: questo costituisce la base per l'espansione del cluster.

from sklearn.neighbors import BallTree
import numpy as np

X = np.array([[0, 0], [0.3, 0], [0.6, 0],
              [5, 5], [10, 10]])
eps = 1.0
min_samples = 3

tree = BallTree(X)
counts = tree.query_radius(X, r=eps, count_only=True)
core_mask = counts >= min_samples
print('Core points:', np.where(core_mask)[0])  # indices 0, 1, 2

Punti di bordo e raggiungibilità per densità

Un punto di bordo ha meno di min_samples vicini entro eps, ma si trova nella regione di vicinato eps di un punto core. Appartiene al cluster del punto core, ma non contribuisce a espanderlo ulteriormente. Un punto è connesso per densità a un altro se esiste una catena di passaggi direttamente raggiungibili che li collega attraverso punti core.

Punti di rumore: rilevamento gratuito degli outlier

I punti che sono né core né di bordo — punti isolati con troppo pochi vicini — vengono etichettati come rumore (label = -1 in scikit-learn). Questo rende DBSCAN un naturale rilevatore di outlier: le anomalie che non appartengono ad alcun cluster denso vengono automaticamente contrassegnate come rumore, senza alcuna configurazione aggiuntiva.

Esecuzione di DBSCAN in scikit-learn

Utilizzi sklearn.cluster.DBSCAN. Dopo il fitting, db.labels_ contiene gli ID interi dei cluster, a partire da 0, mentre -1 indica il rumore. db.core_sample_indices_ elenca quali campioni sono punti core. Il numero di cluster viene determinato automaticamente: non è necessario specificare k in anticipo.

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import numpy as np

X, _ = make_moons(n_samples=200, noise=0.05, random_state=0)

db = DBSCAN(eps=0.3, min_samples=5)
db.fit(X)

n_clusters = len(set(db.labels_)) - (1 if -1 in db.labels_ else 0)
n_noise = (db.labels_ == -1).sum()

print('Clusters found:', n_clusters)
print('Noise points:', n_noise)
print('Labels (first 10):', db.labels_[:10])

DBSCAN su forme non convesse

DBSCAN è particolarmente efficace su dataset come due lune interbloccate o anelli concentrici, cioè forme in cui K-Means fallisce completamente. Poiché DBSCAN espande i cluster lungo catene di densità, segue naturalmente la varietà curva dei dati. Questo rappresenta un vantaggio algoritmico fondamentale per i dati geospaziali, i cluster di cellule biologiche e i dataset con anomalie incorporate.

import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN, KMeans
from sklearn.datasets import make_moons

X, _ = make_moons(n_samples=300, noise=0.05, random_state=0)

db_labels = DBSCAN(eps=0.25, min_samples=5).fit_predict(X)
km_labels = KMeans(n_clusters=2, random_state=0, n_init=10).fit_predict(X)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
ax1.scatter(X[:, 0], X[:, 1], c=db_labels, cmap='tab10')
ax1.set_title('DBSCAN')
ax2.scatter(X[:, 0], X[:, 1], c=km_labels, cmap='tab10')
ax2.set_title('K-Means')
plt.show()

Scelta di eps: il grafico delle k-distanze

Un metodo pratico per scegliere eps consiste nel tracciare il grafico delle k-distanze: calcoli la distanza di ogni punto dal suo k-esimo vicino più prossimo (dove k = min_samples), ordini queste distanze e cerchi il gomito. La distanza in corrispondenza del gomito è una buona candidata per eps. I punti al di sopra del gomito si trovano in regioni poco dense (rumore); quelli al di sotto si trovano in regioni dense.

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

X, _ = make_moons(n_samples=200, noise=0.05, random_state=0)
min_samples = 5

nn = NearestNeighbors(n_neighbors=min_samples)
nn.fit(X)
distances, _ = nn.kneighbors(X)
k_distances = np.sort(distances[:, -1])[::-1]

plt.plot(k_distances)
plt.xlabel('Points sorted by distance')
plt.ylabel(f'{min_samples}-th nearest neighbour distance')
plt.title('K-Distance Plot for eps selection')
plt.show()

Effetto di eps e min_samples sui risultati

Aumentando eps si uniscono i cluster (alla fine tutto diventa un unico cluster). Diminuendo eps si creano più cluster e più rumore. Aumentando min_samples si richiedono punti core più densi, rendendo più difficile la formazione dei cluster e generando più punti di rumore. È necessario regolare entrambi i parametri insieme: il grafico delle k-distanze guida la scelta di eps, mentre min_samples viene generalmente impostato, come punto di partenza, sulla dimensionalità dei dati più uno.

DBSCAN e K-Means: quando utilizzare ciascuno

Utilizzi DBSCAN quando: i cluster hanno forme irregolari, non conosce k in anticipo, il rilevamento degli outlier è importante oppure i dati presentano densità variabile. Utilizzi K-Means quando: i cluster sono approssimativamente sferici, il dataset è molto grande (DBSCAN ha complessità O(n log n) con un indice spaziale) oppure deve ottenere un numero specifico di cluster per ragioni aziendali, come la segmentazione del mercato in esattamente 5 regioni.

DBSCAN per il clustering geospaziale

DBSCAN è particolarmente diffuso per il clustering geospaziale (per individuare gli hotspot nei dati GPS), perché identifica naturalmente le aree urbane dense marcando al contempo come rumore i punti rurali sparsi. Utilizzi metric='haversine' e converta le coordinate in radianti per raggruppare i punti in base alla distanza lungo il cerchio massimo sulla superficie terrestre. Il risultato consiste in cluster geograficamente significativi, senza doverne specificare il numero.

import numpy as np
from sklearn.cluster import DBSCAN

# Sample GPS coords: (lat, lon) in radians
coords = np.radians([
    [40.7128, -74.0060],  # NYC
    [40.6892, -74.0445],  # nearby
    [40.7282, -73.7949],  # Queens
    [51.5074, -0.1278],   # London
])

# eps in radians: 1km / earth radius
eps_rad = 1.0 / 6371.0
db = DBSCAN(eps=eps_rad, min_samples=2, metric='haversine')
db.fit(coords)
print('Cluster labels:', db.labels_)

Verifica rapida

Verifichi la Sua comprensione dei concetti di DBSCAN presentati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: DBSCAN classifica i punti come core, di bordo o rumore in base al raggio eps e alla soglia min_samples; individua cluster di forma arbitraria concatenando punti core raggiungibili per densità; e i punti di rumore (label -1) sono outlier automatici, una funzionalità che K-Means non offre. Prossimamente applicheremo il clustering dall'inizio alla fine in un progetto di segmentazione dei clienti.

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «DBSCAN: punti core, punti di bordo e rumore» è gratuita?

Sì — il testo completo di «DBSCAN: punti core, punti di bordo e rumore» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Machine Learning Academy, passa a CoddyKit PRO. Il corso Machine Learning Academy include 4 lezioni in totale.

Cosa imparerò in «DBSCAN: punti core, punti di bordo e rumore»?

Imparerete a configurare eps e min_samples, identificare i punti core, di bordo e di rumore su un dataset a forma di mezzaluna e osservare DBSCAN individuare cluster non convessi che K-Means non rile… Eserciti Machine Learning Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Machine Learning Academy?

Non è richiesta alcuna esperienza precedente. Machine Learning Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «DBSCAN: punti core, punti di bordo e rumore»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Machine Learning Academy?

Sì. Ogni lezione Machine Learning Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. K-Means: centroidi, assegnazione e aggiornamento
  2. Scegliere K: metodo del gomito e silhouette score
  3. DBSCAN: punti core, punti di bordo e rumore
  4. Clustering per la segmentazione dei clienti: esempio completo
← Torna a Machine Learning Academy