Tecniche di Clustering
per dati con attributi di
tipo categorico.
_____
Seminario per il corso Data Mining e scoperta della conoscenza.
_____
Prof.: Giuseppe Manco
Giovanni Ponti
Ing.: Francesco Folino
Matr.: 87662
Sommario





Introduzione.
Algoritmi di clustering per attributi categorici.
Confronti e prestazioni.
Considerazioni personali.
Conclusione.
Cos’è il Clustering


Il Clustering è uno dei problemi principali del
data mining.
In linea generale, dato un dataset, il clustering si
propone di individuare delle regioni distinte
nelle quali raggruppare dati in modo che i dati
all’interno di una stessa regione siano “simili” tra
loro, mentre quelli in regioni differenti siano
“dissimili” tra loro.
Cos’è il Clustering
…più formalmente:
Sia D un dataset con attributi A1 , … , An che prendono valori dai domini D1 ,
… , Dn . Una tupla t  D è un vettore (r1 , … , r n) : ri  Di , i = 1,…,n .
Sia inoltre d : D × D → + una misura della distanza (dissimilarità) tra vettori.
Fare Clustering indica il procedimento che trova una partizione (C1 , … , Ck) di
D tale che
x  Ci : d(x , Mi) ≤ d(x , Mj) ,  i , j  {1,…,k} , j ≠ i
dove Mi è il vettore rappresentativo del cluster Ci .
Cos’è il Clustering
Esempio di clustering basato su densità :
Dataset D
++
+ +++
+ ++++
+
+
+
+++ +
+++
+
+++
+
+
+ ++ +
++++
+++
+
Clustering C {C1 , C2 , C3 }
Tipi di attributi
Poiché il clustering si basa sul concetto di “vicinanza” e/o “similarità” per
classificare ogni tupla di un dataset nell’apposito cluster, è importante
distinguere tra due tipi di attributi che si possono incontrare:
Attributi
Numerico



Criterio di ordinamento già
esplicato dall’attributo stesso.
Proprietà geometriche note e
ben definite.
Distanza tra attributi con
metodi classici (Euclidea,
Manhattan,…)
Categorico



Criterio di ordinamento non
definibile a priori.
Proprietà geometriche
sconosciute e soggettive.
Distanza tra attributi con
metodi nuovi e non standard.
Tipi di attributi - Esempio
Attributi Numerici
Dataset Autovetture
Cilindrata
CV
Accelerazio
ne 0-100 (s)
Lunghezza
(m)
Larghezza
(m)
Altezza
(m)
Passo
(m)
Prezzo
(€)
1598
110
12
4
1.6
1.7
2
20’000
1167
70
14
3.7
1.5
1.65
1.8
16’000
998
50
15
3.5
1.5
1.6
1.7
12’000
1990
140
9.4
4.2
1.8
1.7
2.1
24’000
Dataset Caratteri somatici
Attributi Categorici
Colore
Capelli
Colore
Occhi
Carnagione
Forma del
viso
Castano
Nero
Nera
Ovale
Biondo
Azzurro
Chiara
Tonda
Nero
Verde
Scura
Piatta
Rosso
Castano
Chiara
Allungata
Spesso in un dataset si
possono trovare attributi
di entrambi i tipi!!!
Contesti in cui troviamo attributi di
tipo categorico
Gli attributi categorici possono essere presenti nella maggior parte
dei dataset e in particolare laddove risulti necessario utilizzare
stringhe per rappresentare valori di uno o più attributi.
Comunque, un’analisi più particolare degli attributi categorici viene
effettuata nei seguenti contesti:


Market basket databases (transactional data).
Management Analysis.
Problemi per attributi categorici
Vista la particolare natura degli attributi di tipo categorico, è
importante definire dei nuovi criteri per classificare correttamente
tuple che presentano attributi di questo tipo. Infatti, i criteri utilizzati
classificare attributi numerici non possono essere applicati agli
attributi categorici. Quindi bisogna:


Definire opportuni criteri di ordinamento nei domini
degli attributi.
Definire nuovi criteri di “vicinanza” e/o di “similarità”
tra i valori.
Algoritmi di clustering per
attributi categorici

Estensioni del k-means










k-modes
k-prototypes
ROCK
CLOPE
OPOSSUM
STIRR
CACTUS
CLICK
COOLCAT
LIMBO
k-modes



Il più banale algoritmo di clustering per attributi
categorici.
È un’estensione del ben noto algoritmo di
clustering k-means.
Definisce una semplice misura per stabilire la
dissimilarità tra attributi categorici.
k-modes
Formulazione generale del
Problema:
X = { X1 ,…, Xn } è il dataset composto da n oggetti.
Xi = [ x1 ,…, xm ] è un oggetto generico del dataset su m attributi tutti con valori
categorici.
W è una matrice di partizionamento n × k, dove l’elemento wi,l vale 1 se l’oggetto Xi
appartiene al Cluster l, 0 altrimenti.
Q = { Q1 ,…, Qk } è l’insieme degli oggetti rappresentativi (mode) per i k cluster. Ogni
Ql è un vettore [ ql,1 ,…, ql,m ].
d( Xi , Ql ) è una formula di calcolo della distanza tra due oggetti.
k-modes - distanza

k-means utilizza per il calcolo
della distanza la distanza
Euclidea quadratica.
m
d ( X , Y )   ( xi  yi )
i 1
2

k-modes utilizza come
distanza tra due oggetti il
numero di mismatches tra gli
attributi dei due oggetti.
k-modes - moda

k-modes utilizza la moda come vettore rappresentativo di un set di
oggetti. La moda è un vettore che minimizza la somma delle
distanze di tutti gli oggetti di un cluster dalla moda stassa:
nl
Minimizzare
D( X l , Ql )   d ( X l ,i , Ql )
i 1
Dato un insieme Xl , la moda di
quell’insieme viene calcolata
calcolando la massima frequenza
relativa per ogni attributo:
f r ( A j  cl , j | X l ) 
ncl ,k
n
Xl = { Xl,1 ,…, Xl,n } è l’insieme
degli oggetti nel cluster l.
Teorema :
La funzione D( Xl , Ql ) è minimizzata se e solo se
f r ( Aj  q j | X l )  f r ( Aj  cl , j | X l )
j  1,..., m
q j  cl , j
k-modes - algoritmo
1.
2.
3.
4.
Scegliere i primi k oggetti iniziali come mode.
Scandire il dataset e assegnare ogni oggetto al cluster individuato dalla moda a
lui più vicina e aggiornare la moda del cluster dopo ogni assegnamento.
Dopo aver assegnato ogni oggetto al suo cluster, ritestare la dissimilarità degli
oggetti con le mode correnti. Se viene trovato un oggetto che risulti più vicino
ad una moda di un cluster diverso dal suo, ricollocare l’oggetto nel nuovo
cluster ed aggiornare le mode di entrambi i cluster, altrimenti STOP.
Ripetere il passo 3 fintanto che nessun oggetto ha cambiato cluster dopo una
scansione completa degli oggetti del dataset.
Complessità : O ( Tkn ) , come k-means
L’algoritmo converge e trova la soluzione ottima in dipendenza dalla scelta dei primi k oggetti
iniziali.
Variante: Calcolare le frequenze di tutte le categorie di tutti gli attributi e memorizzarle in
array in ordine decrescente sulla base delle frequenze. Assegnare così le prime k
mode iniziali alle prime k categorie più frequenti. Procedere poi come l’argoritmo
standard.
k-modes – analisi dei risultati




