I contributi portati al SVC, seppur non di grandissima entità , sono diversi. Nel seguito vengono divisi in Contributi all’efficienza del clustering e Contributi alle prestazioni computazionali.
Contributi all’efficienza del clustering
Cluster assignment. Ricordiamo che tra tutti gli algortimi di cluster assignment presentati in letteratura, quello che è stato ritenuto il miglior compromesso tra qualità e complessità computazionale è il Cone Cluster Labeling (CCL)
-
S. Lee and K. M. Daniels, "Cone Cluster Labeling for Support Vector Clustering," in Proceedings of 6th SIAM Conference on Data Mining, 2006, pp. 484-488.
@inproceedings{cone2006,
author = {Sei-Hyung Lee and Karen M. Daniels},
Booktitle = {Proceedings of 6th SIAM Conference on Data Mining},
Date-Added = {2007-04-29 16:58:13 +0200},
Date-Modified = {2007-06-19 18:52:22 +0200},
Keywords = {SVM, clustering},
Month = {May},
Pages = {484–488},
Title = {Cone Cluster Labeling for Support Vector Clustering},
Url = {http://www.siam.org/meetings/sdm06/proceedings/046lees.pdf},
Year = {2006},
Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGBwpZJGFyY2hpdmVyWCR2ZXJzaW9uVCR0b3BYJG9iamVjdHNfEA9OU0tleWVkQXJjaGl2ZXISAAGGoNEICVRyb290gAGoCwwXGBkaHiVVJG51bGzTDQ4PEBMWWk5TLm9iamVjdHNXTlMua2V5c1YkY2xhc3OiERKABIAFohQVgAKAA4AHXHJlbGF0aXZlUGF0aFlhbGlhc0RhdGFfEEsuLi8uLi8uLi9QYXBlcnMvTGVlL0NvbmUgQ2×1c3RlciBMYWJlbGluZyBmb3IgU3VwcG9ydCBWZWN0b3IgQ2×1c3RlcmluZy5wZGbSGw8cHVdOUy5kYXRhTxECLgAAAAACLgACAAAJRG9jdW1lbnRzAAAAAAAAAAAAAAAAAAAAAAAAvs54rkgrAAAANyVBH0NvbmUgQ2×1c3RlciBMYWJlbGluIzJGMDk0My5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvCUPCWn72AAAAAAAAAAAAAwADAAAJAAAAAAAAAAAAAAAAAAAAAANMZWUAABAACAAAvs5cjgAAABEACAAAwlpi1gAAAAEAFAA3JUEANxuAAACy8gAAEsYAABKtAAIATkRvY3VtZW50czpuZW1vOkRvY3VtZW50czpVbml2ZXJzaXRhOlBhcGVyczpMZWU6Q29uZSBDbHVzdGVyIExhYmVsaW4jMkYwOTQzLnBkZgAOAHAANwBDAG8AbgBlACAAQwBsAHUAcwB0AGUAcgAgAEwAYQBiAGUAbABpAG4AZwAgAGYAbwByACAAUwB1AHAAcABvAHIAdAAgAFYAZQBjAHQAbwByACAAQwBsAHUAcwB0AGUAcgBpAG4AZwAuAHAAZABmAA8AFAAJAEQAbwBjAHUAbQBlAG4AdABzABIAXS9uZW1vL0RvY3VtZW50cy9Vbml2ZXJzaXRhL1BhcGVycy9MZWUvQ29uZSBDbHVzdGVyIExhYmVsaW5nIGZvciBTdXBwb3J0IFZlY3RvciBDbHVzdGVyaW5nLnBkZgAAEwASL1ZvbHVtZXMvRG9jdW1lbnRzABUAAgAX//8AAIAG0h8gISJYJGNsYXNzZXNaJGNsYXNzbmFtZaMiIyRdTlNNdXRhYmxlRGF0YVZOU0RhdGFYTlNPYmplY3TSHyAmJ6InJFxOU0RpY3Rpb25hcnkACAARABsAJAApADIARABJAEwAUQBTAFwAYgBpAHQAfACDAIYAiACKAI0AjwCRAJMAoACqAPgA/QEFAzcDOQM+A0cDUgNWA2QDawN0A3kDfAAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAAOJ},
Bdsk-Url-1 = {http://www.siam.org/meetings/sdm06/proceedings/046lees.pdf}
}
Il primo contributo in questo senso è stato una esplicita politica per trattare i BSV. Un alto regime di BSV si rende necessario soprattutto per separare cluster fortemente sovrapposti. I BSV però finiscono fuori dalla descrizione del dominio, risultando outliers.
La scelta è stata quella di applicare il CCL così com’era escludendo i BSV dal processo e poi una volta trovato i cluster, assegnare i BSV a questi ultimi con una semplice politica di prossimità : un BSV è assegnato al cluster al quale appartiene il punto più prossimo.
Questo ci ha permesso di classificare i BSV in maniera mediamente corretta, migliorando l’efficienza.
In
-
S. Lee and K. M. Daniels, "Gaussian Kernel Width Selection and Fast Cluster Labeling for Support Vector Clustering," Department of Computer Science, University of Massachussets Lowell2005.
@techreport{kernwidthsvc2005,
author = {Sei-Hyung Lee and Karen M. Daniels},
Date-Added = {2007-05-18 10:44:22 +0200},
Date-Modified = {2007-06-20 08:28:06 +0200},
Institution = {Department of Computer Science, University of Massachussets Lowell},
Keywords = {svm, clustering, kernel machines},
Title = {Gaussian Kernel Width Selection and Fast Cluster Labeling for Support Vector Clustering},
Url = {http://www.cs.uml.edu/~kdaniels/papers/SeiTechReport2005.pdf},
Year = {2005},
Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGBwpZJGFyY2hpdmVyWCR2ZXJzaW9uVCR0b3BYJG9iamVjdHNfEA9OU0tleWVkQXJjaGl2ZXISAAGGoNEICVRyb290gAGoCwwXGBkaHiVVJG51bGzTDQ4PEBMWWk5TLm9iamVjdHNXTlMua2V5c1YkY2xhc3OiERKABIAFohQVgAKAA4AHXHJlbGF0aXZlUGF0aFlhbGlhc0RhdGFfEG8uLi8uLi8uLi9QYXBlcnMvTGVlL0dhdXNzaWFuIEtlcm5lbCBXaWR0aCBTZWxlY3Rpb24gYW5kIEZhc3QgQ2×1c3RlciBMYWJlbGluZyBmb3IgU3VwcG9ydCBWZWN0b3IgQ2×1c3RlcmluZy5wZGbSGw8cHVdOUy5kYXRhTxECmgAAAAACmgACAAAJRG9jdW1lbnRzAAAAAAAAAAAAAAAAAAAAAAAAvs54rkgrAAAANyVBH0dhdXNzaWFuIEtlcm5lbCBXaWR0IzMxQ0FDQS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxysrCcyn+UERGIAAAAAAAAwADAAAJAAAAAAAAAAAAAAAAAAAAAANMZWUAABAACAAAvs5cjgAAABEACAAAwnMN3gAAAAEAFAA3JUEANxuAAACy8gAAEsYAABKtAAIATkRvY3VtZW50czpuZW1vOkRvY3VtZW50czpVbml2ZXJzaXRhOlBhcGVyczpMZWU6R2F1c3NpYW4gS2VybmVsIFdpZHQjMzFDQUNBLnBkZgAOALgAWwBHAGEAdQBzAHMAaQBhAG4AIABLAGUAcgBuAGUAbAAgAFcAaQBkAHQAaAAgAFMAZQBsAGUAYwB0AGkAbwBuACAAYQBuAGQAIABGAGEAcwB0ACAAQwBsAHUAcwB0AGUAcgAgAEwAYQBiAGUAbABpAG4AZwAgAGYAbwByACAAUwB1AHAAcABvAHIAdAAgAFYAZQBjAHQAbwByACAAQwBsAHUAcwB0AGUAcgBpAG4AZwAuAHAAZABmAA8AFAAJAEQAbwBjAHUAbQBlAG4AdABzABIAgS9uZW1vL0RvY3VtZW50cy9Vbml2ZXJzaXRhL1BhcGVycy9MZWUvR2F1c3NpYW4gS2VybmVsIFdpZHRoIFNlbGVjdGlvbiBhbmQgRmFzdCBDbHVzdGVyIExhYmVsaW5nIGZvciBTdXBwb3J0IFZlY3RvciBDbHVzdGVyaW5nLnBkZgAAEwASL1ZvbHVtZXMvRG9jdW1lbnRzABUAAgAX//8AAIAG0h8gISJYJGNsYXNzZXNaJGNsYXNzbmFtZaMiIyRdTlNNdXRhYmxlRGF0YVZOU0RhdGFYTlNPYmplY3TSHyAmJ6InJFxOU0RpY3Rpb25hcnkACAARABsAJAApADIARABJAEwAUQBTAFwAYgBpAHQAfACDAIYAiACKAI0AjwCRAJMAoACqARwBIQEpA8cDyQPOA9cD4gPmA/QD+wQEBAkEDAAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAAQZ},
Bdsk-Url-1 = {http://www.cs.uml.edu/~kdaniels/papers/SeiTechReport2005.pdf}
}
si affronta il problema col dataset Breast Cancer Wisconsin. In quell’occasione i BSV vengono prima identificati, poi rimossi e infine l’intero processo SVC viene ripetuto, per poi classificare solo allora i BSV. Così facendo ottengono un’accuratezza di circa il 92%.
Il nostro approccio evita di ripetere l’intero SVC due volte per lo stesso dataset e sul Breast Cancer Wisconsin ottiene un’accuratezza di oltre il 96%.
Il secondo piccolo contributo alla procedura CCL è stato l’intuizione di utilizzare la distanza L1 in luogo della distanza L2. In svariati test l’uso di questa distanza ha portato a guadagni nell’acuratezza di classificazione, specialmente nei casi in cui si utilizza il parametro C=1. Nel classico caso dell’IRIS dataset, dopo le migliorie passate, abbiamo ottenuto un ulteriore incremento di oltre mezzo punto percentuale (da 92.6667 a 93.3333).
Generazione dei valori di larghezza per il kernel gaussiano. Ricordiamo che l’unica tecnica proposta per la generazione di tali valori è quella in
-
S. Lee and K. M. Daniels, "Gaussian Kernel Width Generator for Support Vector Clustering," in Advances in Bioinformatics and Its Applications, 2005, pp. 151-162.
@inproceedings{gauskergenerator2004,
author = {Sei-Hyung Lee and Karen M. Daniels},
Booktitle = {Advances in Bioinformatics and Its Applications},
Date-Added = {2007-10-23 17:21:17 +0200},
Date-Modified = {2007-10-23 17:21:17 +0200},
Editor = {Matthew He and Giri Narasimhan and Sergei Petoukhov},
Keywords = {SVM, clustering, gaussian kernel},
Pages = {151–162},
Title = {Gaussian Kernel Width Generator for Support Vector Clustering},
Url = {http://www.cs.uml.edu/~kdaniels/papers/ICBA.pdf},
Volume = {8},
Year = {2005},
Bdsk-Url-1 = {http://www.cs.uml.edu/~kdaniels/papers/ICBA.pdf}
}
Per un fortunato errore di implementazione, ho scoperto che tale procedura genera sì dei valori di Kernel Width monotoni crescenti, ma spesso “salta” dei valori che darebbero un ottimo risultato. Ovvero, la differenza tra due valori consecutivi è spesso troppo alta. Corretto l’errore di implementazione, ho pensato a come gestire esplicitamente il comportamento avvenuto fortuitamente. Così ho introdotto un nuovo parametro per il generatore di valori, che ho chiamato costante di smorzamento o, in inglese, softening constant. Questa costante può variare nell’intervallo aperto (0,1]. Quando assume valore 1, nessun smorzamento viene effettuato. Per valori minori di 1 invece il valore ogni volta generato dal Kernel Width Generator viene “smorzato” di una percentuale. Per esempio, una costante di smorzamento di 0.5 dimezza ogni volta il valore generato. Con tale valore di smorzamento sono stati constatati due comportamenti che, a seconda del dataset, possono verificarsi al contempo o separatamente (o per niente):
- viene trovato un valore di kernel width che assicura una maggiore accuratezza
- il valore di kernel width giusto viene trovato più velocemente (quindi eseguendo meno volte il SVC)
Nel caso dell’IRIS ha permesso di abbattere il muro del 90% di accuratezza nello stesso numero di cicli; nel caso di un dataset sintetico (finora ancora non presentato nel blog) ha permesso di trovare un buon valore di kernel width in 9 cicli invece dei 19 necessari senza smorzamento (con un aumento di accuratezza quasi insignificante 0.1%).
Stima del valore di C (soft constraint). L’altro parametro fondamentale del SVC è C, che controlla il numero di BSV. Per generare un insieme di possibili valori per C non è stato ancora presentato nulla in letteratura. Un paio di suggerimenti per una stima di tale valore sono presenti in
-
S. Lee and K. M. Daniels, "Gaussian Kernel Width Selection and Fast Cluster Labeling for Support Vector Clustering," Department of Computer Science, University of Massachussets Lowell2005.
@techreport{kernwidthsvc2005,
author = {Sei-Hyung Lee and Karen M. Daniels},
Date-Added = {2007-05-18 10:44:22 +0200},
Date-Modified = {2007-06-20 08:28:06 +0200},
Institution = {Department of Computer Science, University of Massachussets Lowell},
Keywords = {svm, clustering, kernel machines},
Title = {Gaussian Kernel Width Selection and Fast Cluster Labeling for Support Vector Clustering},
Url = {http://www.cs.uml.edu/~kdaniels/papers/SeiTechReport2005.pdf},
Year = {2005},
Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUGBwpZJGFyY2hpdmVyWCR2ZXJzaW9uVCR0b3BYJG9iamVjdHNfEA9OU0tleWVkQXJjaGl2ZXISAAGGoNEICVRyb290gAGoCwwXGBkaHiVVJG51bGzTDQ4PEBMWWk5TLm9iamVjdHNXTlMua2V5c1YkY2xhc3OiERKABIAFohQVgAKAA4AHXHJlbGF0aXZlUGF0aFlhbGlhc0RhdGFfEG8uLi8uLi8uLi9QYXBlcnMvTGVlL0dhdXNzaWFuIEtlcm5lbCBXaWR0aCBTZWxlY3Rpb24gYW5kIEZhc3QgQ2×1c3RlciBMYWJlbGluZyBmb3IgU3VwcG9ydCBWZWN0b3IgQ2×1c3RlcmluZy5wZGbSGw8cHVdOUy5kYXRhTxECmgAAAAACmgACAAAJRG9jdW1lbnRzAAAAAAAAAAAAAAAAAAAAAAAAvs54rkgrAAAANyVBH0dhdXNzaWFuIEtlcm5lbCBXaWR0IzMxQ0FDQS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxysrCcyn+UERGIAAAAAAAAwADAAAJAAAAAAAAAAAAAAAAAAAAAANMZWUAABAACAAAvs5cjgAAABEACAAAwnMN3gAAAAEAFAA3JUEANxuAAACy8gAAEsYAABKtAAIATkRvY3VtZW50czpuZW1vOkRvY3VtZW50czpVbml2ZXJzaXRhOlBhcGVyczpMZWU6R2F1c3NpYW4gS2VybmVsIFdpZHQjMzFDQUNBLnBkZgAOALgAWwBHAGEAdQBzAHMAaQBhAG4AIABLAGUAcgBuAGUAbAAgAFcAaQBkAHQAaAAgAFMAZQBsAGUAYwB0AGkAbwBuACAAYQBuAGQAIABGAGEAcwB0ACAAQwBsAHUAcwB0AGUAcgAgAEwAYQBiAGUAbABpAG4AZwAgAGYAbwByACAAUwB1AHAAcABvAHIAdAAgAFYAZQBjAHQAbwByACAAQwBsAHUAcwB0AGUAcgBpAG4AZwAuAHAAZABmAA8AFAAJAEQAbwBjAHUAbQBlAG4AdABzABIAgS9uZW1vL0RvY3VtZW50cy9Vbml2ZXJzaXRhL1BhcGVycy9MZWUvR2F1c3NpYW4gS2VybmVsIFdpZHRoIFNlbGVjdGlvbiBhbmQgRmFzdCBDbHVzdGVyIExhYmVsaW5nIGZvciBTdXBwb3J0IFZlY3RvciBDbHVzdGVyaW5nLnBkZgAAEwASL1ZvbHVtZXMvRG9jdW1lbnRzABUAAgAX//8AAIAG0h8gISJYJGNsYXNzZXNaJGNsYXNzbmFtZaMiIyRdTlNNdXRhYmxlRGF0YVZOU0RhdGFYTlNPYmplY3TSHyAmJ6InJFxOU0RpY3Rpb25hcnkACAARABsAJAApADIARABJAEwAUQBTAFwAYgBpAHQAfACDAIYAiACKAI0AjwCRAJMAoACqARwBIQEpA8cDyQPOA9cD4gPmA/QD+wQEBAkEDAAAAAAAAAIBAAAAAAAAACgAAAAAAAAAAAAAAAAAAAQZ},
Bdsk-Url-1 = {http://www.cs.uml.edu/~kdaniels/papers/SeiTechReport2005.pdf}
}
ma nei miei esperimenti pratici non hanno prodotto un buon risultato. Probabilmente ciò è dovuto anche al fatto che tale stima veniva fatta assumendo di usare come Cluster Assignment l’algoritmo classico Complete Graph Cluster Labeling.
Pertanto inizialmente ho variato manualmente il valore di C fino a trovarne uno che desse buoni risultati. Col susseguirsi degli esperimenti, ho notato che i valori di C che davano buoni risultati avevano una certa sistematicità ed era possibile ottenerli grazie alla legge
C = 10/N
con N il numero di oggetti nel dataset.
Ho successivamente raffinato la legge come segue, al fine di poter produrre ulteriori valori di C, in base al valore dato in input per tale parametro.
C_new = 10 * C_old / N
dove C_old è il valore di C dato in input all’SVC e C_new è il nuovo valore stimato che in teoria dovrebbe dare un miglior risultato.
Dagli esperimenti effettuati in genere il primo valore generato (C_new = 10 * 1 / N, poiché all’inizio C=1) è quello ottimale.
Contributi alle prestazioni computazionali
Tali contributi sono tutti legati alla procedura di generazione di valori per la larghezza del kernel e sono stati già descritti in questo post.