Dbscan

Da Wikipedia, l'enciclopedia libera.

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 and 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[modifica | modifica wikitesto]

Points at A are core points. Points B and C are density-reachable from A and thus density-connected and belong to the same cluster. Point N is a noise point that is neither a core point nor density-reachable. (MinPts=3 or MinPts=4)

DBSCAN usa una definizione di cluster basata sulla nozione di density-reachability. Un punto è direttamente raggiungibile da un punto se la loro distanza è minore di un assegnato (cioè, è parte del suo -vicinato) e se è circondato da un sufficiente numero di punti, allora e possono essere considerati parti di un cluster. Il punto è density-reachable da se c'è una sequenza di punti con e dove ogni è density-reachable direttamente da . Si osservi che la relazione density-reachable non è simmetrica dato che potrebbe situarsi su una periferia del cluster, avendo un numero insufficiente di vicini per considerarlo un elemento genuino del cluster. Di conseguenza la nozione density-connected diventa: due punti e sono density-connected se c'è un punto tale che sia e sia e sono density-reachable.

Un cluster, che è un sotto-insieme dei punti del database, soddisfa due proprietà:

  1. Tutti i punti all'interno del cluster sono mutualmente density-connected.
  2. Se un punto è density-connected a un altro punto del cluster, anch'esso è parte del cluster.

Algoritmo[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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à[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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 solo su isomorfismi.

Svantaggi[modifica | modifica wikitesto]

  1. 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.
  2. 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[modifica | modifica wikitesto]

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 O((n2-n)/2) 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[modifica | modifica wikitesto]

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 per le regole del pollice, può essere derivato dal numero di dimensioni nel data set come . Tuttavia valori maggiori sono usualmente 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'incrementale ottimizzazione dei parametri su particolari valori.

Altro[modifica | modifica wikitesto]

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.