Dataset : Soybean disease dataset.
47 istanze, ognuna con 35 attributi categorici.
Ogni istanza rientra in una di quattro catagorie di
malattie. In questo modo si ha che tre categorie di
malattie hanno ognuna 10 istanze, mentre la quarta ne
ha 17.
Per analizzare l’influenza dell’ordine delle istanze sono
stati creati 100 dataset test ordinando in maniera
random le istanze per ottenere diverse mode iniziali per
il primo metodo di selezione.
k-modes – analisi dei risultati
Misclassification matrix - Dataset 1
Classi di
malattie
Misclassification matrix - Dataset 9
Tuple mal clusterizzate
k-modes – analisi dei risultati
Risultati dei 200 clustering
4
Accuratezza
del clustering :
Errore del
clustering :
r
a
i 1
i
n
e 1  r
Costo per ottenere i clustering
Relazione tra il numero di classi nelle mode iniziali
e il costo per ottenere i clustering
k-modes – scalabilità

Health insurance database (500000 records)
Numero di tuple fisso (500000)
Numero di clustering fisso (100)
Tendenza di crescita lineare
k-prototypes



k-modes può essere usato solo se tutti gli attributi
hanno valori di tipo categorico.
Molto spesso però troviamo nei dataset reali
presenza di attributi categorici e numerici insieme.
k-prototypes combina insieme k-means e k-modes
in un unico algoritmo per clusterizzare oggetti con
attributi di diverso tipo.
k-prototypes
Un oggetto Xi del dataset è descritto da [ A1 ,…, Ap , Ap+1 ,…, Am ] attributi, dove i
primi p attributi sono di tipo numerico, mentre i restanti m-p sono di tipo categorico.
La distanza tra due oggetti di questo tipo viene calcolata secondo la seguente formula:
Distanza
Euclidea
Mismatch per
attributi categorici
γ è un peso per indicare quale termine
deve pesare di più nel calcolo della
distanza.
Il Problema Generale diventa:
k-prototypes – analisi dei risultati






Dataset: Credit approval dataset.
690 istanze, ognuna descritte da 6 attributi numerici e 9
attributi categorici. 24 istanze eliminate perché
contenenti attributi numerici nulli (l’algoritmo non
funziona in queste condizioni).
Attributi numerici normalizzati nell’intervallo [0 , 1].
Analisi al variare di γ.
Clustering in 2 classi.
Per analizzare l’influenza dell’ordine delle istanze sono
stati creati 100 dataset test ordinando in maniera
random le istanze per ottenere diverse mode iniziali per
il primo metodo di selezione.
k-prototypes – analisi dei risultati
Accuratezza dei clustering
ottenuti al variare di γ
I Metodo
Accuratezza dei clustering
ottenuti al variare di γ
II Metodo
Considerazione:
L’accuratezza rimane pressoché
invariata per γ>1.3 . Ciò vuol
dire che i gli attributi categorici
dominano nel clustering.
k-prototypes – scalabilità

Motor insurance database (500000 records)
Numero di tuple fisso (500000)
Numero di clustering fisso (100)
Tendenza di crescita lineare
k-prototypes – scalabilità
Convergenza
ROCK
(RObust Clustering using linK)



Algoritmo gerarchico di clustering per dati di
tipo transazionale (market basket databases).
Utilizza i link per clusterizzare e non il concetto
di distanza classico.
Utilizza il concetto di vicinanza (neighbors) tra
coppie di punti per determinare il numero di link
tra due punti.
ROCK - neighbors


I punti neighbors ad un altro punto sono quelli che si
possono considerare “simili” a quel punto.
Data una funzione di similarità normalizzata
nell’intervallo [0 , 1] ed un valore di soglia θ, due punti pi
e pj si definiscono neighbors se:
sim(pi , pj ) ≥ θ
La funzione di similarità scelta
nello specifico è quella di
Jaccard che calcola la similarità
tra due transazioni
sim (T1 , T2 ) 
Esempio
T1 = { 1 , 3 , 4 , 7 }
T2 = { 1 , 2 , 4 , 7 , 8 }
T1  T2
T1  T2
sim (T1 , T2 ) 
3 1
  0.5
6 2
ROCK - links



link( pi , pj ) definisce il numero di “common neighbors” tra i punti pi e
pj .
Più questo valore è alto, maggiore è la probabilità che questi due punti
appartengano allo stesso cluster.
Mentre il solo concetto di similarità fa un’analisi locale al problema,
l’approccio basato sui link fornisce delle informazioni globali in quanto
cattura l’informazione sui punti vicini ad ogni coppia di punti.
Esempio: θ = 0.5


{1,2,6} e {1,2,7} hanno 5 links
{1,2,6} e {1,2,3} hanno 3 links
C1
C2
ROCK – Funzione di valutazione
Massimizzare
f ( ) 
1
1
Dividendo per il numero totale di link atteso tra coppie di punti del cluster Ci si riesce a
prevenire il fatto che coppie di punti con basso numero di link appartengano allo stesso
cluster perché assegnarli allo stesso cluster farebbe comunque incrementare il numero di
link per quel cluster, ma la scelta sarebbe errata.
Misura della bontà della fusione di due cluster :
Numero atteso di cross-links tra i due cluster
ROCK - Algoritmo
Clustering
Complessità :
 Temporale :
O(n2+nmmma+n2logn)

Spaziale :
O(min{n2,nmmma})
mm = numero medio di link per
punto
ma = numero massimo di link
per punto
ROCK - Prestazioni

Mushroom dataset.

8124 tuple, 4208 commestibili e 3916 velenosi.
θ = 0.8



Algoritmo tradizionale:
 Cluster non puri.
 Cluster di
dimensioni
uniformi.
ROCK:
 Cluster puri, ben
distinti.
 Cluster ad alta
varianza tra loro e
di dimensione varia
CLOPE
(Clustering with LOPE)



Algoritmo di clustering per dati transazionali.
Particolarmente efficiente in presenza di database grandi e ad alta
dimensionalità.
Basato su istogrammi e sull’incremento del rapporto
Altezza/Larghezza
Esempio : 5 transazioni {a,b} {a,b,c} {a,c,d} {d,e} {d,e,f}
D(C )  insieme di item in C
Clustering 1
S (C )   ti
ti C
Clustering 2
W (C )  D(C )
H (C )  S (C ) / W (C )
H/W=0.5
H/W=0.55
H/W=0.55 H/W=0.32
CLOPE – Funzione di valutazione


Per definire una funzione di valutazione valida per un clustering
C = {C1 , … , Ck }, soltanto l’altezza non porta a buoni risultati.
Infatti i due clustering {{abc},{def}} e {{abcdef}} hanno la
stessa altezza H=1.
Per evitare ciò si usa il concetto di gradiente di un cluster
G(C)=H(C)/W(C)=S(C)/W(C)2
Repulsione.
Valori grandi indicano
che le transazioni che
appartengono allo stesso
cluster hanno molti
items in comune.
Valori piccoli sono usati
per databases sparsi
Funzione di Valutazione
di un Clustering
CLOPE - algoritmo
Definizione del Problema:
Dato un database D e un valore per r, trovare un clustering C che massimizzi il profitto su C con
parametro r.
Complessità Temporale:
O( N × K × A)
A = Lunghezza media di una transazione.
N = numero di transazioni.
K = numero massimo di clusters.
CLOPE - prestazioni

