Pandora Dataset: prime considerazioni

Innanzitutto, le prime operazioni sul dataset Pandora sono state quelle di “preparazione” all’esperimento:

  1. Eliminazione di alcune “feature” (quindi alcune colonne delle matrice dati)
  2. Eliminazione degli oggetti aventi missing values (13304 su 449271) in corrispondenza delle restanti feature (i missing value erano riportati come -9999.0)

Partendo da un numero sovrastimato di cluster che si voleva ottenere, 50, si è iniziato a far girare il Co-clustering. Una serie di esecuzioni successive hanno rilevato che 50 era effettivamente sovrastimato, riportando il numero di cluster che restavano vuoti. Questo numero è stato sottratto a 50 ed è stato poi ripetuta l’esecuzione del co-clustering.

Questa operazione è stata ripetuta finché non si è avuta una media di cluster vuoti su 20 iterazioni di al più 1 cluster. Il numero di cluster stimato sembra così essere 20-21.
Già con input di 24 cluster richiesti, su 20 iterazioni si otteneva cmq una media di cluster vuoti di 1.5 cluster.

Ad ogni modo, questa prima fase non si è concentrata sulla stima esatta del numero di cluster, ma sul paragonare il comportamento dei test eseguiti sul dataset Pandora “depurato” dai missing values e quello originale.

Gli stessi test sono stati dunque ripetuti sul dataset originale, dove però al valore -9999.0 è stato sostituito 0, così come indicato dalla letteratura (una serie di test di prova direttamente col valore -9999.0 è stato effettuato e portava all’individuazione di soli 2-3 cluster). Il comportamento è stato praticamente simile, ottenendo la stessa stima di numero di cluster e un valore simile di funzione obiettivo alla fine del processo.

Tra l’altro, un controllo veloce dei cluster in entrambi i testi rivela che il contenuto dei cluster è molto simile, comunicandoci che la qualità del clustering non è stata gravemente inficiata dalla presenza di oggetti con missing values.

I successivi passi saranno questi:

  1. Eseguire i test nuovamente stavolta aumentando il numero di step per l’algoritmo di local search, al fine di ottenere un migliore valore per i minimo locali e pertanto avere una maggiore affidabilità della stima di cluster finale.
  2. Elaborazione approfondita dell’output del co-clustering, al fine di paragonare accuratamente i cluster ottenuti dal dataset depurato con quelli ottenuti dal dataset impuro

Astrophysics Dataset: Pandora

