Sei sulla pagina 1di 25

Introduzione agli

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 non supervisionati


Se i dati forniti sono un insieme di oggetti senza nessun dato di
input o target, allora abbiamo a che fare con algoritmi non
supervisionati; in tal caso l'algoritmo deve individuare delle
regole, rispetto a delle variabili, per raggruppare i dati in
qualche modo:
• cluster
• altro
Scopo dell'articolo è indagare sugli algoritmi non supervisionati.

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).

Problematiche del clustering gerarchico


Il clustering gerarchico tipicamente è poco scalabile (complessità
almeno O(n^2)), e tipicamente non consente di tornare indietro (se
si fondono male due cluster, non c’è modo poi di separarli a meno
di non ripartire daccapo con l’algoritmo).
Hanno però interesse per tutti i problemi che hanno dietro come
inpalcatura una gerarchia tra nodi, item, oggetti o soggetti.

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.

Algoritmi di partition clustering


Lo scopo di questi algoritmi è innanzitutto minimizzare la
dissimilirità tra i dati di uno stesso gruppo (o cluster o insieme
)e massimizzare la dissimilirità tra i dati di cluster differenti,
secondo una metrica prescelta che può dipendere anche dal problema
da affrontare.
Nel seguito accenneremo solo agli algoritmi di partition
clustering.

Clustering density-based o Locality based


Lo scopo di un algoritmo Clustering density based è di creare
raggruppamenti di dati, considerando l'intorno di ogni punto (o
dato) nello spazio d-dimensionale; analizzando, cioè, la densità
dei punti in un intorno di raggio prefissato.
Tutto questo è possibile se si assume come "proprietà
fondamentale" la densità locale dei punti, rinunciando alla
densità globale dei dati in senso statistico, proprio perchè la
densità locale dei punti consente di individuare raggruppamenti in
zone diverse dello spazio d-dimensionale, altrimenti impossibile.
OPTICS, ad esempio, è un algoritmo basato su questa idea.
Definizioni
Sono importanti due parametri nel prosieguo:
• il raggio Є dell'intorno considerato
• il numero minimo MinPts di punti all'interno dello spazio o
intorno considerato
Oggetti Core e Oggetti Directly Density Reachable
Un oggetto p è nell'intorno di un oggetto q se la distanza tra p e
q è minore o uguale al raggio Є.
Se l'oggetto q ha nel suo intorno di raggio Є
almeno MinPts punti, allora esso è definito
"oggetto Core"; mentre l'oggetto p è definito
"Directly Density Reachable" da q, ovvero è
nell'intorno di un oggetto core.

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

Oggetti Density Connected


Un oggetto p è Density Connected ad un oggetto q se esiste un
terzo oggetto o, da cui sia p che q sono Density Reachable
dall'oggetto o.

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.

Fase "Scan dei dati"


Viene fatta l'analisi di un oggetto, se non è stato ancora
elaborato, e si determinano i punti nel suo intorno. Per questo si
considera il raggio Є ed occorre individuare almeno MinPts punti
nell'intorno. Poi si calcola la "Core Distance" Є' e si inserisce
l'oggetto nel database finale (DBF da adesso in avanti) se esso è
un oggetto core.
Se l'oggetto precedente non è un oggetto core, si passa ad un
altro oggetto non elaborato ancora.
Se, invece, è un oggetto core si determinano, fissato Є e MinPts,
tutti gli oggetti Directly Density Reachable dall'oggetto. Tali
oggetti, poi, sono inseriti in una lista (Lista nel seguito),
ordinata secondo la distanza euclidea dei punti crescente al più
vicino oggetto core raggiungibile; viene, poi, settata la Core
Distance e la Reachability Distance. Si cicla ad ogni passo sulla
Lista, di cui prima, selezionando l'oggetto con la minor
Reachability Distance e si calcolano i punti vicini (neighbors) e
la Core Distance; infine l'oggetto viene alla fine scritto nel
DBF. Se l'oggetto è core allora ulteriori punti possono essere
scritti nella lista e se ne aggiorna l'ordinamento e questo finchè
non sono processati tutti i dati.
Fase "elaborazione del DBF"
In questa fase si scandaglia sequenzialmente il DBF. Si fissa un
cluster corrente, se la Reachability Distance dell'oggetto
considerato è maggiore della Clustering Distance Є', in tal caso
l'oggetto non è Density Reachable rispetto a Є' e MinPts da
nessuno degli oggetti presenti nell'ordinamento prima dell'oggetto
stesso. Per cui si guarda la Core Distance e si crea un nuovo
cluster B solo se l'oggetto è core rispetto a Є' e MinPts,
altrimenti è considerato rumore (noise). Se, invece, la
Reachability Distance dell'oggetto considerato è minore della
Clustering Distance Є', si assegna l'oggetto al cluster corrente,
perchè è Density Reachable rispetto a Є' e MinPts dagli oggetti
precedenti dell'ordinamento.
Visualizzazione con istogrammi
Un metodo semplice di visualizzazione nel caso Optics o degli
algoritmi Clustering density-based è il Reachability plot. Si
tratta di tracciare su grafico un istogramma che mostra di ogni

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.