Mushroom data set
k
purity   max tCi ( t  commestibile , t  velenoso )
i 1
• r = 2.6 → 27 clusters → p = 8092
(un solo cluster con records misti).
• r = 3.1 → 30 clusters → p = 8124
(clustering perfetto).
Paragoni con ROCK (θ=0.8):
• ROCK trova 21 clusters dei quali uno solo con records misti (purity=8092).
• CLOPE clusterizza un po’ peggio (27 clusters per gli stessi risultati di ROCK) ma ha un
costo computazionale lineare sia in tempo che in spazio (ROCK è quadratico), il che lo
rende particolarmente efficiente per databases grandi.
OPOSSUM
(Optimal Partitioning of Sparse
Similarities Using Metis)




Algoritmo di clustering per dati transazionali.
Particolarmente indicato per Market-basket
Analysis e per Managment Analysis.
Si basa sul partizionamento di un grafo pesato
orientato.
Adatto per databases ad alta dimensionalità dei
dati e ad alta sparsità.
OPOSSUM - Notazioni

L’input dell’algoritmo è una matrice prodotti-clienti d × n. Una colonna xj ddimensionale della matrice rappresenta i prodotti acquistati dal cliente j.
Clienti
xj
Prodotti
?
OPOSSUM estende la classica notazione
booleana per trattare gli item nelle transazioni
(presenza-assenza). La posizione xi,j indica il
volume del prodotto i nella transazione j.
Per volume non s’intende una semplice misura
della quantità di quel prodotto, ma il valore
monetario di quel prodotto in quella
transazione.
• Da questa matrice l’algoritmo genera il clustering assegnando ad ogni transazione
un’etichetta λj in modo che transazioni simili abbiano la stassa etichetta.
• Il criterio di similarità si basa su quello proposto da Jaccard ma riadattato per valori
reali. In questo modo si ottengono risultati simili alla distanza Euclidea.
OPOSSUM - criteri


OPOSSUM ottiene il clustering partizionando il grafo pesato orientato
che si ottiene dalla matrice di similarità.
Si propone di ottenere quanto più possibile clusters di uguale importanza
e di ugual misura. Per far ciò utilizza i seguenti criteri:
 Ugual numero di transazioni. Ogni cluster dovrebbe contenere un ugual
numero di transazioni n/k. Questo per dividere i consumatori in
gruppi di dimensione uguale (consumer segmentation). Si assegna ad
ogni transazione lo stesso peso wj=1.
 Ugual valore. Il valore totale di ogni cluster dovrebbe essere quanto più
uniforme a quello degli altri. Ogni cluster rappresenta quindi la kesima frazione del valore totale del database   x . Si assagna ad
ogni transazione xj un peso pari alla somma dei valori dei suoi
prodotti w   x
d
j
i 1
i, j
n
d
j 1
i 1
i, j
OPOSSUM
Partizionamento del grafo



Grafo G=<,>
  = nodi - transazioni (oggetti del dataset)
  = archi pesati w(a,b) = s( xa , xb ) .
Un set di archi che, rimuovendoli dal set iniziale, produce un
partizionamento di G=<,> in k sottografi disgiunti Gl=<l ,l > è
chiamato set separatore.
L’obiettivo dell’algoritmo è quello di trovare il set separatore minimo (con
somma dei pesi minima).


I pesi sui vertici vengono normalizzati in modo che la loro
somma sia 1.
Nel perseguire l’obiettivo set separatore minimo, bisogna
anche rispettare il vincolo che impone che ogni cluster sia
ben bilanciato (in base ai criteri definiti in precedenza).
OPOSSUM
Algoritmo di partizionamento




Trovare il partizionamento ottimale è un problema NP-Hard.
Sono stati proposti diversi algoritmi per questa categoria di problemi che
utilizzano euristiche per determinare la prossima scelta ottimale.
Minimum-cut problem:
 Costruire un partizionamento iniziale dei vertici in maniera random o in
base ad una specifica strategia risolutiva.
 L’algoritmo muove i vertici verificando se la dimensione del taglio cresce
o descresce se il vertice attuale viene spostato in un’altra partizione.
 La decisione di spostare un vertice viene fatta sulla base di dove si trova la
maggior parte dei suoi “vicini”: se questi si trovano nella sua partizione,
allora il vertice rimane dov’è, altrimenti viene spostato.
 In base a questa tecnica, la posizione di un vertice varia continuamente
con il variare della posizione dei suoi vicini, il che comporta più scansioni
del dataset prima di convergere all’ottimo locale.
Dopo varie analisi, si è deciso di usare in OPOSSUM la tecnica di
partizionamento Metis perché si è dimostrata abbastanza veloce e abbastanza
scalabile.
OPOSSUM – Clustering ottimale


L’obiettivo è trovare un clustering ad alta qualità e con un numero
di clusters il più basso possibile.
Bisogna massimizzare la similarità intra-cluster e minimizzare
quella inter-cluster.
Quality measure
Inoltre, per avere un alto valore di qualità Г del clustering e in contempo un basso numero di
clusters k, si utilizza una nuova funzione Л  [0 , 1] che è il prodotto della funzione Г per un
termine di penalità, che tiene conto del numero di tuple da clusterizzare e del numero di
clusters ottenuti.
Esempio :
OPOSSUM - Scalabilità




Il calcolo della matrice di similarità è la parte più costosa in OPOSSUM, molto più che
il partizionamento del grafo in quanto viene fatto il confronto di tutte le coppie di
oggetti, il che porta ad avere un costo computazionale O(n2· d).
In pratica, vista la sparsità, il calcolo della matrice si riduce ad O(n2).
Tuttavia, un opportuno pre-processing dei dati riesce a ridurre il tempo di esecuzione
dell’algoritmo:
 Pre-segmentazione dei clienti in aree geografiche o per classi sociali (coarse
clustering). La complessità diventa O(Σi ni2), dove ni è la dimensione del segmento i.
 Se non è possibile fare pre-segmentazione, si può ottimizzare l’algoritmo
prendendo solo alcuni campioni rappresentativi del dataset.
La complessità dell’algoritmo di partizionamento METIS è essenzialmente determinata
dal numero di archi del grafo, mentre scala linearmente nel numero dei clienti. Ci sono
due approcci per ridurre il numero di archi:
 Vengono inseriti solo quegli archi il cui peso supera una certa soglia
opportunamente stabilita.
 Si rimuovono alcuni archi di un nodo verso i suoi vicini mantenendo soltanto quelli
con peso più alto.
OPOSSUM - Risultati






Dataset di transazioni di 21672 clienti di una farmacia.
A scopo illustrativo, sono stati scelti in maniera random 2500
clienti, per un totale di 33814 transazioni in un tempo di tre
mesi.
È stata fatta una gerarchia dei prodotti e sono stati ottenuti
1236 categorie.
Sono stati ulteriormente eliminati prodotti il cui ricavato totale
fosse <25$.
Alla fine si è arrivati a 2466 clienti (n) e 762 prodotti (d).
Per analizzare i risultati di OPOSSUM è stato utilizzato
CLUSION, un tool di visualizzazione per cluster.
OPOSSUM - Risultati
Matrice di Sparsità
k-means binary Jaccard

OPOSSUM Sample Balanced
OPOSSUM Value Balanced

OPOSSUM:
Clusters più compatti
(separazione più netta tra
regioni fuori e dentro la
diagonale)
Clusters più bilanciati
OPOSSUM - Risultati
Valori della qualità Л del clustering
al variare del numero di clusters k
Valore di k in corrispondenza
del quale si verifica la il valore
massimo di Л
Punti di tre cluster trovati da OPOSSUM in una
rappresentazione 2D definita dai centroidi
Si nota la separazione netta dei tre
clusters secondo una seplici
funzioni di discriminazione lineari
STIRR
(Sieving Through Iterated Relational
Reinforcement)




