Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Algoritmi di clustering
Rosario Turco
Abstract
Il presente articolo è un'introduzione ad un settore teoricamente
molto esteso, di notevole importanza e con possibili margini di
innovazione, ancor oggi.
Nel seguito l'autore percorre la storia degli algoritmi di
clustering, ne esamina i vari punti di forza e le debolezze,
nell'ottica di individuare una soluzione implementativa valida, da
utilizzare in un progetto software e tenendo sempre come punto di
attenzione importanti caratteristiche come le prestazioni, la
scalabilità, l'affidabilità e l'esistenza di un prodotto di
mercato, certificato e supportato.
Introduzione
Il Clustering è una tecnica nata, sin dagli anni '50, in ambito
Statistica; consente attraverso un'analisi dei dati di segmentarli
e raggrupparli secondo dei patterns.
Gli algoritmi di clustering sono da sempre di notevole interesse
per innumerevoli settori:
• Biologia molecolare;
• Progettazione componenti elettronici;
• Text mining;
• Bioinformatica;
• Biomedicina e Medicina;
• Marketing, per la segmentazione della clientela;
• Social Network Analysis (SNA);
• Data Mining Analysis;
• Web;
• Analisi delle frodi;
• Fisco;
• Filtraggio immagini;
1
• etc
La Clustering Analysis, però, è un'attività leggermente differente
rispetto a settori come KDD (Knowledge Discovery in Databases) e
Data Mining; anche se spesso si incrociano e si auto-sostengono.
Il KDD è un processo di estrazione di conoscenza (catasto, storia,
informatica, matematica, fisica, etc) immediatamente estraibile da
un datawarehouse e direttamente fruibile.
Il DataMining è, invece, un processo automatico che lavora su un
datawarehouse e che porta alla scoperta dell'esistenza di
strutture all'interno dei dati.
La somiglianza, almeno in termini di definizione degli obiettivi,
tra DataMining e Clustering è notevole. Nel seguito, però, vedremo
cosa si intende per Clustering e le sue sfumature e differenze
rispetto al Data Mining.
Problema dell'Apprendimento
L'apprendimento è sostanzialmente "il cosa" un algoritmo riesce a
comprendere, circa un insieme di dati a disposizione; in pratica
l'algoritmo è alla ricerca di una "regola generale" o una
"descrizione", che spieghi l'insieme dei dati, avendone a
disposizione un insieme di grandezza limitata.
Gli algoritmi di apprendimento sono classificati in generale in
tre famiglie:
• algoritmi supervisionati;
• algoritmi con apprendimento per rinforzo;
• algoritmi non supervisionati;
Algoritmi supervisionati
Si è di fronte ad un algoritmo supervisionato quando i dati sono
in forma di coppie input-output e una descrizione dei dati è solo
la ricerca della funzione o del mapping tra input e output.
L'algoritmo è supervizionato perchè abbiamo a che fare con valori
target o desiderati associati in input .
Se i dati di input o target sono una categoria o una classe,
l'algoritmo affronta un problema di classificazione.
Se i dati di input o target sono valori interi , l'algoritmo
affronta un problema di regressione.
Esempi
Data una bitmap di caratteri ricercare la corretta lettera
dell'alfabeto è un problema di classificazione.
Ricercare un indice di borsa a fronte dei dati storici è, invece,
un problema di regressione.
2
Algoritmi per rinforzo
E' una filosofia di programmazione, in grado di apprendere
dall'ambiente attraverso le interazioni o input ricevuti da esso.
L'obiettivo degli algoritmi, in tal caso, è di massimizzare il
premio ottenibile che dipende dal contesto del problema. Esistono
due categorie:
1. algoritmi ad apprendimento continuo, che hanno delle
semplici regole per stabilire se si è penalizzati o
premiati e comunque di adattarsi a variazioni
dell'ambiente. Esempi sono i riconoscitori vocali, oppure
gli OCR
2. algoritmi ad addestramento preventivo, un esempio
classico sono le reti neurali. Alcuni componenti
elettronici vengono realizzati in prima battuta con
circuiti a rete neurale e solo dopo l'apprendimento di
diverso tempo si cristallizza il componente realizzandolo
definitivamente.
Algoritmi di clustering
Nel 1999 Jain classificò gli algoritmi di clustering (algoritmi
non supervisionati) in due grandi famiglie:
• algoritmi gerarchici di clustering, che fanno uso di
rappresentazioni grafiche (dendrogrammi)
• algoritmi partition clustering, che assegnano i dati o
partizionano i dati, secondo criteri (come metriche,
densità, similarità etc), inserendo essi in cluster
differenti.
Oggi gli algoritmi di clustering si dovrebbero classificare come:
Gerarchico, Partizionale, Densità, Modello, Grid-Based; la
tendenza, comunque, è spesso di avere un misto di tecniche tra
essi, per migliorare la scalabilità e l'efficvienza, tale da
ridurli a sole due-tre categorie principali.
3
Algoritmi gerarchichi di clustering
Questi algoritmi lavorano raggruppando oggetti in gerarchie di
cluster. La gerarchia in tal caso può avvenire top-down (divisive
hierarchical methods) o bottom-up (agglomerative hierarchical
methods). La loro complessità è di solito O(n^2). Alcuni
miglioramenti furono introdotti con BIRCH (Balanced Iterative
Reducing and Clustering using Hierarchies) che ha una complessità
O(n), lavora con meno memoria, utilizza una struttura dati CF-Tree
per memorizzare e comprimere informazioni e fa meno I/O. BIRCH
lavora bene su data set con cluster sferici.
Altro algoritmo del genere è CURE (Clustering Using
Representative), con O(n^2) e lavora con una filosofia diversa da
BIRCH: usa un numero fisso di punti di riferimento per determinare
i cluster. Usa un approccio gerarchico agglomerativo, in cui si
mappa ogni cluster con un insieme di oggetti rappresentativi. In
ogni cluster vengono identificati questi punti rappresentativi,
che vengono condensati verso il centro di un fattore prefissato
(per ridurre l’effetto del rumore).
La fusione di due cluster dipende dalla distanza tra i più vicini
punti rappresentativi. Permette di gestire in modo corretto
clusters non sferici, scala bene all’aumentare del numero di
punti. È molto sensibile alla scelta dei parametri (numero di
punti rappresentativi, fattore di condensazione).
Altri algoritmi noti sono AGNES (AGlomerative NESting), DIANA
(Divisive ANAlysis), Rock, Chameleon che risulta più efficace di
CURE e di DBSCAN (Density-Based Spatial Clustering of Applications
with Noise).
Cluster Analysis
L'analisi dei cluster o Cluster Analysis fu introdotta nel 1939 da
Robert Tryon. La Cluster Analysis è un insieme di tecniche,
matematiche ed informatiche, di analisi dei dati con il preciso
obiettivo di raggruppare i dati in insiemi omogenei rispetto a
determinate variabili.
Tutte le tecniche di analisi clustering si basano sul concetto di
distanza (come metrica) tra due punti, oggetti o dati. La bontà
delle analisi di clustering dipende, quindi, dalla scelta della
metrica o della distanza o, come si dice, dalla minimizzazione
4
dell'Errore di Quantizzazione.
Gli algoritmi di clustering raggruppano i dati in base alla
distanza reciproca e, quindi, l'appartenza di un dato ad un
insieme dipende da quanto esso dista dall'insieme.
Illustrazione 1
Oggetti Density Reachable
Un oggetto p è Density Reachable da un oggetto q, se esiste una
5
catena di oggetti p1=q,p2,...,pn=p per cui ogni oggetto pi+1 è
Directly Density Reachable dal precedente pi.
Illustrazione 2
Illustrazione 3
Cluster
Un cluster C è un sottoinsieme dei dati, massimale e connesso.
Per massimale si intende che per ogni p e q, se p apparteiene a C
e q è density reachable da p, allora q è in C.
Per connesso si intende che per ogni p e q appartente a C, p è
density connected a q.
Punti Border e Outlier
Un punto border è sul bordo del cluster; mentre un punto outlier
non è border nè core.
OPTICS usa qualche metrica aggiuntiva, che andiamo a definire nel
seguito.
Core Distance e Reachability Distance
La Core Distance è il min valore di raggio Є per cui l'oggetto è
possibile considerarlo core, ovvero min Є = Є'.
La Reachability Distance tra due oggetti p e q è il max valore tra
distanza euclidea e la Core Distance, ovvero max [de(p,q),Є'].
OPTICS (Ordering Points To Identify Clustering)
Tipicamente la fase di analisi per la determinazione dei cluster è
affrontata in almeno due fasi. In pratica non si assegna un
cluster ad ogni dato elaborato, ma si elaborano prima gli oggetti
per comprendere dove si addensano e poi si decidono i cluster.
6
La tecnica è nota come "DBSCAN" (Density-Based Spatial Clustering
of Applications with Noise). L'algoritmo va alla ricerca di zone
ad alta densità di punti rispetto a zone a bassa densità e l'idea
base del DBSCAN, come già accennato precedentemente, è di
individuare zone con punti che superano una soglia (il MinPts).
La tecnica DBSCAN ha complessità O(n^2), ma se si usa un indice
spaziale la complessità diventa O(nlogn). Vediamo nel seguito le
due fasi usate.
7
oggetto il suo Reachability Distance nell'ordine in cui gli
oggetti sono processati. Appena si trova un oggetto core, invece,
si passa ad elaborare tutti gli ogetti Directly Density Reachable
rispetto all'oggetto core, proseguendo dai punti più vicini a più
lontani.
8
Un punto ξ è detto "steep upward point" quando è un punto ripido
in salita con un Reachability Distance almeno inferiore di ξ%
rispetto al successivo. Un punto ξ "steep downward point" è
l'analogo punto ripido in discesa.
Una ξ "steep upward area" è, invece, un'area [s,e] tale che s ed
e sono steep upward points; mentre ogni punto tra s ed e ha una
Reachability Distance almeno uguale a quella dei suoi
predecessori. Inoltre l'area non contiene più di MinPts punti che
non sono ξ "steep upward" points, altrimenti contribuirebbero a
cluster diversi. Analogamente si può dire per una ξ "steep
downward area".
Un ξ cluster soddisfa i seguenti requisiti:
1. inizia con una ξ "steep downward area" D;
2. Finisce con una ξ "steep upward area" U;
3. L'inizio del cluster è l'ultimo punto con alto valore di
Reachability Distance;
4. La fine del cluster è l'ultimo punto con basso valore di
Reachability Distance;
5. La Reachability Distance dei punti nel cluster deve essere ξ%
minore a quella del primo punto di D e dell'ultimo punto di U
Usando i criteri di sopra si possono automatizzare le
ricerche dei cluster.
Per tali tipi di problemi non sono ancora noti algoritmi in tempi
polinomiali.
9
(3 − 0) 2 + (4 − 0) 2 = 5
k k k
∑ x1i ∑ x2 i ∑ xd i (1)
µ ( x1 , x2 ,..., xk ) = i= 1
, i= 1
,..., i = 1
k k k
k
1
E=
2N
∑ ∑
j = 1 n∈ S j
||x n − µ j ||2
10
modo randomico nei k insiemi (o cluster fissati) e si
scelgono k centri iniziali, uno per ogni cluster
2. Si calcolano i centroidi con la (2) in basa ai cluster
iniziali fissati ed i centri iniziali
3. Si assegna ogni punto al più vicino μj e quindi lo si assegna
nel cluster j (questo minimizza la varianza interna e
massimizza la varianza esterna)
4. Se E non diminuisce ci si arresta (significa anche che i
punti non si spostano più tra cluster); se, invece,
diminuisce si ritorna al passo 2 per continuare
Per poter minimizzare la distorsione occorre:
1. ogni punto deve essere codificato col suo centroide
2. la derivata parziale della distorsione rispetto alla
posizione di ogni centro o punto deve essere nulla.
11
all'altro della città non è possibile fare la distanza più
breve, ma percorsi permessi tra quartieri; per cui il city-
block è la somma dei path possibili messi a disposizione da
ogni quartiere. Di solito è preferibile una distanza
normalizzata ovvero 1/N di quella di sopra.
• Distanza Chebychev
• distance(x,y)=Maximum|xi-yi|
• Percentuale di disaccordo
• distance(x,y)=(Number of xi≠yi )/i
• Coefficiente di correlazione di Pearson 'centered'
1 N
xi − x yi − y
r=
N
∑
i= 1
σ x σ y
1 N xi yi
r= ∑
N i = 1 σ x(0) σ y(0)
rispetto al 'centered' assume la media nulla anche se non lo è
realmente. Mentre sono definite come:
N
1
∑ (x)
2
σ (0)
x = i
N i= 1
N
1
∑ (y)
2
σ (0)
y = i
N i= 1
12
i punti xi e yi esiste un offset costante, allora la centered
correlation è 1 ma non è 1 l'uncentered correlation. Questo
perchè l'uncentered correlation rappresenta il coseno
dell'angolo tra due vettori x e y n-dimensionali, ognuno dei
quali è in uno spazio a n dimensioni che passa per l'origine.
• Spearman rank correlation rSpearman che rappresenta la
correlazione dei rank dei dati dei vettori. E' una versione
derivata dal coefficiente di Pearson, ed è un coefficiente di
solito più robusto con gli outliers. Si parte dai vettori e
si sostituisce ad ogni loro valore quello del loro rank o
della loro posizione, poi si ricava il coefficiente. In
questo modo rimpiazzando il valore con quello del rank si
ottiene un valore prossimo a quello del coefficiente di
Pearson standard, anche se esistono valori estremi elevati
(outliers). Spesso lo Spearman rank correlation è usato come
test statistico di indipendenza di x da y.
• Il τ di Kendall, anch'esso un coefficiente derivato da quello
di Pearson.
Con Nc indichiamo il numero di coppie (xi,yi) (xj,yj)
concordi, cioè tali che:
• xi > xj e yi > yj oppure xi < xj e yi < yj
(sinteticamente ogni coppia con segni >> o <<)
mentre con Nd quelle discordi (sinteticamente ogni coppia con
segni <> o >< ) che non rispettano la definizione precedente.
In tal caso è:
Nc − Nd
τ =
N ( N − 1) / 2
Missing value
Se uno dei due vettori da confrontare nella similitarità ha valori
assenti, il valore presente nell'altro vettore corrispondente non
verrà considerato; questo per poter confrontare a coppie i valori
(xi,yi).
13
Esempio concettuale di clustering
Supponiamo k=2 cluster e prendiamo k=2 centri casuali (quelli in
arancione nella figura 1), uno per cluster.Clusterizziamo i nostri
dati rispetto a questi centri.
Illustrazione 4
Illustrazione 5
Illustrazione 6
Illustrazione 7
14
chiamiamo codebook l'insieme:
W = { µ 1 , µ 2 ,..., µ k }
15
Illustrazione 8: Tassellazione di Voronoi
k
1
E= ∑ ∑
2 | D | c = 1 S ∈ Vc
||S − µ c ||2
16
Vi = { S ∈ D | i = arg min j || S − µ j ||}
3. Assegniamo ad ogni codevector μi la media (o centroide)
dell'insieme di Voronoi
1
∑ S
µi =
| Vi | S∈ Vi
4. Torniamo al passo 2 se qualche codevector cambia; altrimenti
abbiamo terminato.
17
Gli algoritmi grid-based dividono lo spazio dell'input in
ipercelle rettangolari, scartano le ipercelle a bassa densità e
uniscono le ipercelle ad alta densità per formare i cluster.
Molti algoritmi di tal genere sono STING, MAFIA, CLIQUE etc (vedi
[3]).
Tuttavia anche gli algoritmi grid-based diventano costosi, specie
in termini di memoria, all'aumentare delle dimensioni in gioco.
Esistono, però, diversi algoritmi che cercano di superare il
problema dell'aumento della dimensionalità: ORCLUS, PROCLUS,
OptiGrid, O-Cluster sono un esempio.
OptiGrid è un algoritmo interessante sia per la sua semplicità che
per la capacità di trovare cluster in spazi ad alte dimensioni,
anche in presenza di rumore.
18
Difetti di OptiGrid
OptiGrid ha due difetti principali:
• è sensibile alla scelta dei parametri che portano alla
scelta del piano di taglio;
• non descrive o prevede una tecnica di gestione dei dati dei
dataset che non riescono, poi, a trovare spazio in memoria.
19
insieme di proiezioni o dimensioni rispetto alle quali determinare
degli istogrammi. Ogni partizione che presenta una foglia nella
gerarchia di cluster e non è masrcata 'ambigua' o 'frozen' è da
considerarsi come una partizione attiva. Allo step 4 e a quello 6
si vedrà cosa si intende per marcare le partizioni ambigue e
frozen. E' essenziale calcolare gli istogrammi perchè, secondo
vari studi (vedi [3]), si evidenzia che è possibile individuare un
numero ottimale di contenitori in base alla distribuzione dei
dati.
Secondo alcuni studi l'approccio più semplice porta ad un numero
di contenitori inversamente proporzionale alla deviazione standard
dei dati di una certa dimensione e direttamente proporzionale a
N1/3, con N il numero di punti interni ad una partizione.
Un metodo alternativo è di considerare una strategia di
contenitori globali e cambiare gli istogrammi appena il numero dei
punti interni alla partizione decrementa. O-cluster è comunque
robusto rispetto a qualsiasi strategia adottata.
20
significativo statistico che usa O-Cluster è il test χ2:
Step 6 Reload buffer: Il reload buffer viene attuato solo dopo che
gli splitting sono terminati, come si vede dal diagramma a
blocchi.
Se tutte le partizioni rimaste sono marcate frozen oppure i dati
sono finiti, allora l'algoritmo termina.
Se esistono partizioni marcate come ambigue oppure esistono
dataset non ancora esaminati, allora il buffer viene ricaricato.
I nuovi dati vanno a rimpiazzare nel buffer quelli delle
partizioni 'frozen' (congelate).
In sostanza vengono caricati o dati di partizioni ambigue oppure
dati mai esaminati. E' possibile durante l'elaborazione
conteggiare le statistiche dei punti delle partizioni ambigue,
congelate etc.
Il caricamento continua fino a che non si verifica una delle
seguenti condizioni:
1. il buffer è pieno
2. i dati sono finiti
21
3. un certo numero di dati sono stati letti, il buffer non è
pieno e non vi sono molti dati
La terza condizione sembra strana ma serve per evitare un
eccessivo Reloading; difatti il buffer è molto grande ed essere
pieno con molti record marcati da cancellare, e ciò richiederebbe
un tempo di attesa grande per poi riempirlo con i dati di una
partizione ambigua.
Per evitare questo, come compromesso, il processo di reloading si
intende terminato quando si sono letti una quantità di dati almeno
uguale alla lunghezza del buffer stesso.
Una volta completato il reload del buffer si ritorna allo step 2.
22
O-cluster avviene con un clustering ad albero binario ed è
validato statisticamente.
Benchmark di O-Cluster
Su O-Cluster è stato eseguito (vedi [3]) un particolare
benchmark, con un dataset bidimensionale DS3. I risultati sono da
considerarsi molto validi per scalabilità, prestazioni, efficacia
ed efficienza. Inoltre occorre tener conto che è basato su Oracle
e, quindi, di un prodotto molto noto e supportato.
23
dimensione del lotto di default è 50000). O-Cluster legge un altro
batch se ritiene, sulla base di test statistici, perchè potrebbero
esistere gruppi che non ha ancora individuato.
Riferimenti
[1]http://www.smaponline.net/tags/optics-clustering-java-
implementation.html
[2]http://download.oracle.com/docs/cd/E11882_01/datamine.112/e1221
6/clustering.htm
[3] O-cluster: Scalable Clustering of Large High Dimensional Data
Sets - Boriana L. Milenova (Oracle), Marcos M. Campos (Oracle)
24
Tools free per studio didattico su Windows
per didattica sul Clustering:
[5]Cluster e Java Tree Viewer
-°-
-°-
25