Inizio i lavori sul dataset Pandora fornitomi dal prof. Longo, basandomi sulle sue direttive.

  • Verrà usato un sottoinsieme delle colonne
  • Un primo clustering verrà effettuato depurando il dataset da missing values
  • Un successivo clustering verrà effettuato sul dataset non depurato
  • I due clustering verranno confrontati, utilizzando il primo come baseline di riferimento.
  • Maggiori dettagli sul dataset saranno disponibili al più presto.

    Il clustering verrà affrontato con Bregman Co-clustering, per affrontare il problema dei missing values.
    Il metodo di aggiornamento dei mediodi/centroidi sarà il Local Search, che evita minimi locali e ci permette, partendo da un numero iniziale sovrastimato di cluter, di “scovare” il numero effettivo di cluster (o nei casi difficili una buona approssimazione di esso), lavorando per raffinamenti successivi.
    In questo esperimento l’inizializzazione del co-clustering sarà lasciata casuale.

    In successive prove proveremo ad utilizzare l’inizializzazione spettrale proposta in

    per migliorare la qualità del risultato finale.

    Infine, essendo presenti valori negativi nella matrice, l’istanza di Co-clustering basata su di divergenza KL e Mutua Informazione non potrà essere utilizzata

    Co-clustering – Synthetic Dataset Test #1

    Macchina usata:
    PowerPC G4, 1.5GHz, 768MB RAM, Mac OS X

    Software usato:

    Dataset usato:
    Il dataset usato in questo test è un dataset sintetico, generato grazie a

    Il dataset è così composto:
    Oggetti: 1000
    Attributi: 10
    Classi: 5, per un totale di 888 punti (Cluster 0: 327, Cluster 1: 134, Cluster 2: 162, Cluster 3: 132, Cluster 4: 133)
    Punti di disturbo: 112 (punti non classificabili)

    Algoritmo di co-clustering usato: Euclidean Distance Based, Minimum Sum Squared, Information Theoretic

    Problemi: Da questo primo test condotto su un dataset disturbato, lo schema di co-clustering sembra non essere pensato per identificare il rumore e separarlo dal resto della classificazione, col risultato che tutte le istanze di co-clustering tendono a classificare il rumore in una delle cinque classi richieste, sfalsando i risultati.

    Eliminazione punti di rumore: Eliminando i punti di rumore, abbiamo ottenuto un dataset di 888 punti e l’algoritmo (Euclidean Distance Based, con 5 co-cluster richiesti) ha separato perfettamente le 5 classi senza alcun errore in un tempo così espresso:
    User = 0 second(s) 138552 ms
    System = 0 second(s) 6630 ms
    Time/Run = 0.138552 second(s)

    Co-clustering – Real World Dataset Test #2

    Macchina usata:
    PowerPC G4, 1.5GHz, 768MB RAM, Mac OS X

    Software usato:

    Dataset Usato:
    Mushrooms Database
    Number of instances: 8124
    Number of Attributes: 22
    2480 missing values for attribute #12
    Original Class Distribution: edible: 4208 (51.8%), poisonous: 3916 (48.2%)
    Mushroom records drawn from The Audubon Society Field Guide to North
    American Mushrooms (1981). G. H. Lincoff (Pres.), New York: Alfred A. Knopf
    Donor: Jeff Schlimmer (Jeffrey.Schlimmer@a.gp.cs.cmu.edu)
    Date: 27 April 1987

    Algoritmo di co-clustering usato: Minimum Sum Squared Residue

    Prova #1
    Richiesti 2 cluster di riga e 1 di colonna. Totale: 2 co-cluster

    Tempo impiegato: User = 2 second(s) 127370 ms, System = 0 second(s) 40949 ms, Time/Run = 2.12737 second(s)

    Risultato: 3670 elementi nella classe “poisonous”, 4454 elementi nella classe “edible”.

    Percentuale d’errore (elementi non classificati correttamente): ~3%

    Prova #2
    Richiesti 2 cluster di riga e 2 di colonna. Totale: 4 co-cluster

    Tempo impiegato: User = 2 second(s) 158490 ms, System = 0 second(s) 40654 ms, Time/Run = 2.15849 second(s)

    Risultato: 3915 elementi nella classe “poisonous”, 4209 elementi nella classe “edible”.

    Percentuale d’errore: ~1.23 x 10^-4 (1 solo elemento è stato classificato erroneamente)

    Co-clustering – Real World Dataset Test #1

    Macchina usata:
    PowerPC G4, 1.5GHz, 768MB RAM, Mac OS X

    Software usato:

    Dataset usato:
    Iris Plant Database
    From Fisher, 1936
    3 classes, 4 numeric attributes, 150 instances
    1 class is linearly separable from the other 2, but the other 2 are not linearly separable from each other

    Algoritmo di co-clustering usato: Euclidean Distance Based.

    Prova #1:
    Richiesti 3 cluster di riga (sulle righe abbiamo gli oggeti, sulle colonne gli attributi) e 1 solo cluster di colonna. In tal modo non viene effettuato alcun feature clustering (che ricordiamo è contestuale al data clustering).

    Tempo impiegato: User = 0 second(s) 9193 ms, System = 0 second(s) 2709 ms, Time/Run = 0.009193 second(s)

    Risultato: Co-Cluster 1: 54 elementi di riga, Co-Cluster 2: 40 elementi di riga, Co-Cluster 3: 56 elementi di riga. Avendo specificato 1 solo cluster per le colonne, tutti i co-cluster hanno gli stessi elementi di colonna.

    Conclusioni: L’algoritmo è riuscito a separare i cluster sovrapposti (classi 2 e 3 del dataset), ma ha commesso svariati errori di classificazioni. Al cluster 2 mancano 10 elementi, 4 dei quali sono nel primo cluster e i restanti 6 nel terzo cluster.

    Prova #2:
    Richiesti 3 cluster di riga e 2 cluster di colonna.

    Tempo impiegato: User = 0 second(s) 8397 ms, System = 0 second(s) 3042 ms, Time/Run = 0.008397 second(s)

    Risultato: Le tre classi sono state perfettamente separate. Nello specifico, sono stati prodotti 6 co-cluster, poiché, detto C il numero di cluster di colonna, e R il numero di cluster di riga, si ottengono sempre C*R co-cluster. Per ogni cluster di riga chiesto, si ottengono in pratica C co-cluster.

    Conclusioni: Separare 2 cluster (classi 2 e 3 del dataset in esame) non linearmente separabili è notevole per un algoritmo non kernel-based.

    Missing values, co-clustering e predizione dei valori mancanti

    Il problema dei missing values è a quanto pare molto sentito, soprattutto in Astrofisica, dove, testimone il prof. Longo, si gettano via svariate migliaia di dati non completamente descritti. Il co-clustering sembra venire in aiuto per affrontare questo tedioso problema.

    Come viene espressamente detto in

    il co-clustering permette di raggruppare oggetti simili tra loro in base a un sottoinsieme di attributi e non rispetto a tutti gli attributi che rappresentano gli oggetti. Essendo questi sottoinsiemi ricavati tramite un feature clustering contestuale al data clustering, il processo dovrebbe, per costruzione, non essere inficiato dalla presenza di missing values.

    Infatti, in

    si parla anche di “Missing Value Prediction” (rispettivamente par. 5.3 e par. 4.2), dove si sfrutta il co-clustering per la predizione dei valori mancanti, impostando i missing values a 0 e facendo “girare” l’algoritmo di co-clustering. L’algoritmo prosegue non curante dei dati mancanti; trovato il co-clustering, la matrice approssimata basata su di esso può essere usata per “predirre” i valori mancanti con una buona percentuale di errore.