Algoritmo di clustering che si basa sulla propagazione iterativa dei
pesi sui valori categorici in una tabella.
La tecnica facilita la definizione di una misura di similarità basata
sulla co-occorrenza dei valori nel dataset.
Questa tecnica mostra una chiara connessione tra le tabelle dei dati
categorici e i sistemi dinamici non lineari, definendo quindi una varietà
di algoritmi di clustering matematicamente chiari e senza parametri
arbitrari.
Inoltre, STIRR definisce una tecnica di partizionamento spettrale di
grafi molto efficace, che riduce complessità di questi problemi
dovuti alla loro intrinseca natura combinatoria.
STIRR - Introduzione



L’obiettivo dell’algoritmo è quello di produrre un sistema dinamico
a partire da una tabella di dati categorici. T è il dataset contenente
le tuple.
Una tabella è composta da un insieme di k colonne (attributi),
ognuna che prende valori da un proprio dominio.
Ogni possibile valore in ogni colonna viene rappresentato nel
grafo con un nodo. Una tupla sarà allora composta da un insieme di
nodi, uno per ogni colonna.
Grafo
Tabella
STIRR – Weight-Propagation


Una configurazione w è un assegnamento di un peso wv ad ogni nodo v
del grafo. I pesi verranno poi normalizzati in modo che la somma dei
pesi quadratici sia 1.
Un Sistema Dinamico è un’applicazione ripetuta di una funzione f su un
set di valori. Un Punto Fisso di un Sistema Dinamico è una
configurazione w per la quale vale che f(w)=w.
Esempio di f
Funzione Combinatoria.
Esempi di possibili scelte per :
• Prodotto (w1 ,…, wk)=w1· w2 · · · wk
• Somma (w1 ,…, wk)=w1+w2 +· · · + wk
• Combinazione lineare Sp(w1 ,…, wk)=(w1p+· · · + wkp)(1/p)
• Combinazione lineare limite S∞(w1 ,…, wk)=max (w1 ,…, wk)
È dimostrato che il sistema converge e arriva ad un punto fisso stabile o ad una soluzione che
cicla su un insieme finito di valori. Questa configurazione finale prende il nome di bacino.
STIRR – Bacini

Gli algoritmi che si basano su aspetti spettrali per partizionare grafi per problemi di
clustering fanno uso degli autovettori non-principali.

Per trovare gli autovettori di un sistema lineare Ax=λx il metodo mantiene un set di
autovettori ortonormali x<j> che ad ogni iterazione vengono prima aggiornati e poi
opportunamente ripristinati ad essere ortonormali.

In maniera analoga si può fare nel caso del grafo, mantenendo una serie di
configurazioni w<1>,…,w<m> e ad ogni passo fare le seguenti operazioni :
1.
Aggiornare w<i>←f(w<i>) ,  i=1,…,m
2.
Aggiornare il set di vettori {w<1>,…,w<m>} in modo che siano ortonormali.

L’iterazione su ogni w<i> avviene secondo quanto detto in precedenza. Questo porta ad
avere una serie di bacini (configurazioni stabili) e la prima di queste prende il nome di
Bacino Principale, mentre le altre si chiameranno Bacini non-principali.

I Bacini non-principali forniscono informazioni strutturali sui dati, proprio come gli
autovettori non principali danno informazioni per il partizionamento spettrale di grafi.

Più nello specifico, per mantenere il set di configurazioni {w<1>,…,w<m>} ortonormali
è necessario inserire pesi negativi nelle configurazioni. In ogni bacino, nodi con valori
positivi grandi e nodi con valori negativi grandi rappresentano regioni dense distinte
tra i dati, con poche connessioni tra loro.
STIRR – Scelte e modifiche
Scelta della configurazione iniziale


Semplicemente, si possono scegliere i pesi in maniera uniforme
(tutti uguali ad 1 e poi normalizzati).
Oppure, possiamo sceglierli in maniera random (valori [0,1] e poi
normalizzati).

Bisogna però tener conto del fatto che la funzione combinatoria è molto
sensibile alla scelta della configurazione iniziale.
Masking

Per aumentare o diminuire l’influenza di alcuni nodi, è possibile
applicare una serie di modifiche locali alla funzione f.


Ad esempio, possiamo comporre la funzione f con la funzione mask(v),
che setta a 0 il peso del nodo v alla fine di ogni iterazione.
In maniera simile, possiamo comporre f con augment(v,x), che incrementa il
peso del nodo v di una quantità x>0.
STIRR - Performance


L’algoritmo scala bene all’aumentare del volume dei dati.
Le prove fatte dimostrano che l’algoritmo ha un tempo di
esecuzione lineare nel numero delle tuple e molto vicino ad
essere lineare anche nel numero delle colonne.




Parametri dei test:
Random dataset
10 iterazioni
 = S∞
Calcolo di 4 bacini nonprincipali
STIRR – Quasi-random inputs



Un dataset quasi-random è un dataset di tuple generate in
maniera random nel quale vengono “impiantate” tuple o colonne
extra che hanno strutture ben definite.
Questo viene fatto per vedere la bontà dei risultati prodotti
dall’algoritmo nel clusterizzare le tuple con rumore attorno.
Questi tipi di inputs sono molto interessanti per testare gli
algoritmi in quanto sono problemi computazionalmente difficili
vista la loro natura combinatoria.




Tabella
3 colonne
1000 valori distinti
per colonna
5000 righe
 = S∞
Purezza : percentuale dei
valori inseriti che finiscono
nelle prime 10 posizioni
del bacino principale.
STIRR – Quasi-random inputs
Tuple extra – Purezza del I bacino
Colonne extra – Purezza I bacino
dopo 10 iterazioni
Tuple extra – Separazione dei due
cluster sul I bacino non-principale
STIRR – Operatore 


L’operatore max è il migliore e converge subito
L’operatore prodotto non converge!!!
STIRR – Real dataset

Bibliographic data
 7000 papers from database research e 30000 papers on theoretical computer science.
 4 colonne (Autore1 , Autore2 , Giornale/Conferenza , Anno).
  = S∞
 L’attributo numerico ANNO viene trattato come categorico. Ciò ci permette di confrontare la
bontà del risultato ottenuto con quello fornito dalle tecniche per attributi numerici
1° bacino non-principale
…e se si usa l’operatore Prodotto ?
 Non si arriva mai ad un punto
fisso di convergenza ben
definito.
 Il comportamento nella prima
fase è molto irregolare e
quindi poco informativo se si
fanno poche iterazioni
dell’algoritmo.
 Alcuni nodi possono attrarre
altri in virtù del loro peso alto
e quindi far perdere molti
bacini interessanti. Il problema
può essere risolto se si usa il
masking.
CACTUS
CAtegorical ClusTering Using Summaries



Algoritmo che lavora su un set ridotto del
dataset iniziale.
Questo set, scelto in maniera opportuna, è
sufficiente per trovare i clusters in maniera
chiara e ben definita.
In virtù di ciò, l’algoritmo risulta essere molto
veloce e scalabile e fornisce clustering validi
facendo soltanto due scansioni del dataset.
CACTUS - Definizioni