In figura a sinistra l'addensamento degli oggetti e


l'individuazione dei cluster; mentre a sinistra il grafico degli
istogrammi.

Tecniche automatiche per il clustering density based


Sono usate tecniche per creare i cluster automaticamente gestendo
una struttura gerarchica di cluster.
In genere si lavora sugli istogrammi degli oggetti, prodotti a
partire da una metrica di similarità o di distanza (ad esempio r è
il coefficiente di Pearson, oppure la distanza euclidea
normalizzata, etc).

Avendo a disposizione gli istogrammi occorre introdurre il


parametro ξ grado di ripidezza.

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.

Clustering K-means (o K-medie)


Supponiamo di avere un insieme totale di n punti, in uno spazio d-
dimendionale.
L'obiettivo che ci poniamo è di individuare k punti con k≤n, nello
spazio d-dimensionale, minimizzando la distanza quadratica media
di ogni punto da un centroide. Detto in altri termini occorre
massimizzare, rispetto ad una serie di metriche, il rapporto tra
la varianza esterna (tra i gruppi) e quella interna (nei gruppi).
Il metodo è sensibile ai punti outlier.

Per tali tipi di problemi non sono ancora noti algoritmi in tempi
polinomiali.

Supponiamo inizialmente di far riferimento alla distanza euclidea


tra i punti x e y:
d
d E ( x, y ) = || ( x, y ) ||= ∑
i= 1
( xi − yi ) 2

Ad esempio la distanza euclidea tra il punto (0,0), origine di un


sistema di assi cartesiani (d=2 o 2D), ed il punto (3,4) è:

9
(3 − 0) 2 + (4 − 0) 2 = 5

La distanza euclidea viene, di solito, valutata rispetto ad un


"centroide" d-dimensionale tra k punti d-dimensionali come segue:

 k k k

 ∑ x1i ∑ x2 i ∑ xd i  (1)
µ ( x1 , x2 ,..., xk ) =  i= 1
, i= 1
,..., i = 1 
 k k k 
 
 

Ad esempio il centroide in ambito 2D (d=2) dei punti (2,4),(5,2),


(8,9), quindi con k=3, è:
 2+ 5+ 8 4+ 2+ 9 
µ =  ,  = ( 5,5 )
 3 3 

Generalizzando, l'idea di base è di cercare k vettori μj per


j=1,...,k; poi per classificare un punto x si dovrà trovare il
vettore μj più vicino a x e, in tal caso, potremo affermare che x
appartiene al cluster j.

Supponiamo, difatti, che il data set di dati disponibili è x^n con


n=1,...,N. Ora occorre partizionare il dataset in k sottoinsiemi
disgiunti Sj per j=1,...,k a cui sarà associabile un vettore μj.

L'errore di quantizzazione E viene definito con:

k
1
E=
2N
∑ ∑
j = 1 n∈ S j
||x n − µ j ||2

dove, in base alla (1) è:


1
µj =
N

n∈ S j
xn (2)

Minimizzare l'errore di quantizzazione significa minimizzare la


distorsione o la perdita di informazione che si ottiene
sostituendo un punto (a volte detto anche centro) col suo
centroide.
Per cui l'algoritmo k-means va applicato, in generale, secondo i
seguenti passi:
1. Si assegnano inizialmente i punti x^n (punti o centri) in

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.

La configurazione iniziale dei punti e la scelta di k


