DBSCAN
![Niente fonti!](http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/45px-Question_book-4.svg.png)
Il DBSCAN (Density-Based Spatial Clustering of Applications with Noise) è un metodo di clustering proposto nel 1996 da Martin Ester, Hans-Peter Kriegel, Jörg Sander e Xiaowei Xu. È basato sulla densità perché connette regioni di punti con densità sufficientemente alta. DBSCAN è l'algoritmo più comunemente usato ed è anche il più citato nella letteratura scientifica.
Idea fondamentale
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/DBSCAN-Illustration.svg/400px-DBSCAN-Illustration.svg.png)
DBSCAN usa una definizione di cluster basata sulla nozione di densità.
Un punto è direttamente raggiungibile da un altro punto se la distanza fra essi è minore di un fissato (cioè, se è parte del cosiddetto -vicinato di ; ovviamente tale relazione è simmetrica). Se nell'-vicinato di è presente un numero minimo di punti, è detto un nucleo (core point). Più precisamente, nel formalismo di DBSCAN si parla di raggiungibilità diretta solo da un nucleo ad altri punti, e non viceversa, e dunque a rigore la raggiungibilità diretta non è più una relazione simmetrica.
Un punto è raggiungibile per densità da un nucleo se esiste una sequenza di punti di punti con e in cui ogni è direttamente raggiungibile da . Ciò implica che tutti i punti intermedi siano nuclei, mentre potrebbe non esserlo (cioè potrebbe non avere almeno punti nel suo -vicinato): la relazione di raggiungibilità per densità non è perciò generalmente simmetrica. I punti non raggiungibili da alcun altro punto sono detti "esterni" (outlier).
Si considera dunque come cluster di lo stesso e tutti i punti che sono raggiungibili (per densità) da esso. Ogni cluster contiene almeno un punto nucleo, e quelli che non lo sono vengono detti "margini" (edge): sono punti da cui non possono esserne raggiunti altri. Far parte dello stesso cluster è una relazione simmetrica che può essere formalizzata (in modo abbastanza ridondante, ma necessario per la definizione "orientata" di raggiungibilità diretta in DBSCAN) tramite la nozione di connessione per densità (density-connectedness): due punti e sono connessi per densità se esiste un punto tale che sia che siano raggiungibili (per densità) da .
Un cluster, che è un sotto-insieme dei punti dell'insieme di dati, soddisfa due proprietà:
- Tutti i punti all'interno del cluster sono mutuamente connessi per densità.
- Se un punto è raggiungibile per densità da un altro punto del cluster, anch'esso è parte del cluster.
Algoritmo
DBSCAN necessita di due parametri: (eps) e del numero minimo di punti richiesti per formare un cluster (minPts). Si comincia con un punto casuale che non è stato ancora visitato. Viene calcolato il suo -vicinato e se contiene un numero sufficiente di punti viene creato un nuovo cluster. Se ciò non avviene il punto viene etichettato come rumore e successivamente potrebbe essere ritrovato in un -vicinato sufficientemente grande riconducibile ad un punto differente entrando a far parte di un cluster.
Se un punto è associato ad un cluster anche i punti del suo -vicinato sono parte del cluster. Conseguentemente tutti i punti trovati all'interno del suo -vicinato sono aggiunti al cluster, così come i loro -vicinati. Questo processo continua fino a quando il cluster viene completato. Il processo continua fino a quando non sono stati visitati tutti i punti.
Pseudo codice
DBSCAN(D, eps, MinPts) C = 0 Per ogni punto P non visitato nel dataset D contrassegna P come visitato N = getVicini (P, eps) se dimensioneDi(N) < MinPts contrassegna P come RUMORE altrimenti C = cluster successivo espandiCluster(P, N, C, eps, MinPts)
espandiCluster(P, N, C, eps, MinPts) aggiungi P al cluster C per ogni punto P' in N se P' non è stato visitato contrassegna P' come visitato N' = getVicini(P', eps) if dimensioneDi(N') >= MinPts N = N unito con N' se P' non è ancora membro di qualche cluster aggiungi P' al cluster C
Complessità
DBSCAN visita ogni punto del database, anche più volte nel caso di punti candidati a cluster differenti. Tuttavia per considerazioni pratiche la complessità temporale è per lo più governata dal numero di invocazioni a getVicini, in riferimento allo pseudo codice di cui sopra. DBSCAN esegue esattamente una invocazione per ogni punto e se viene utilizzata una struttura indicizzata che esegue un'interrogazione del vicinato in , si ottiene un tempo globale di esecuzione pari a . Senza l'uso di strutture indicizzate, il tempo di esecuzione è pari a . Spesso la matrice delle distanze di dimensione viene creata per evitare appunto il ricalcolo delle distanze riducendo il tempo di elaborazione a spese della memoria utilizzata pari a .
Vantaggi
DBSCAN presenta i seguenti vantaggi:
- non richiede di conoscere il numero di cluster a priori, al contrario dell'algoritmo K-means;
- può trovare cluster di forme arbitrarie. Può anche trovare un cluster completamente circondato da un cluster differente a cui non è connesso (dato il parametro MinPts, il cosiddetto effetto single-link, cluster differenti connessi da una sottile linea di punti, viene ridotto);
- possiede la nozione di rumore;
- richiede soltanto due parametri ed è per lo più insensibile all'ordine dei punti nel database: solo i punti posti sull'arco fra due cluster differenti possono cambiare la loro appartenenza se l'ordine dei punti viene cambiato mentre l'assegnazione ai cluster è unico a meno di isomorfismi.
Svantaggi
- La qualità del clustering generato da DBSCAN dipende dalla sua misura della distanza che è riconducibile alla funzione getVicini(P, epsilon). La più comune misura usata è la distanza euclidea. In particolare per il high-dimensional data, questa misura della distanza diventa quasi inutile tanto da esser denominata "Maledizione della dimensionalità"; nei fatti diventa difficile trovare un valore appropriato per epsilon. Tuttavia questo effetto è presente anche in altri algoritmi basati sulla distanza euclidea.
- DBSCAN non è in grado di classificare insiemi di dati con grandi differenze nelle densità, dato che la combinazione minPts-epsilon non può poi essere scelta in modo appropriato per tutti i cluster.
Guarda la sezione in basso sulle estensioni per modifiche algoritmiche che gestiscono queste caratteristiche.[non chiaro]
Rilevamento vicinato più vicino
Il rilevamento del vicinato più vicino avviene nella funzione getVicini(P,epsilon). Per ogni punto P vengono determinati tutti gli altri punti che sono all'interno dell'intervallo epsilon, basandosi sulla funzione della distanza usata nell'algoritmo. L'analisi richiede che sia calcolata una matrice delle distanze per l'intero data set. La generazione della matrice delle distanze ha una complessità di dato che è necessaria solo una matrice triangolare superiore. All'interno della matrice delle distanze il vicinato più vicino può essere calcolato selezionando la tupla che ha come valori il minimo delle funzioni su riga e colonna. La ricerca ha spinto il rilevamento del vicinato, nei database tradizionali, per migliorare la velocità. Questi ultimi risolvono il problema utilizzando indici specificamente progettati per questo tipo di applicazioni.
Stima dei parametri
Ogni processo di data mining ha il problema dei parametri. Ogni parametro influenza l'algoritmo in modo specifico. Per il DBSCAN i parametri epsilon e MinPnts sono necessari. I parametri devono essere specificati dall'utente dato che ogni data set richiede parametri differenti. Un valore iniziale per può essere determinato come un k-distance graph. Come regola generale, può essere derivato dal numero di dimensioni nel data set come . Tuttavia valori maggiori sono generalmente migliori per data set con rumore.
Anche se questa stima dei parametri restituisce un insieme sufficiente di parametri, la classificazione risultante può rivelarsi diversa da ciò che si aspetta, pertanto la ricerca ha realizzato un'ottimizzazione incrementale dei parametri su particolari valori.
Altro
Per ogni oggetto vengono trovati i vicini che ricadono in un raggio dato come parametro in ingresso; se il numero di questi vicini è superiore ad un fattore di soglia, anch'esso fornito in input all'algoritmo, allora questi punti fanno parte del medesimo cluster di quello dell'oggetto che si sta osservando e in questo caso il punto è denominato core point.
Al termine dell'algoritmo ci potrebbero essere alcuni punti non appartenenti a cluster catalogati come rumore.
Se c'è una catena di oggetti da attraversare (con i consueti vincoli) per raggiungere un punto q da uno p, allora q sarà detto semplicemente rintracciabile.
Ultimo caso è quello in cui due oggetti "p" e "q" sono detti connessi: per essere definiti in tal modo, deve esistere un terzo punto o, per cui "p" e "q" sono entrambi rintracciabili.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/24px-Computer_n_screen.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Crystal128-kmplot.svg/25px-Crystal128-kmplot.svg.png)