D = dataset di tuple t
A1 ,…, An = set di attributi categorici aventi dominio D1 ,…, Dn
Una tupla è formata da un valore per ogni dominio
Supporto tra ai e aj
Similarità tra a1 e a2 rispetto ad Aj
Indica il numero di valori di Aj che sono
strongly connected sia con a1 che con a2
Indica il numero di tuple che hanno come
attributi sia ai che aj (co-occorrenza).
Due valori ai e aj sono strongly connected se il
loro supporto è maggiore di una certa soglia.
Supporto atteso
sim*(B)
A
C
(b1,b2)
4
2
(b1,b3)
0
2
(b1,b4)
0
0
(b2,b3)
0
2
(b2,b4)
0
0
CACTUS - Algoritmo
1.
CACTUS si svolge in 3 fasi:
Summarization
1.
2.
2.
3.
Inter-attribute
Intra-attribute
Clustering
Validation
CACTUS
Inter-attribute Summaries
1.
2.
3.
Si inizializza un contatore a 0 per ogni coppia di valori di attributi diversi (ai , aj) Di×Dj , i≠j .
Si inizia la scansione del dataset D e per ogni tupla t  D viene incrementato il contatore per
la coppia (t.Ai , t.Aj).
Vengono posti a 0 i contatori delle coppie il cui valore non supera una certa soglia. In questo
modo vengono mantenute solo le coppie di attributi strongly connected. Quest’informazione può
essere mantenuta in memoria principale mediante una matrica sparsa perchè si dimostra che
solitamente questo numero è sempre <<|Di|×|Dj|.
IJ(A,B)
IJ(A,C)
IJ(B,C)
(a1,b1)
(a1,c1)
(b1,c1)
(a1,b2)
(a1,c2)
(b1,c2)
(a2,b1)
(a2,c1)
(b2,c1)
(a2,b2)
(a2,c2)
(b2,c2)
(a3,b1)
…
(b3,c1)
…
CACTUS
Intra-attribute Summaries
SELECT
T1.A , T2.A , count (*)
FROM
ij as T1(A,B) , ij as T2(A,B)
WHERE
T1.A≠T2.A and T1.B=T2.B
GROUP BY
T1.A , T2.A
HAVING
count>0
Join tra le coppie
strongly
connected
CACTUS - Clustering

La fase di determinazione dei clusters si svolge
in due parti:
Per primo si analizza ogni attributo per calcolare la
proiezione di ogni cluster su ogni attributo.
 Poi si procede determinando i cluster partendo dalle
proiezioni sui singoli attributi.

CACTUS – Cluster-Projections


{A1 ,…, An} = set di attributi
<C1 ,…, Cn> = C (un cluster sugli attributi)
L’idea di base e che la proiezione Ci sull’attributo Ai del
cluster C viene calcolata dall’intersezione di un set di
proiezioni su Ai degli altri attributi Aj in coppia con Ai , j≠i.
Cluster-projection B
(risultato finale)
Cluster-projection
di A su B
Cluster-projection
di C su B
CACTUS – Cluster-Projections


Calcolare tutte le proiezioni su Ai di tutti gli altri attributi in
coppia con Ai è un problema NP-completo.
Per ridurre la complessità computazionale introduciamo il
concetto di Distinguishing Set Si e di Distinguishing Number k .
Se una cluster-projection Ci sull’attributo Ai è più grande di k, allora ci
sarà un sottoinsieme ≤ k dei valori di Ci che non saranno mai contenuti
tutti insieme in un’altra cluster-projection su Ai
Un distinguishing set è una clique nel grafo di similarità Gij . Per
calcolarlo, troviamo tutte le clique di dimensione ≤ k in maniera
incrementale, ossia partendo prima dalle cliques di dimensione due, poi
da queste quelle di dimensione 3, fino a k .
CACTUS
Estensione dei distinguish sets

L’estensione di un distinguish set S  Di
aggiunge ad S tutti gli altri valori di Di che sono
strongly connected con i valori di Dj che sono anche
strongly connected con S.
S
Estensione di S
Valori di A strongly
connected con {b1,b2}
Valori di B strongly
connected con S
CACTUS
Estensione dei distinguish sets per
trovare il set di cluster-projection
Set di clusterprojections su Ai
rispetto ad Aj
Set di distinguish sets
di Ai rispetto ad Aj
Serve per evitare di generare più
volte qualche cluster-projection
Si calcola il sibling set Sij di Si
rispetto ad Aj e poi il sibling
set di CiS di Sij rispetto ad Ai
CACTUS
Intersezione delle Cluster-Projections
Si procede in maniera incrementale facendo l’intersezione dei set
di cluster-projections CSik su Ai di tutti gli altri :
START :
if ( i==1 ) → S = CSi2
else S = CSi1
INTERSECTION : k = 1
do
{
if ( k≠i ) → S = S  CSik , k++
}
per tutti i k attributi
CACTUS
Sintesi dei Clusters Candidati
In questa fase vengono calcolati i clusters candidati in maniera incrementale
a partire dalle cluster-projections sugli attributi.


Ci = set di cluster-projections su Ai , |Ci|=n
Ck= set di cluster candidati su A1,…,Ak . Quindi C1=C1 .
Calcolo di Ck+1 a partire dalla soluzione Ck :
• Set Ck+1= 
•  ck = c1 ,…,ck elemento di Ck si cerca di
incrementare ck con una cluster-projection su
Ak+1 . Se  i =1,…,k ci , ck+1 è un subcluster su (Ai , Ak+1) (si vede guardando
i(k+1)), allora si incrementa ck con ck+1
generando ck+1 = c1 ,…, ck , ck+1 .
Si aggiunge ck+1 a Ck+1 .
• Ciò viene fatto finché si genera un nuovo Cn o
quando Ck+1 è vuoto.
CACTUS - Validazione
Ultima fase dell’algoritmo.
Serve per escludere alcuni clusters candidati trovati
nella fase precedente che non hanno un sufficiente
supporto, il cui valore risulti inferiore ad una certa
soglia.
Ciò viene fatto nel seguente modo :



1.
2.
3.
Tutti i supporti dei cluster candati vengono settati a zero.
Per ogni tupla t del dataset D viene incrementato il
supporto del cluster candidato a cui t appartiene.
Alla fine della scansione vengono eliminati i cluster
candidati il cui supporto risulti inferiore al valore di soglia α
scelto.
CACTUS - Performance


Paragone tra CACTUS e STIRR
Synthetic datasets
Quasi-random data
 1 milione di tuple, 10 attributi e 100 valori per ogni
attributo.
 Tuple generate in maniera random.
 5% di tuple extra vengono inserite nei dati per
rafforzare il supporto di ogni cluster.
 α=3,k=2

CACTUS e STIRR
Synthetic Datasets
{0,…9} x {0,…9}
{10,…,19} x {10,…,19}
0
9
10
19
20
…
99
Entrambi CACTUS e STIRR identificano
due clusters in maniera esatta
CACTUS e STIRR
Synthetic Datasets
{0,…,9} x {0,…,9} x {0,…,9}
{10,…,19} x {10,…,19} x {10,…,19}
{0,…,9} x {10,…,19} x {10,…,19}
CACTUS identifica i 3
clusters correttamente
0
9
10
19
20
…
99
STIRR restituisce:
{0,…,9} x {0,…,19} x {0,…,9}
{10,…,19} x {0,…,19} x {10,…,19}
CACTUS - Scalabilità
Time vs. #Attributes
Time vs. #Tuples
5000
4500
4000
Time (in seconds)
2500
3500
Time (in seconds)
3000
2000
2500
2000
1500
1500
1000
500
1000
0
4
6
8
500
10
20
30
#Attributes
CACTUS
STIRR
40
50
Time vs. Domain Size
0
1
2
4
3
5
250
CACTUS
STIRR
CACTUS è più veloce di STIRR da 3 a 10
volte!!!
Inoltre, fornisce un clustering più preciso e
più descrittivo!!!
Time (in seconds)
#Tuples (in millions)
200
150
100
50
0
50
100
200
400
600
#Attribute Values
CACTUS
STIRR
800
1000
CLICK
(CLusterIng Categorical data via
maximal K-partite cliques)