L'algoritmo ha una relativa velocità di convergenza. Il risultato
iniziale non necessariamente è quello ottimo. La cosa dipende
dalla configurazione iniziale, per cui di solito si provano più
configurazioni iniziali randomiche o manuali dei punti e si
confrontano i risultati per scegliere alla fine la configurazione
iniziale giusta.
Anche con la scelta di k si preferisce provare diversi valori di
k, in modo che minimizzi le distanze intra-cluster e massimizzi le
distanze inter-cluster. L'algoritmo ha complessità O(tkn) dove t è
il numero di iterazioni che occorranno, n è il numero di punti e k
il numero di cluster.
Scelta della metrica
In generale uno dei problemi fondamentali, legato anche al
problema, è la scelta della metrica di similitarità (Similitarity
Metric) o anche di distanza tra due serie di numeri
x={x1,x2,...,xn} e y={y1,y2,...,yn}.
Possono essere scelte diverse metriche, alcune delle quali sono:
• Distanza euclidea quadrata
• distance(x,y)=Σi(xi-yi)2
Rappresenta la distanza o path più breve tra due punti.Di
solito è preferibile una distanza normalizzata ovvero 1/N di
quella di sopra.
• Distanza City-block (Manhattan)
• distance(x,y)=Σi|xi-yi|
Il concetto dietro al City-block è come se una città fosse
divisa in quartieri o blocchi e per arrivare da un punto

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 

dove x o y 'segnato' sono la media, mentre σx o σy sono la


devizione standard. Il coefficiente r vale 1, 0, -1. Con 1
esiste una correlazione tra i dati xi e yi, con 0 non esiste e
con -1 è una correlazione opposta. Quando non si vuole parlare
di distanza, ma di similarità, r è la metrica preferita
insieme a quello uncentered. Se si usa questo coefficiente non
è necessaria una normalizzazione, perchè è già implicita nella
definizione.
Il concetto della correlazione di Pearson è quanto r si
avvicina ad approssimare il passaggio per i punti; oppure più
semplicemente se i vettori x e y sono pensati come curve di
punti xi e yi, allora il coefficiente di Pearson indica se le
due curve hanno pendenze simili. Il coefficiente di Pearson è
invariante rispetto ad una trasformazione lineare di y; ad
esempio se gli yi sono moltiplicati per una costante o sommati
per una costante il coefficiente di Pearson è ancora uguale al
precedente (la pendenza è rimasta la stessa).
• Coefficiente di correlazione di Pearson 'uncentered'

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

Se i dati x e y sono due vettori, con analoga pendenza, e tra

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

Anche il coefficiente di Kendall può essere usato come test di


indipendenza dei dati.

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.

Ricalcoliamo ora i centroidi in base ai


cluster individuati (vedi figura 2).

Illustrazione 4

Rifacciamo il clustering dei nostri dati


rispetto ai nuovi centroidi individuati
(vedi figura 3).

Illustrazione 5

Si ripetono gli ultimi due passi fintanto


che dei punti si muovono da un cluster ad
un altro (vedi figura 4).

Illustrazione 6

Illustrazione 7

Codebook e Codevector, Insieme di Voronoi e Regione di Voronoi


Formalizziamo ulteriormente quello già visto prima e indichiamo il
dataset dei dati D con:
D = { S1 , S 2 ,..., S N }

di cardinalità N, costituito da vettori S appartenenti a Rn, allora

14
chiamiamo codebook l'insieme:

W = { µ 1 , µ 2 ,..., µ k }

i cui elementi, detti codevector, sono:


1. appartenenti a Rn,
2. e l'insieme W ha una cardinalità k«N
L'insieme di Voronoi Vc del codevector μc è l'insieme di tutti
i vettori in D per i quali μ c è il codevector più vicino (o
winner):
Vc = { S ∈ D | c = arg min j || S − µ j ||}

Per conseguenza la Regione di Voronoi Rc del codevector μc è


l'insieme di tutti i vettori in Rn per i quali μc è winner:

Rc = { S ∈ R n | c = arg min j || S − µ j ||}

La definizione di un codebook porta, inevitabilmente, alla


quantizzazione vettoriale dello spazio di input e lo spazio di
input diventa una collezione di poliedri (tassellazione di
Voronoi).

15
Illustrazione 8: Tassellazione di Voronoi

Da quanto visto prima, una volta fissati i codevectors (k)


possiamo ottenere codebook differenti; il codebook migliore è
quello che minimizza l'errore di quantizzazione:

