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 tCi ( 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.