Algoritmo di clustering per dataset con dati di tipo
categorico.
La sua tecnica si basa sul fatto di calcolare i clusters
basandosi su un metodo per trovare le k-cliques
massimali in un grafo.
Riesce a trovare sotto-cluster.
Scala meglio degli altri algoritmi nel caso di dataset ad
alta dimensionalità.
CLICK – k-partite graph
k-partite graph
Dataset D
Г(D)=<V,E>

Non tutti gli archi
vengono rappresentati,
ma soltanto quelli il cui
supporto risulta
maggiore di una certa
soglia α (tipo strongly
connected di CACTUS).
k-partite clique Sia Г(D)=<V,E> il grafo k-partite per il dataset D . C  V è una k-partite clique se
ogni coppia di vertici vi , vj  C , i≠j , è connessa da un arco (vi , vj)  E .
(massimale)
Se non esiste nessun’altra k-partite clique C’  C ,allora C è una clique massimale.
Teorema
Sia dato un dataset D e un k-intervallo C = C1 × …× Ck .
• Se C è un cluster sugli attributi {A1 ,…, Ak} , allora C è k-partite clique massimale in Г(D) .
• Se C è k-partite clique massimale in Г(D) e σ*(C)=1 , C è un cluster sugli attributi {A1 ,…, Ak}.
CLICK - Algoritmo


Come CACTUS, anche CLICK utilizza una rappresentazione compatta del
dataset per far sì che i dati da elaborare possano essere contenuti in memoria
principale.
L’algoritmo è il seguente :
Tre fasi principali:
 PreProcess : qui viene creato il grafo
k-partite Г(D) e i valori degli
attributi vengono ordinati per
ragioni di efficienza.
 DetectMaxCliques : da Г(D) vengono
calcolate tutte le k-partite cliques
massimali.
 PostProcess : viene verificato dai
clusters finali il supporto delle
cliques candidate con il dataset di
partenza.
CLICK - PreProcess


Il grafo k-partite Г(D) viene generato a partire dal dataset
D ed avrà come vertici solo i valori strongly connected.
Inoltre, verrà restituito un ordinamento R di questi valori
che si basa sulla connettività di ogni vertice η(vi) :
Vicini di un nodo
Cardinalità del dominio di vi
Questo ordinamento serve come euristica nella
scelta dei prossimi nodi da inserire nelle cliques
CLICK - DetectMaxCliques
L’algoritmo di formazione delle cliques si basa sul fatto che in ogni momento dell’elaborazione
vengono inseriti nella clique solo i vertici che sono strongly connected con tutti quelli già dentro
la clique. I prossimi nodi vengono scelti con connettività descrescente. L’algoritmo è ricorsivo e
cerca sempre di incrementare la clique corrente con altri valori.
È true se è stata trovata una clique di
dimensione desiderata e C contiene almeno
un valore per ogni attributo del dataset
Contiene i vertici già considerati
nella costruzione della clique
Contiene i vertici processati come
prossimi candidati ad entrare nella clique
Seleziona solo come prossimi candidati i
vetici che sono strongly connected con
l’ultimo vertice inserito nella clique
RD e RP sono usati per ridurre la ricerca e per
restringere ad ogni passo il numero di vertici da
analizzare come prossimi ad entrare nella clique.
CLICK - PostProcess


Con una singola scansione del dataset viene fatta la validazione
del set di cliques trovato calcolando per ogni clique il numero di
tuple di D che la supportano: se il valore è più basso di una certa
soglia, allora quella clique viene rimossa dal set.
Su questo set viene poi lanciato un algoritmo per fondere
insieme i cluster più frequenti in base ad una soglia.

Per ogni tupla di D viene calcolato il set delle cliques che la supportano
ottenendo il set degli itemset per ogni tupla.

Per questo set viene poi calcolato il set dei più frequenti itemset che
soddisfano un supporto minimo fissato, ottenendo così il set di cliques
più frequenti FD .
Questo set viene poi ordinato in ordine decrescente in base al proprio peso
di copertura ω(X) , dove X è un set di clique ids di FD .

CLICK – Merging Algorithm
CLICK
Paragone con ROCK


CLICK scala molto più di ROCK già per dataset con poche tuple.
CLICK continua ad essere molto efficiente anche per dataset con
numero di tuple nell’ordine dei milioni.
CLICK - Paragone con CACTUS
CLICK è sempre più veloce di
CACTUS, e la differenza è
ancora più evidente
all’aumentare della dimensione
del dominio degli attributi!
CLICK - Real dataset

Mushroom dataset.

8124 tuple, 4208 commestibili e 3916 velenosi.
22 attributi con 6-10 valori per attributo.





Questo porta a scegliere un basso valore di α = 0.4
CLICK ha trovato 256 clusters, che poi sono stati ridotti a 213
con il post-process step (minsup=0.5%).
Solo il 9% delle tuple non sono state classificate.
I clusters trovati hanno tutti valori purezza massima.
COOLCAT
(Entropy-based Algorithm)


COOLCAT è un algoritmo di clustering per
attributi categorici.
Utilizza il concetto di entropia al posto di quello
di distanza per determinare i clusters:


Clusters con punti “simili” hanno entropia più bassa
di quelli con punti dissimili.
L’entropia è l’euristica utilizzata da COOLCAT
per trovare i clusters, che si rivelano abbastanza
stabili al variare dei parametri dell’algoritmo.
COOLCAT - Entropia



X = variabile random.
S(X) = dominio di X.
p(x) = funzione di probabilità di X.
Entropia di X , E(X)
Entropia di un vettore a più variabili x^ = {X1 ,…, Xn} :
Sotto l’ipotesi di
indipendenza delle
variabili
COOLCAT
Formulazione del problema


D = dataset di N oggetti p^1 ,…, p^N
p^j = ( p1j ,…, pdj ) vettore d-dimensionale (d attributi )
PROBLEMA
Dato un numero di cluster k , separare gli oggetti in k gruppi
in modo da minimizzare l’entropia dell’intero sistema.
Entropia Attesa
del Sistema
Oggetti nel
cluster k
Entropia del
cluster k
COOLCAT - Algoritmo
Nella fase di inizializzazione, l’algoritmo sceglie prima un
sottoinsieme S di oggetti di D , |S|<< N e trova il clustering
di partenza su S.
1.
Inizializzazione
1.
2.
O(|S|2)
Trovare i k oggetti più dissimili tra loro, che
saranno quelli che massimizzano il valore di
entropia minimo tra le coppie.
Questi oggetti saranno assegnati ognuno ad un
cluster diverso, formando il set di clusters di
partenza.
COOLCAT - Algoritmo
2.
Passo Incrementale
1.
Si procede analizzando il resto degli oggetti del dataset in più
batch.
2.
Ogni oggetto viene assegnato ad un cluster in modo che
l’entropia dell’intero sistema sia minima.
3.
È importante l’ordine di processamento degli oggetti perché
non è detto che un assagnamento ottimo in un punto
continui a rimanere tale man mano che altri oggetti vengono
processati. Per risolvere questo problema si sceglie per ogni
batch una frazione m di oggetti da rimuovere
dall’assegnamento e da clusterizzare nuovamente.
 Questi oggetti possono essere scelti in maniera random o
meglio ordinandoli per probabilità di fitting crescente e
selezionando i primi m oggetti.
COOLCAT – Test di scalabilità



Synthetic dataset
Buffer size = 300
m = 20%
Lineare nel numero delle tuple
COOLCAT
Prestazioni e confronti con ROCK