k
1
E= ∑ ∑
2 | D | c = 1 S ∈ Vc
||S − µ c ||2

dove |D| è la cardinalità di D.

Algoritmo K-means (il ciclo di Lloyd)

L'algoritmo già visto prima, e qui riformulato, è dovuto a Lloyd


nel 1957 e consiste in quattro passi iterativi:
1. Inizializziamo il codebook W={μ1,μ2,...,μk} con k vettori
scelti dall'insieme dati D
2. Calcoliamo per ogni codevector μi ε W l'insieme di Voronoi
del codevector

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.

Principali problematiche tecniche degli algoritmi precedenti


I problemi che nascono con tecniche come quelle precedenti e di
tante altre simili sono:
1. le performance che richiedono:
• cluster hardware e linguaggi di programmazione che
consentano parallelismo e velocità di esecuzione
• database in cluster ed affidabili
• attenzione nella progettazione e nell'implementazione
privilegiando tecniche che migliorino le prestazioni
2. scarsa scalabilità del sistema di analisi non appena aumenta
largamente il numero di oggetti del data set di analisi ed il
numero di dimensioni in gioco del dominio del problema (es:
centinaia di migliaia di dimensioni).
In sostanza l'efficacia degenera col numero di dimensioni ed in
base alla quantità di rumore (o errore). L'efficienza degenera al
crescere del numero di punti da elaborare e del numero di
dimensioni.
Il punto 2 richiede un'attenta valutazione del proprio dominio del
problema, con un'accurata scelta dei prodotti di base da
utilizzare (tipicamente del prodotto a supporto della propria
base dati), oltre ad una precisa progettazione di ogni dettaglio.
Uno dei difetti delle precedenti tecniche, inerenti il punto 2, ma
che il clustering grid-based evita, è che se la tecnica
utilizzata porta al relazionamento col punto vicino o con il più
vicino dei punti, allora questa tecnica tenderà a lavorare male in
un dataset ad alte dimensioni. Difatti in un dataset con molte
dimensioni, è improbabile che i punti sono più vicini gli uni agli
altri rispetto alla distanza media tra i punti, perché c'è spazio
scarsamente riempito. Come risultato, appena aumenta la
dimensionalità, la differenza tra la distanza dal più vicino e dal
più lontano di un punto va a zero (vedi [3]).

Clustering Grid-based e il miglioramento di OptiGrid


I metodi grid-based sono ragionevolmente veloci, capaci di
scoprire cluster di qualsiasi forma.

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.

OptiGrid costruisce un "grid partitioning" dei dati, usando degli


iperpiani di partizionamento e usando un "contratto progettuale"
tra le differenti partizioni dei dati.

OptiGrid cerca degli iperpiani che soddisfano due requisiti:


1. la separazione degli iperpiani deve effettuare un taglio
attraverso le regioni a bassa densità rispetto alla regioni
circostanti;
2. la separazione degli iperpiani dovrebbe mettere in cluster i
singole partizioni diverse.

Il primo requisito mira a prevenire il problema definito


"oversplitting", cioè un piano di taglio non deve dividere mai un
cluster. Facendo il taglio in regioni a bassa densità non si
taglia uno stesso cluster in più parti, cioè non si dividono i
dati di "ugual significato e peso", che dovrebbero stare in uno
stesso cluster.

Il secondo requisito è il tentativo di far sì che il piano di


taglio contribuisca a trovare cluster separati.

OptiGrid costruisce ricorsivamente una griglia multidimensionale


con il partizionamento dei dati, utilizzando un taglio a
iperpiani, ciascuno dei quali è ortogonale ad almeno una
proiezione. Ad ogni step la generazione degli iperpiani candidati
è controllata da due parametri di soglia:
1. il livello del rumore (noise level)

2. la massima densità di splitting

La tecnica implementativa proposta dagli autori considera che gli


iperpiani di partitioning sono proiezioni parallele all'asse e
dimostrano che l'errore diminuisce all'aumentare delle dimensioni
(vedi [3]).

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.

Algoritmo O-Cluster (Ortoghonal Partitioning Clustering)


