UNIVERSITA’ DEGLI STUDI DI SALERNO FACOLTA’ DI SCIENZE MATEMATICHE, FISICHE E NATURALI CORSO DI LAUREA IN INFORMATICA CompLearn Toolkit Prof. Bruno Carpentieri Gruppo Mapag: Pietro Albano Arcangelo Castiglione Marialuisa Bevilacqua Gianluca Zaccagnino Antonio Ingenito Outline Che cos’è CompLearn Richiami su Normalized Compression Distance Istallazione del toolkit CompLearn Descrizione di CompLearn Comandi ncd e maketree Un esempio di funzionamento in ambiente Windows CompLearn E’ un sistema software di facile utilizzo costruito per applicare tecniche di compressione al processo di identificazione e apprendimento di pattern Fornisce questo supporto sotto forma di una libreria scritta in C che può essere eseguita nei più moderni ambienti di sviluppo Fornisce inoltre un piccolo insieme di utilities da linea di comando come semplici applicazioni che usano tale libreria Approccio basato sulla compressione Tale approccio è potente in quanto possono essere identificati pattern in diversi domini di applicazione: Classificazione di stili musicali Identificazione del linguaggio di insiemi di testo Rilevamento delle relazioni tra diverse specie e anche l’inizio di nuovi virus sconosciuti come la SARS E’ un metodo generale che non richiede nessuna conoscenza di base su particolari classificazioni Normalized Compression Distance NCD è una famiglia di funzioni che prende come argomenti due oggetti (literal files) e valuta una formula fissata in termini di versioni compresse di tali oggetti, combinate e non. Siano x e y due oggetti e C(x) la lunghezza della versione compressa di x usando il compressore C, allora: NCD ( x, y ) = C ( x, y ) − min{C ( x), C ( y )} max{C ( x), C ( y )} Tale metodo è il risultato di sviluppi matematici teoretici basati sulla complessità di Kolmogorov Famiglia delle NCD Include: NID (Normalized Information Distance): il compressore raggiunge la complessità di Kolmogorov dei dati, cioè C ( x ) = K ( x ) dove K ( x ) è la complessità di Kolmogorov di x; in questo caso parliamo di Compressore a complessità di Kolmogorov NGD (Normalized Google Distance): la distanza di Google misura la correlazione semantica derivata dal numero di entry restituita dal motore Google per un dato set di keyword. Parole con significato simile tendono ad essere vicine in termini di distanza di Google, mentre parole con significato diverso tendono ad essere lontane. La NGD di due termini di ricerca x e y sarà: dove M è il numero totale di pagine web ricercate da Google Istallazione In ambiente Linux, dopo aver scaricato il sorgente (www.complearn.org) bisogna controllare che sia istallata GSL (GNU Scientific Library) usata per generare matrici, tramite il comando gsl-config --libs se viene visualizzato qualcosa come –L o –l significa che GSL è presente nel sistema altrimenti bisogna provvedere alla sua istallazione. Dopo esserci posizionati nella directory di CompLearn si procede con i seguenti passi di istallazione: ./configure make make install In ambiente Windows, per il funzionamento di CompLearn è necessario copiare le dll nella stessa directory in cui sono presenti gli eseguibili di ncd e maketree precedentemente scaricati ed eseguiti e infine procedere con i comandi base del software dal prompt dei comandi. Descrizione del sistema CompLearn Il toolkit CompLearn come abbiamo detto in precedenza è un insieme di utilities per analizzare tipi di dati anche eterogenei tra loro I comandi principali di CompLearn ncd e maketree in ambiente Linux usano il file di configurazione config.yml In primo luogo, nella home dell’utente viene cercata la directory .complearn. In tale directory, CompLearn legge il file di configurazione config.yml, un file di testo strutturato nel formato YAML Qualora CompLearn non potesse localizzare questo file, vengono usati valori di default Formato del file config.yml <NomeVariabile>: <valore> Sono ammessi spazi bianchi e i commenti vengono contrassegnati dal simbolo # Le variabili possono essere di tre tipi: boolean, integer, oppure string Nomi di variabili (1) I nomi di variabili valide sono: compressor: string (ncd) Indica il compressore che deve essere usato. Valori validi sono: bzip, zlib, e google. GoogleKey: string (ncd, google compressor) Chiave necessaria per effettuare query nel database Google. blocksize: int (ncd, bzip compressor) Un intero da 1 a 9. 9 dà la migliore compressione ma occupa maggior memoria. Default 9. Nomi di variabili (2) workfactor: int (ncd, bzip compressor) Un intero da 0 a 250 e controlla i comportamenti della fase di compressione nel caso di input peggiore, cioè molto ripetitivo. bzverbosity: int (ncd, bzip compressor) Un intero tra 0 e 4. 0 è silente e valori maggiori danno la verbosità dell’output in modo crescente. Default 0. zliblevel: int (ncd, zlib compressor) Un intero da 1 a 9. 1 è il più veloce e produce la minima compressione. 9 è il più lento e produce la massima compressione. Default 9. Nomi di variabili (3) selfAgreementTermination: bool (maketree) Indica se k numeri di alberi raggiungono o meno uno score accettato prima che il programma termini. Default 1. maxFailCount: int (maketree) Un intero che specifica il numero massimo di alberi ‘failed’ che occorrono in successione prima che il programma termini. E’ usato solo quando selfAgreementTermination è off. Default 100000. isOrdered: bool (maketree) Indica se i nodi sono ordinati o meno. Default 0. isRooted: bool (maketree) Indica se creare o meno un albero binario con radice. Default 0. Esempio di file config.yml # # comments are written like this # GoogleKey: A/OGsJTQFHSpufko/rRS/KLA7NAT8UNf compressor: bzip blocksize: 5 workfactor: 100 isRooted: 1 selfAgreementTermination: 0 maxFailCount: 50000 # etc Il comando ncd Calcola Normalized Compression Distance ncd di default usa il compressore bzlib.Vengono passati come argomento due nomi di file da linea di comando. I contenuti dei file vengono compressi e viene restituita la distanza di compressione normalizzata tra i due file. Esempio: ncd filename1 filename2 Con l’opzione –b, sarà creato di default un file binario chiamato distmatrix.clb. Opzioni: -c --compressor [bzlib | zlib | blocksort -f, --file-mode=FILE -l, --literal-mode=STRING -p, --plainlist-mode=FILE -t, --termlist-mode=FILE -d, --directory-mode=DIR ] In ambiente Windows: l’unica opzione funzionante è –d, e l’unico compressore che da risultati positivi è zlib!!!! Il file creato da tale comando è in formato testo (.txt) Il comando maketree maketree di default prende in input la matrice di distanza quadrata creata con il comando ncd (con l’opzione –b) e genera un albero binario unrooted. Il risultato è inserito in un file chiamato treefile.dot Affinchè maketree funzioni correttamente, la matrice di distanza deve avere i seguenti requisiti : deve essere una matrice quadrata, cioè gli argomenti in input al comando ncd devono essere dello stesso tipo la sua dimensione deve essere almeno 4x4 Il comando neato Crea un file (in formato ps o png) in cui vi è il layout dell’ albero contenuto in treefile.dot Esempio: neato -Tps -Gsize=7,7 treefile.dot >tree.ps Può essere usato dopo aver istallato GraphViz, un software open-source per la visualizzazione grafica. CompLearn: Step 1 Il seguente esempio mostra il funzionamento di CompLearn in ambiente Windows Sono stati usati file di natura eterogenea, quali immagini (di alcuni minerali in formato .bmp), file audio (generi musicali diversi in formato .midi) e file di testo ( sequenze di genomi animali e non in formato .txt). Step 1: Creare una matrice di distanza ncd -d dir1 dir2 >distmatrix.txt Questo comando prende come argomenti due directory e crea una matrice di distanza quadrata nel file distmatrix.txt. Distmatrix.txt calcite.bmp 0,934233 1,149052 1,098256 1,060244 1,080970 1,045553 1,075150 1,043821 1,075150 1,081193 1,022481 1,066902 1,150569 1,151024 1,151175 0,927521 1,150872 1,149204 0,937593 1,020835 1,034836 1,016128 1,007979 cat.txt 1,144170 0,917191 1,125316 1,053324 1,113079 1,041678 1,060008 1,048584 1,060008 1,099375 1,029737 1,109000 0,932927 0,929976 0,892211 1,171322 0,913061 0,915224 1,139872 1,051721 1,043036 1,019799 1,007735 dog.txt 1,145032 0,906627 1,125704 1,054003 1,113604 1,042619 1,061042 1,047873 1,061042 1,099375 1,029975 1,109683 0,928783 0,934520 0,896538 1,173492 0,911968 0,907418 1,140551 1,052635 1,043196 1,020005 1,007948 dolomite.bmp 0,934233 1,142974 1,083350 1,037246 1,058906 1,033874 1,045241 1,065509 1,045241 1,050505 1,014908 1,041415 1,139697 1,142713 1,142199 0,904350 1,139972 1,141753 0,937593 1,021261 1,031084 1,010807 1,007903 elephant.txt 1,146324 0,932062 1,126287 1,053731 1,112728 1,042453 1,061418 1,049662 1,061418 1,100241 1,030015 1,110365 0,941398 0,939213 0,928486 1,175407 0,933281 0,934247 1,142043 1,052696 1,043571 1,020294 1,007811 Gente come noi.mid 1,048402 1,078737 1,021447 1,014111 1,017481 1,019870 1,028131 1,007124 1,028131 1,017554 1,017248 1,007639 1,078884 1,080353 1,080499 1,040323 1,079838 1,078810 1,047962 1,000914 1,010504 1,007878 1,002893 gorilla.txt 1,142447 0,930153 1,124150 1,051696 1,111501 1,041401 1,059725 1,049517 1,059725 1,096777 1,029103 1,107635 0,944998 0,824074 0,922091 1,173510 0,923382 0,927335 1,138787 1,052757 1,041642 1,019469 1,007720 hippopotamus.txt 1,143739 0,916433 1,125704 1,052510 1,112202 1,041844 1,060290 1,048697 1,060290 1,098509 1,029499 1,108659 0,938023 0,927856 0,888043 1,173747 0,920610 0,914028 1,139465 1,052330 1,042500 1,019922 1,007903 horse.txt 1,143452 0,917786 1,124150 1,052714 1,111851 1,041180 1,059819 1,047724 1,059819 1,098413 1,029261 1,108545 0,934436 0,928013 0,892249 1,172649 0,912889 0,906156 1,139330 1,053061 1,042339 1,019964 1,007857 human.txt 1,145606 0,937463 1,126093 1,053596 1,112728 1,042066 1,060854 1,049990 1,060854 1,099567 1,029579 1,109569 0,943039 0,823541 0,921928 1,174069 0,930311 0,934874 1,140958 1,052208 1,043357 1,020170 1,007903 manic.mid 1,061172 1,111564 1,021566 1,019403 1,013850 1,010461 1,011757 1,006146 1,011757 1,031842 1,010230 1,019684 1,107413 1,113888 1,111756 1,076923 1,109285 1,111043 1,061457 1,006397 1,012755 1,004620 1,002649 mops1m1.mid 1,082137 1,076527 1,017748 1,013636 1,012973 1,006199 1,002069 0,995038 1,002069 1,032804 1,011816 1,025600 1,075954 1,079389 1,078435 1,095420 1,076718 1,076145 1,081264 1,017789 1,006860 1,005073 1,004857 mops2m3.mid 1,083860 1,088109 1,019817 1,020014 1,021213 1,008690 1,010064 0,998166 1,010064 1,030784 1,012053 1,028217 1,086887 1,090708 1,088924 1,103101 1,086122 1,087655 1,082757 1,016083 1,012326 1,004950 1,005147 mozar.mid 1,065192 1,082806 1,017097 1,015197 1,014727 1,007085 1,007054 0,997421 1,007054 1,026166 1,009635 1,019911 1,081905 1,084660 1,083917 1,081957 1,082162 1,082571 1,065527 1,011940 1,010451 1,004207 1,004659 mozart.mid 1,081562 1,070161 1,017486 1,015807 1,024544 1,005314 1,006490 0,995198 1,006490 1,032131 1,010705 1,029127 1,068752 1,072364 1,072301 1,101893 1,069689 1,070978 1,080043 1,019312 1,007771 1,005692 1,004888 zaffiro.bmp 0,935825 1,143018 1,093230 1,059159 1,077010 1,044888 1,076749 1,041467 1,076749 1,081866 1,022917 1,068153 1,143865 1,144852 1,144570 0,933709 1,144570 1,142313 0,937593 1,020469 1,034139 1,015839 1,007796 CompLearn: Step 2 Step 2: Creare un albero maketree distmatrix.txt Qui usiamo la matrice di distanza creata precedentemente per creare un albero binario senza radice. L’albero risultante viene dato in output come file .dot chiamato di default treefile.dot. Tale file .dot descrive come sono connessi i nodi dell’albero e quali sono le loro label. Se la matrice è piuttosto grande, maketree potrebbe impiegare diverso tempo prima di completare. Treefile.dot graph "tree" { label="S(T)=0.954771"; 0 [label="calcite.bmp"]; 1 [label="cat.txt"]; 2 [label="dog.txt"]; 3 [label="dolomite.bmp"]; 4 [label="elephant.txt"]; 5 [label="Gente"]; 6 [label="gorilla.txt"]; 7 [label="hippopotamus.txt"]; 8 [label="horse.txt"]; 9 [label="human.txt"]; 10 [label="manic.mid"]; 11 [label="mops1m1.mid"]; 12 [label="mops2m3.mid"]; 13 [label="mozar.mid"]; 14 [label="mozart.mid"]; 15 [label="zaffiro.bmp"]; 16 [label=""]; 17 [label=""]; 18 [label=""]; 19 [label=""]; 20 [label=""]; 21 [label=""]; 22 [label=""]; 23 [label=""]; 24 [label=""]; 25 [label=""]; 26 [label=""]; 27 [label=""]; 28 [label=""]; 29 [label=""]; 0 -- 19 [weight="2"]; 1 -- 29 [weight="2"]; 2 -- 24 [weight="2"]; 3 -- 27 [weight="2"]; 4 -- 17 [weight="2"]; 5 -- 27 [weight="2"]; 6 -- 16 [weight="2"]; 7 -- 29 [weight="2"]; 8 -- 18 [weight="2"]; 9 -- 21 [weight="2"]; 10 -- 22 [weight="2"]; 11 -- 20 [weight="2"]; ------------------------ CompLearn: Step 3 Step 3: Lay Out dell’albero C:\Programmi\Graphviz2.18\bin\neato –Tpng treefile.dot >mytree.png Questo comando neato creerà il file mytree.png che contiene una rappresentazione a video dell’albero. Tale comando è messo a disposizione dal software open-source GraphViz. Step 4: Analisi dei risultati
© Copyright 2024 ExpyDoc