Mushroom dataset.
Buffer size = 200.
ROCK θ = 0.8
Category Utility Function.
Funzione utilizzata per determinare la bontà di un clustering. Si propone di massimizzare sia
la probabilità che due oggetti di uno stesso cluster hanno valori degli attributi in comune e
sia la probabilità che oggetti di cluster diversi hanno valori degli attributi diversi.
LIMBO
(scaLable InforMation BOttlenck clustering)



Un buon clustering si basa sul fatto che sia il più
possibile informativo sulle tuple che sono al suo
interno, con la possibilità di predire con alta
probabilità i valori di ognuna di esse.
Nel fare clustering si perde parte dell’informazione
che i dati contengono interinsecamente.
LIMBO si propone di clusterizzare i dati in modo
che la quantità d’informazione persa sia più bassa
possibile o, in maniera equivalente, minimizzare
l’incertezza.
LIMBO - Notazioni


T = variabile random discreta che prende valori dal dominio T.
p(t) = funzione di distribuzione di T .
Entropia della variabile T. Misura in grado di
incertezza che si ha sulla variabile.
Entropia condizionata di A rispetto a T.
Misura il grado di incertezza che si ha su A
avendo noto il valore di T.
Mutua Informazione tra A e T. Misura la
quantità di informazione che le due
variabili forniscono l’una per l’altra. È
l’entropia di una varabile privata della
conoscenza che l’altra variabile fornisce
sulla prima.
LIMBO - Rappresentazione





Dataset T composto da n tuple di m attributi A1,…,Am .
Ogni attributo ha dominio Ai={Ai.v1,…,Ai.vki}
Una tupla prende esattamente un valore dal set Ai per
ogni attributo Ai .
Sia A = A1 … Am il set di tutti i possibili valori degli
attributi e d = k1+…+km la dimensione di A.
La rappresentazione di T sarà una matrice M n×d , e
l’elemento M[i][j] sarà 1 se la tupla i contiene il valore j,
0 altrimenti. Per quanto detto prima, ogni vettore che
rappresenta una tupla avrà esattamente m valori 1.
LIMBO - Rappresentazione



T e A sono due variabili random sui valori T e A .
p(t) = 1/n .
La matrice M viene normalizzata in modo che ogni riga contenga la funzione
di distribuzione della probabilità condizionata p(A|t) . Poichè ogni tupla
contiene esattamente m valori, p(a|t) sarà 1/m se M[t][a]=1, 0 altrimenti
Movie database
Movie Table Normalizzata
LIMBO - DCF



LIMBO propone una versione più efficiente dell’algoritmo
Agglomerative Information Bottleneck, che non utilizza l’intero dataset
per calcolare i clusters ma alcune statistiche rilevanti sulle tuple.
Per fare questo summary del dataset si usa una struttura particolare,
Distributional Cluster Features (DCF).
Introduciamo una terza variabile random C che rappresenta i clusters.
Numero di tuple in c
DCF relativo al cluster c
Probabilità condizionata
degli attributi dato il cluster
Nel caso di cluster con solo una tupla, il calcolo del DCF è banale. Per
cluster più grandi, il DCF è calcolato ricorsivamente utilizzando il
meccanismo della fusione secondo la seguente formula:
LIMBO – Fusione tra clusters
Il criterio utilizzato da LIMBO per definire la bontà della fusione
tra due cluster c1 e c2 è quello della information loss
 I(c1 , c2) = I(A ; C) – I(A ; C’)
, dove C e C’ indica il clustering prima e dopo la fusione di c1 e c2 .
 Information loss è indipendente dal clustering, ma dipende solo
da c1 e c2 .
 La distanza d(c1 , c2) è data dalla seguente formula:

Divergenza di Jensen-Shannon.
Indica il degrado che si ottiene assumendo come distribuzione
valida la seconda quando invece la prima è giusta e viceversa
LIMBO – Albero di DCF

I DCF sono mantenuti in un’apposita struttura ad albero, caratterizzata da due
parametri:


Branching Factor B : indica il massimo numero di figli per un nodo.
Threshold () : upper bound della distanza tra un cluster foglia e una tupla.



Ogni nodo foglia mantiene un
clustering delle tuple.
Ogni nodo intermedio mantiene
un DCF che è dato dalla
fusione dei DCFs dei suoi figli.
L’albero è costruito in maniera
dinamica con il processamento
delle tuple: quando una tupla
viene processata viene inserita
nella foglia opportuna e tutti i
DCFs vengono aggiornati.
LIMBO - Algoritmo
L’algoritmo LIMBO consta di tre fasi:
1. Viene costruito l’albero di DCF per avere un
summary sui dati.
2. Vengono clusterizzate le foglie dell’albero di
DCF per ottenere il numero di clusters
desiderato.
3. Vengono esaminate le tuple del dataset e ad
ognuna di esse viene assegnata un’etichetta che
identifica il cluster al quale appartiene.
LIMBO
Costruzione dell’albero DCF
Le tuple del dataset vengono processate una per volta.
La tupla t viene convertita in DCF(t ).
Si parte dalla radice fino ad un nodo foglia:
1.
2.
3.
1.
2.
Quando ci si trova in un nodo intermedio si trova il DCF(c) più vicino a
DCF(t) e si segue il cammino verso il suo figlio.
Quando ci si trova in un nodo foglia, si trova il DCF(c) più vicino a DCF(t ). A
questo punto si decide se fondere t nel cluster c in base alla distanza d(c,t), che
misura l’information loss dovuta alla fusione.
1.
2.
Se è minore del valore di soglia  allora si procede alla fusione.
Altrimenti, t formerà un cluster a parte. In questo caso ci si trova davanti a due
possibilità:
1.
2.
Se c’è ancora spazio nel nodo, allora viene inserito DCF(t ).
Altrimenti, si “splitta” il nodo scegliendo come semi per i due nodi i due DCF che hanno
distanza massima nel nodo. In questo caso vengono aggiornati i DCF del nodo padre
inserendo un nuovo DCF per descrivere il nuovo nodo inserito; anche per i nodi
intermedi può avvenire lo split se la nuova informazione non può essere contenuta dal
nodo.
La complessità è lineare perché è il costo di lettura del dataset
LIMBO
Definizione del clustering


Dopo la costruzione dell’albero di DCF, in ogni foglia ci saranno
i DCFs di un clustering C sulle tuple in T.
A questo punto si può usare l’algoritmo Agglomerative Information
Bottleneck per trovare il clustering finale analizzando i DCFs dei
nodi foglia:


AIB procede iterativamente in maniera greedy finché non sono stati
formati k clusters.
Ad ogni passo si procede con la fusione di 2 cluster ci , cj  C in un
singolo cluster c* , formando un nuovo clustering C’ in modo che sia
minimizzata la perdita di informazione
La complessità è quadratica nel numero
di nodi foglia, dipendendo quindi dal
valore della soglia 
LIMBO
Labeling dei dati


Viene fatta una scansione delle tuple del dataset.
Ognuna di esse viene confrontata con ogni cluster ottenuto
nella fase precedente e gli viene assegnata un’etichetta
corrispondente al DCF più vicino.
La complessità è lineare nel numero
di tuple, perché richiede una singola
scansione del dataset
LIMBO
Scelta del valore di soglia

La scelta del valore di soglia  ha una doppia influenza:



Definisce il limite massimo per la fusione di due cluster.
Influenza la dimensione dell’albero di DCF, quindi la granularità del
summary.
LIMBO usa un’euristica per settare opportunamente il valore di
 , basandosi sulla mutua informazione che il set di tuple T ha