O-Cluster, è nato in ambito del database Oracle, già dal 2002 in
Oracle 9i e presente come pacchetto PL/SQL. Sfrutta l'idea di base
di OptiGrid e cerca di introdurre miglioramenti tale da eliminare
i suoi due difetti principali.
Due sono i punti di miglioramento introdotti in O-Cluster:
• l'uso di test statistici per validare o meno la scelta del
piano di taglio, rendendo automatica tale operazione e
garantendo una buona qualità del piano di taglio;
• l'uso di un buffer contenente un campione random dei dataset;
il campionamento permette di avere ulteriori informazioni
disponibili per le partizioni e la scelta del piano di
taglio. Per alcuni tipi di partizioni, come vedremo, è
possibile rimuovere dal buffer i dati dei dataset associati
per liberare memoria e analizzare il resto dei dati.

O-Cluster lavora ricorsivamente: prima analizza i possibili punti


di splitting (o di taglio) rispetto a tutte le dimensioni; poi
individua il miglior splitting e divide i dati in due partizioni.

A questo punto O-Cluster cerca nuovi splitting da fare nelle due


partizioni iniziali individuate. In pratica O-Cluster crea un
albero gerarchico che tassella lo spazio di input in rettangoli.

O-Cluster ha complessità O(N*d) dove N è la quantità di dati nel


buffer e d sono le dimensioni.L'algoritmo che usa O-Cluster si può
riassumere come nel diagramma a blocchi successivo; i punti
fondamentali dello schema a blocchi sono stati numerati e ad essi
faremo riferimento nel seguito:

Step 1 Load Buffer: se l'intero daset non entra in memoria si


mettono nel buffer solo dei campioni selezionati randomicamente
(campionamento).
Step 2 Computa gli istogrammi: l'obiettivo è di determinare un

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.

Step 3 Cerca il 'best splitting': per ogni istogramma O-Cluster


cerca il miglior piano di taglio se esiste; difatti un buon piano
di taglio deve passare attraverso un punto di bassa densità
dell'istogramma (un avvallamento) e l'avvallamento dovrebbe essere
supportato, su entrambi i lati, da punti di alta densità (picchi).
O-Cluster cerca proprio un avvallamento ed un picco, ad entrambi i
lati, tale che la differenza tra picchi e gli avvallamenti sia
significativo da un punto di vista statistico. Il test

20
significativo statistico che usa O-Cluster è il test χ2:

2(observed − exp ected )2


χ2= ≥ χ α2 ,1
exp ected

Nella formula il "valore osservato" è il conteggio degli


istogrammi nell'avvallamento, mentre il "valore atteso" è il
conteggio medio degli avvallamenti e dei picchi.
Alcune implementazioni di O-Cluster risalenti al 2002 usavano già
i seguenti valori: χ2=95% e χ20.005,1=3,843 dando buoni risultati.

Step 4 Marca 'ambigous' e 'frozen partitions':


Se non esiste un buon splitting delle partizioni, O-Cluster cambia
il test χ2, abbassando ad esempio χ2=90% e χ20.1,1=2,706.
Se su molti dati si riscontra questo tipo di situazione, ovvero
che abbassando i valori si rientra nel test, allora la partizione
corrente è marcata 'ambigua'.
Se non vengono trovati splitting, anche abbassando più volte i
valori, e il test non è mai superato (partizioni ambigue) allora
la partizione è marcata 'frozen' e i punti di essa vengono
eliminati dal buffer.

Step 5 Splitting delle partizioni attive: Se è stato individuato


uno splitting vengono create due partizioni e il procedimento
riparte dallo step 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.

Ulteriori caratteristiche di differenza tra O-Cluster e Optigrid


Opti-grid ha due parametri di soglia come visto precedentemente,
che gli servono per individuare un buon piano di taglio:
1. il livello del rumore
2. la massima densità di splitting

In OptiGrid i picchi degli istogrammi devono essere al di sopra


del livello del rumore, mentre gli istogrammi dell'avvallemento
devono avere densità più bassa della massima densità di splitting
e normalmente la massima densità di splitting dovrebbe essere
settata al di sopra della soglia del livello del rumore. La
ricerca di tali valori ottimali è una fase critica da un punto di
vista prestazionale per OptiGrid.

O-Cluster col test χ2 elimina la necessità dei poarametri di soglia


rendendo più facile e meno critica la ricerca del taglio ottimale.
Successivi studi su O-Cluster hanno portato anche alla
introduzione del parametro sensitività ρ. Questo parametro ha
quasi lo stesso significato del livello di rumore di OptiGrid. Lo
scopo del parametro, difatti, è di eliminare arbitrari piccoli
cluster, settando un conteggio minimo dei picchi degli istogrammi
di O-Cluster.
Sebbene OptiGrid tenta di far il miglior splitting possibile, può
arrivare all'oversplitting. Per come è stato pensato inizialmente,
OptiGrid tende a partizionare contemporaneamente con diversi piano
di taglio. I cluster ottenuti con pochi punti vanno rimossi
successivamente.
OptiGrid lavora, inoltre, con istogrammi che sotto-arrotondano la
densità di distribuzione, per cui sia questo fatto che il
meccanismo delle soglie può portare a tagliare attraverso
clusters. Questo fatto anche se non è un vero problema per
OptiGrid, richiede diverse elaborazioni. Lo splitting, invece, di

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.

O-Cluster Data Mining Oracle 11g


Come precedentemente visto O-Cluster crea un modello di clustering
gerarchico e grid-based, con partizioni parallele agli assi
(quindi ortogonali) rispetto allo spazio di input. Inoltre
ripetutamente riesegue il lavoro fino a che la struttura
gerarchica ottenuta riesce a tassellare tutto lo spazio di input.
I cluster sono descritti da intervalli lungo gli assi degli
attributi e corrispondenti ai centroidi e agli istogrammi.
L'algoritmo k-means tassella lo spazio di input in n cluster (con
n deciso dall'utente) anche quando il cluster non esiste, mentre
ciò è evitato da O-Cluster.
O-Cluster effettua piani di taglio nelle aree a bassa densità e
si basa sul riconoscimento di picchi e valli negli istogrammi;
per cui se un'area ha una densità uniforme, O-Cluster non la
partiziona.

I cluster scoperti da O-Cluster sono usati (vedi [4]) per


generare un modello bayesiano di probabilità che viene poi
utilizzato durante l'assegnazione di punteggi (modello a
pagamento) ai cluster.

Il modello di probabilità generato è un modello misto in cui sono


rappresentati i componenti con un prodotto di distribuzioni
normali indipendenti per gli attributi numerici e distribuzioni
multinomiale per gli attributi categorici.

Esso utilizza una forma particolare di binning equi-width che


calcola il numero di cassonetti per attributo automaticamente.

Le colonne numeriche con tutti i valori null o un singolo valore


vengono rimossi.

Va studiato l' "Oracle Data Mining Application Developer's Guide"


per informazioni sulle colonne nidificati e dati mancanti.

O-Cluster non necessariamente utilizza tutti i dati di input


quando costruisce un modello. Esso legge i dati in lotti (la

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.

Poiché O-Cluster può smettere di costruire il modello prima di


leggere tutti i dati, è altamente raccomandato che i dati siano
randomizzati.

E' raccomandato che gli attributi binari siano dichiarati come


categorici.

L'utilizzo di trasformazione equi-width binning Oracle Data


Mining, con stima automatica del numero di cassonetti è altamente
raccomandato.

La presenza di valori anomali possono influenzare notevolmente la


algoritmi di clustering.

Utilizzare un ritaglio di trasformazione prima del binning o di


una normalizzazione. Valori anomali con binning equi-larghezza
possono impedire O-Cluster di rilevare cluster. Come risultato,
l'intera popolazione sembra si inserisce in un singolo cluster.

Social Network Analysis e il clustering


Nella SNA, il clustering è un punto teorico di base per poter
descrivere le reti sottostanti che si analizzano. In questi casi
la velocità di elaborazione ha una grande importanza.
Esempi didattici sono alcuni tools disponibili anche per Windows
come "Cluster" associato ad un Java Tree Viewer [5], che fornisce
una visione didattica delle tecniche di clustering, ad esempio
quelle gerarchiche, k-means, Self-Organizing Maps di Tamayo,
Principal Component Analysis; mentre UCINET [6] è adatto allo
studio delle Social Network Analysis.

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)

[4] O-Cluster Data Mining – Oracle 11g


http://www.comp.dit.ie/btierney/oracle11gdoc/datamine.111/b28129/a
lgo_oc.htm
http://www.oracle.com/technetwork/database/options/odm/index.html

24
Tools free per studio didattico su Windows
per didattica sul Clustering:
[5]Cluster e Java Tree Viewer

per una didattica sul Social Network Analysis:


[6]UCINET
[7]PAJEK

-°-

Il presente documento è stato realizzato con OpenOffice.org

-°-

25