rispetto al set degli attributi A.
Contributo medio di ogni tupla
0    n , indica quanto valore della mutua
informazione media che vogliamo preservare nella
fusione di ogni tupla in un cluster.
LIMBO - Prestazioni



L’algoritmo scala in maniera non ottimale, ma comunque non è troppo lontano dall’essere
lineare.
Valori di soglia più bassi, anche di pochi decimi, contribuiscono a degradare di molto i tempi di
esecuzione, in virtù anche del fatto che sono presenti molte più tuple in ogni foglia per valori di
soglia inferiori.
Comunque, la qualità del clustering risulta invariata per i tre dataset per i valori della soglia usati.
LIMBO
Misure di qualità del clustering
Catagory Utility Function
Precisione del cluster ci
Richiamo del cluster ci
Misura l’accuratezza con cui il
cluster ci identifica la classe gi
Misura la completezza con cui il
cluster ci riproduce la classe gi
LIMBO
Synthetic Dataset



5000 tuple
10 attributi
314 valori per attributo
Degrado delle prestazioni e
della qualità del clustering
LIMBO
Real dataset
Pur utilizzando come tecnica base quella di COOLCAT,
fornisce risultati migliori con stesso tempo di elaborazione.
Algoritmi di clustering per dati categorici
Riassunto

k-modes & k-prototypes






Gli algoritmi più immediati per trattare dati categorici.
Si basano su k-means adattandolo per questo particolare tipo
di attributi.
k-modes lavora solo su dataset categorici, k-prototypes anche
su dataset misti.
Complessità computazionale come k-means (lineare nella
dimensione del dataset).
Il clustering trovato è fortemente dipendente dalla scelta dei
primi k oggetti di partenza dell’algoritmo (si trova solo
l’ottimo locale e non quello globale).
Soffre l’eccessiva semplicità del criterio di distanza tra oggetti
(numero di mismatch).
Algoritmi di clustering per dati categorici
Riassunto

ROCK
Intuitivo e di semplice implementazione.
 I clustering ottenuti sono generalmente sempre
migliori di quelli forniti dagli algoritmi tradizionali.
 Pesante computazionalmente la generazione dei link
( O(n2) ) e l’update dei cluster dopo una fusione (
O(n2log n) ).
 Poco adatto per dataset molto grandi.

Algoritmi di clustering per dati categorici
Riassunto

CLOPE




Basato su una rappresentazione ad istogrammi per
clusterizzare dati transazionali.
La funzione di valutazione tiene conto della compattezza del
cluster (rapporto H/W).
Algoritmo veloce e intuitivo, con costo computazionale
lineare sia nella dimensione del dataset che nel numero
massimo di clusters.
I clustering forniti non sono tra i migliori, ma ha il suo punto
di forza nell’efficienza computazionale, il che lo rende
particolarmente adatto per dataset molto grandi.
Algoritmi di clustering per dati categorici
Riassunto

OPOSSUM
 Indicato per Market-basket Analysis e per Managment Analysis.
 L’input dell’algoritmo è una matrice che viene calcolata pesando
gli item in base al loro valore monetario in quella transazione.
 I clusters ottenuti sono ben bilanciati sia per quanto riguarda il
valore complessivo che per il numero delle transazioni.
 I risultati ottenuti sono fedeli ai propositi dell’algoritmo,
fornendo informazioni valide per il particolare campo
applicativo.
 Ha il suo punto debole nel costo computazionale elevato ( O(n2)
), dovuto principalmente al calcolo della Matrice di Similarità del
grafo.
Algoritmi di clustering per dati categorici
Riassunto

STIRR
 Utilizza una rappresentazione a grafo dei valori del dataset.
 Definisce un’analogia con i Sistemi Dinamici non Lineari,
propagando in maniera iterativa i pesi sui nodi del grafo, passando
per più configurazioni fino ad arrivare ad un punto fisso
(configurazione stabile).
 La tecnica di partizionamento spettrale usata per definire i cluster
riduce notevolmente la complessità combinatoria intrinseca del
problema.
 Scala bene nella dimensione del dataset (lineare sia nel numero di
tuple che nel numero di attributi) e trova cluster validi.
 Efficianza ed efficacia dell’algoritmo dipendono fortemente dalla
scelta dell’operatore combinatorio da utilizzare.
 Poco valido nel determinare sotto-cluster e/o overlapping-cluster.
Algoritmi di clustering per dati categorici
Riassunto

CACTUS
Lavora su un set ridotto del dataset (summary) scelto
e calcolato in maniera opportuna.
 L’algoritmo definisce prima le proiezioni dei cluster
sugli attributi per poi sintetizzare i cluster finali.
 Molto veloce (da 3 a 10 volte più di STIRR).
 I cluster trovati sono molto validi e l’algoritmo riesce
anche ad identificare sotto-cluster e/o overlappingcluster.

Algoritmi di clustering per dati categorici
Riassunto

CLICK
Clusterizza trovando le k-clique massimali.
 Come CACTUS, usa una summary del dataset per
ridurre l’onere dell’elaborazione.
 L’algoritmo risulta essere in ogni situazione più
efficiente di CACTUS, e la differenza è ancor più
evidente se si hanno dataset con attributi con
dominio molto grande.

Algoritmi di clustering per dati categorici
Riassunto

COOLCAT
Utilizza il concetto di Entropia.
 Clusterizza con l’obiettivo di minimizzare il
disordine totale del sistema.
 Qualità del clustering simile a ROCK (poco meglio
COOLCAT), ma tempo di esecuzione dell’algoritmo
notevolmente migliore (lineare, appena più del 2%
del tempo di esecuzione di ROCK).

Algoritmi di clustering per dati categorici
Riassunto

LIMBO
Come COOLCAT, si basa sull’Entropia.
 Clusterizza in modo da minimizzare la perdita di
informazione totale del sistema.
 Complessità computazionale come COOLCAT, ma
il clustering ottenuto è di migliore qualità.

Conclusioni
e
Considerazioni personali



In questo seminario sono stati proposti diversi
algoritmi per clusterizzare tuple di dataset
contenenti attributi con valori di tipo categorico.
Il migliore è risultato CLICK, riuscendo a
determinare cluster di varia natura e forma in
tempi di esecuzione bassi anche su dataset molto
grandi.
CACTUS ha prestazioni molto vicine a CLICK,
ma “soffre” su attributi con domini grandi.
Conclusioni
e
Considerazioni personali

ROCK e CLOPE sono di semplice implementazione e
la loro tecnica si basa su concetti molto intuitivi (vicini ,
link , istogrammi ). Tuttavia, i due algoritmi hanno difetti
duali che ne limitano l’utilizzo:



ROCK dà cluster buoni ma scala male.
CLOPE dà cluster meno buoni ma scala molto bene.
OPOSSUM è particolarmente indicato in campo
strategico-economico, risultando è molto utile per fare
Customer Analysis e pianificare strategie di vendita e/o
di marketing.
Conclusioni
e
Considerazioni personali


STIRR trova i cluster in maniera naturale e quasi
“spontanea”, utilizzando pochissime variabili definite
dall’utente. Questo lo rende un buon algoritmo, anche se ha
un po’ di difficoltà a determinare alcune classi di cluster più
particolari.
COOLCAT e LIMBO applicano il concetto di Entropia al
clustering e riescono a trovare risultati accettabili in tutte le
possibili applicazioni. Inoltre, la loro particolare attitudine a
scalare bene li rende due algoritmi validi ad essere utilizzati
in qualsiasi contesto, trovando un ottimo compromesso tra
efficienza ed efficacia.