Università degli studi di Genova

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Università degli studi di Genova"

Transcript

1 Università degli studi di Genova Facoltà di Ingegneria TESI DI LAUREA Sviluppo di un modulo ad elevate prestazioni per Data Mining con SQL Server Relatore: Prof. Ing. Davide Anguita Correlatore: Dott. Ing. Alessandro Ghio Allievo: Paolo Ferrazza 24/09/2010 A.A. 2009/2010

2 Abstract A high performance SQL Server plug-in for Data Mining With this work we created a data mining plug-in for Microsoft SQL Server Our plug-in is able to achieve high precision classification on both two-class and multiclass problems. It can be installed in Analysis Services, which is the data mining suite of SQL Server 2008, and it can perform classification on any database table. The plug-in implements a Support Vector Machine (SVM), it s user friendly and it can outperform any other existing SQL Server plug-in (form Microsoft or third parties). The first half of this thesis wants to cover the theory behind the plug-in: data mining, SVMs, SQL Server and Analysis Services. Then we describe how we implemented the plug-in and finally we test it on some well-known benchmarking datasets. II P a g i n a

3 Dichiarazione del relatore Alla Commissione di Laurea e di Diploma Sottopongo la tesi redatta dallo studente Paolo Ferrazza dal titolo : Sviluppo di un modulo ad elevate prestazioni per Data Mining con SQL Server. Ho esaminato, nella forma e nel contenuto, la versione finale di questo elaborato scritto, e propongo che la tesi sia valutata positivamente assegnando i corrispondenti crediti formativi. Il Relatore Accademico Prof. Davide Anguita III P a g i n a

4 Ai miei genitori. IV P a g i n a

5 Indice Abstract...II Dichiarazione del relatore...iii Indice...IV Capitolo 1 - Introduzione...1 Capitolo 2 - Data Mining Terminologia Il processo di Data Mining Definizione degli obbiettivi Organizzazione dei dati Analisi esplorativa dei dati Scelta delle metodologie di analisi Analisi dei dati Valutazione dei metodi statistici e dei risultati ottenuti Implementazione dell algoritmo...12 Capitolo 3 - Machine Learning Definizione formale del problema Apprendimento supervisionato Classificazione binaria Classificazione multi classe Regressione...17 V P a g i n a

6 3.3 - Apprendimento non supervisionato Metodi locali...20 Capitolo 4 - Support Vector Machines in classificazione Support Vector Machines lineari Problemi linearmente separabili Introduzione del soft margin Support Vector Machines non lineari e kernels Utilizzo dei kernel La SVM non lineare Estensione al caso multiclasse All Versus All One Versus All Augmented Binary...40 Capitolo 5 - Microsoft SQL Server e Data Mining Perché SQL Server? Database Relazionali RDBMS SQL Server: architettura, servizi e strumenti Immagazzinamento dei dati Recupero dei dati...51 VI P a g i n a

7 Servizi aggiuntivi Analysis Services OLAP: terminologia base Integrazione con i prodotti di Microsoft Office Ambienti di sviluppo per Analysis Services Data mining in SSAS Algoritmi di data mining per Analysis Services esistenti...60 Capitolo 6 - Implementazione del modulo per Data Mining Librerie per SVM Model selection e stima dell errore Realizzazione del modulo aggiuntivo La classe Metadata La classe Algorithm La classe SmartLabAlgo La classe AlgorithmNavigator Il programma di installazione...85 Capitolo 7 - Fase di test I datasets Procedura di test Risultati degli esperimenti...92 VII P a g i n a

8 Performance in classificazione Velocità degli algoritmi Considerazioni finali...98 Capitolo 8 - Conclusioni Bibliografia VIII P a g i n a

9 Capitolo 1 Introduzione La presente tesi nasce e si evolve al DIBE (Dipartimento di Ingegneria Biofisica ed Elettronica dell Università di Genova) più precisamente al laboratorio Smartlab ed è finalizzata alla creazione di un modulo (plug-in) per Microsoft SQL Server che permetta di eseguire Data Mining ad alto livello di precisione. In particolare il modulo sviluppato permette la classificazione (biclasse o multiclasse) a partire da una qualunque tabella facente parte di un database di SQL Server. Il plug-in, infatti, si va ad aggiungere a quelli pre-esistenti nella suite di Data Mining di SQL Server ovvero Analysis Services. La classificazione è ottenuta tramite l implementazione di una Support Vector Machine. Il risultato è un applicativo user friendly che permette in pochi e intuitivi passi di analizzare grandi quantità di dati presenti nel database in esame con risultati ottimi se comparati ai plug-ins esistenti. La tesi è così organizzata: Capitolo 2: introduzione al Data Mining e alle metodologie utilizzabili. Descrizione del processo di Data Mining ovvero dei passi necessari alla sua esecuzione. Capitolo 3: definizione formale e informale del Machine Learning. Descrizione dei vari tipi di apprendimento (supervisionato, non supervisionato e metodi locali). Capitolo 4: esposizione della teoria riguardante le Support Vector Machines con particolare interesse al loro utilizzo in problemi di classificazione biclasse e multiclasse. 1 P a g i n a

10 Capitolo 5: introduzione al concetto di database relazionale, panoramica delle principali caratteristiche di SQL Server 2008, approfondimento della suite di servizi Analysis Services. Capitolo 6: spiegazione della metodologia di sviluppo del modulo aggiuntivo di data mining e descrizione delle principali classi C# create. Capitolo 7: presentazione dei dataset e delle procedure utilizzate per gli esperimenti e esposizione dei risultati ottenuti. Capitolo 8: considerazioni finali e possibili sviluppi futuri. 2 P a g i n a

11 Capitolo 2 Data Mining Il Data Mining è il processo di selezione, esplorazione e modellamento di grandi quantità di informazioni così da scoprire relazioni e ottenere risultati chiari e utili al proprietario del database dal quale le informazioni provengono. [1] Tale processo è sempre più utilizzato in svariati campi e applicazioni come il marketing, la ricerca di frodi, il text mining, la ricerca scientifica. Le metodologie utilizzate nel Data mining provengono da due mondi diversi, in generale: 1. alcuni algoritmi sono stati sviluppati nell ambito del Machine Learning (ML), il cui scopo è di cercare di rappresentare nel miglior modo possibile il processo di generazione dei dati, in modo tale da evitare la mera memorizzazione dei dati in favore di un più efficace processo di generalizzazione del modello anche a casi non ancora osservati. Il primo esempio di algoritmo di ML è stato il percettrone di Rosenblatt [2], dal quale hanno avuto origine modelli sempre più complessi come i MultiLayer Perceptrons (MLP), facenti parte della categoria delle reti neurali (Neural Networks, NN). Negli ultimi dieci anni circa, ha preso sempre più piede, nel campo del ML, l algoritmo Support Vector Machine (SVM), che, basandosi su una teoria statistica molto solida e chiamata Statistical Learning Theory (SLT) [3], costituisce l attuale stato dell arte nel campo del Machine Learning, almeno per quanto riguarda l ambito della classificazione; 2. altri metodi sono stati invece sviluppati nell ambito delle cosiddette statistica multivariata e statistica computazionale: è il caso, per esempio, di algoritmi basati sulle teorie di Bayes, come il Naive Bayesian Classifier (NBC) [4]. 3 P a g i n a

12 Volendo unire assieme nel mondo del DM i principi della statistica e del ML, possiamo dire che gli algoritmi di DM devono permettere un analisi approfondita dei dati (come i modelli statistici), ma devono anche garantire una sorta di non memorizzazione del dato (la generalizzazione del ML). Nelle analisi degli algoritmi di DM, si parte dal principio che ogni dato sia in qualche modo affetto da rumore. Se noi memorizzassimo ogni possibile associazione, senza cercare di estrarre informazione, non avremmo più Data Mining, per la precisione non avremmo più il Mining. Si viene, quindi, a porre un trade off tra memorizzazione e capacità di generalizzazione dei dati disponibili: in pratica, non dovremo avere né un modello troppo complicato (ovvero, che memorizza perfettamente sia il dato disponibile sia il rumore che affligge per definizione i dati a nostra disposizione), né troppo generale, ovvero non più in grado di descrivere adeguatamente la sorgente dei nostri dati. 2.1 Terminologia Viene definito dataset un insieme di dati a disposizione per l analisi: può essere un data warehouse, un data mart o parte di essi. In particolare, il dataset utilizzato per creare un modello viene detto training set, in quanto utilizzato nella fase di training, ovvero di creazione del modello stesso. Quest ultimo, così trovato, verrà quindi usato nella cosiddetta fase in avanti o feedforward, ovvero lo step di applicazione a run time. Un dataset è composto, come dice il nome stesso, di dati: ogni osservazione viene chiamata pattern. Ogni pattern è caratterizzato da un insieme di valori, detti variabili (variables), attributi (attributes) o features. Ad ogni pattern può essere assegnato un target, ovvero un valore indicante una particolare proprietà di ogni pattern. In pratica, una feature svolge il ruolo di target, se così deciso da noi. 4 P a g i n a

13 Useremo la seguente notazione per indicare un dataset dotato di target: {(x 1,y 1 ),...,(x l,y l )}, con x i R m indicanti i pattern. Quindi, m è il numero di feature, l è il numero di pattern, mentre y i varia, come detto, a seconda del tipo di problema: se y i { 1, 1} oppure y i {0, 1}, si parla di classificazione binaria; se y i S ℵ, ovvero il target può assumere solo un certo set di valori interi, si parla di classificazione multiclasse; se y i R si parla di regressione, ed equivale di fatto a trovare una relazione f( ) del tipo y = f(x). 2.2 Il processo di Data Mining Viene definito processo di Data Mining una serie di operazioni che vanno dalla definizione preliminare degli obbiettivi per l analisi fino alla valutazione dei risultati ottenuti. Di seguito, elenchiamo le varie attività che lo caratterizzano, quindi, nei successivi paragrafi, daremo maggiori dettagli sulle varie fasi di progetto: 1. Definizione degli obbiettivi per l analisi; 2. Selezione, organizzazione ed eventuale preprocessing dei dati; 3. Analisi esplorativa dei dati ed eventuale trasformazione di questi; 4. Scelta delle metodologie di analisi da usare (e comparare); 5. Analisi dei dati, sulla base dei metodi scelti al passo precedente; 6. Comparazione e valutazione delle prestazioni dei diversi metodi; scelta della metodologia di analisi da utilizzare a run time; 7. Implementazione del modello scelto, interpretazione dei risultati che esso fornisce ed utilizzo di questi ultimi nel processo decisionale. 5 P a g i n a

14 2.2.1 Definizione degli obbiettivi Sebbene questa fase sembri la più immediata e semplice, non è sempre così: spesso gli obbiettivi e le problematiche da affrontare non sono così chiari, né è chiaro quali dati, coefficienti o tipologie di analisi debbano essere applicate. Di sicuro, la grande massa di dati a disposizione non aiuta in questo step. Questa fase è di certo la più critica, e spesso viene sottovalutata: è importante che gli obbiettivi dell analisi siano definiti precisamente a priori e non persistano dubbi prima di passare alle fasi successive Organizzazione dei dati Una volta terminata la fase di definizione degli obbiettivi, iniziamo a considerare i dati a nostra disposizione. La prima fase consiste in una preliminare pulizia del dataset, detta data cleansing: si analizzano tutte le variabili che caratterizzano i dati alla ricerca di possibili valori mancanti (missing), palesemente sbagliati (incorrect) o inutili. Questa fase aiuta anche, in maniera retroattiva, a migliorare (se necessario) la qualità della sorgente dati. Inoltre, il data cleansing permette di effettuare anche una scelta tra variabili utili e inutili al fine dell analisi (per esempio, eliminando features con molti valori missing). La seconda fase consiste nella creazione di subset di dati: questo step è necessario soprattutto quando ci troviamo a trattare masse davvero imponenti di dati, per le quali l utilizzo di tutto il set di dati spesso porta ad avere meno informazione (meglio, un informazione meno pulita ) rispetto all utilizzo di sottoinsiemi di esso opportunamente scelti. In generale, l utilizzo di dataset troppo grandi può portare al fenomeno dell overfitting, ovvero alla memorizzazione dei dati (e della realizzazione particolare del rumore che li affligge). Inoltre i dati non selezionati possono 6 P a g i n a

15 diventare un ottimo banco di prova per verificare le prestazioni del modello durante la fase di test del modello. La selezione dei subset, tuttavia, è tutt altro che banale, ed è stata affrontata spesso in letteratura [5,6] Analisi esplorativa dei dati Un analisi esplorativa dei dati è spesso determinante al fine di incrementare la qualità dei risultati ottenuti. Queste metodologie di analisi, simili nella loro filosofia alle tecniche OLAP (OnLine Analytical Processing), permettono di comprendere meglio l origine dei nostri dati e trovare relazioni di base che possono risultare di cruciale importanza per il modello operativo. L analisi dei dati passa anche attraverso una selezione dei dati stessi e, in particolare, si parla di: feature selection (altresì variable selection); feature analysis (altresì variable analysis); outlier detection. La feature selection consta nella selezione di un sottoinsiemi di variabili, caratterizzanti ogni dato, che permettono di preparare e riorganizzare il nostro insieme di dati in modo da rendere più semplice e più performante le analisi dei passi successivi. Selezionare un sottoinsieme di variabili può essere utile in quanto: spesso feature poco informative peggiorano le prestazioni di un modello; molti algoritmi soffrono la curse of dimensionality in rapporto al numero di feature. Non è sempre vantaggioso, comunque, ridurre il numero di variabili, in quanto tutto dipende dal tipo di analisi che vogliamo affrontare. La feature selection va applicata con molta attenzione e solo sapendo esattamente ciò che si sta facendo e l analisi che vorremo applicare in seguito. 7 P a g i n a

16 La feature analysis, invece, consiste nell analizzare le caratteristiche statistiche di base del nostro insieme di dati e notificare (se è il caso) l eventuale mancanza di ulteriori variabili, che potrebbero facilitare le operazioni successive. Di fatto, la feature analysis permette di capire preventivamente se è meglio intervenire sulla sorgente dati o se le variabili che abbiamo a disposizione dovrebbero essere sufficienti per gli algoritmi da applicare. Per spiegare più in dettaglio l operazione di outlier detection, invece, dobbiamo definire innanzitutto cos è un outlier. Un dato viene detto outlier se è palesemente afflitto da un picco di rumore, quindi se è estremamente sbagliato. Supponiamo di voler ricostruire una relazione del tipo y = f(x) in un intervallo [0, 1] a partire da alcuni valori campionati (x c,y c ) e di trovare dei sample come in Fig Figura 2.1 Campioni del segnale ignoto y = f(x). In 0.8, si noti il presunto outlier Con ogni probabilità, il campione in 0.8 è sbagliato, magari perchè in quel momento sul sistema è intervenuto un picco di disturbo. Nella ricostruzione del segnale, 8 P a g i n a

17 mantenere o eliminare l outlier può avere influenze importanti sulla qualità del risultato finale: le Figg. 2.2 e 2.3 mostrano due approssimazioni del segnale includendo e escludendo l outlier. Abbiamo detto che un outlier è un dato estremamente sbagliato: ma estremamente, di preciso, cosa significa? Ovviamente, il tutto varia da caso a caso, e molto si basa sulle eventuali informazioni a priori che potremmo avere a disposizione. Nel caso di Fig. 2.1, qualora sapessimo che i dati hanno un andamento lineare, ovviamente l outlier deve essere escluso; senza informazioni a priori, corriamo comunque un rischio. Spesso, proprio per i motivi precedentemente presentati, l outlier detection è considerata, a tutti gli effetti, un metodo statistico da valutare attentamente sulla base della qualità dei risultati ottenuti e viene pertanto spostata dalla fase di analisi esplorativa dei dati alle fasi successive del processo di DM. Figura 2.2 Approssimazione escludendo l outlier. 9 P a g i n a

18 Figura 2.3 Approssimazione includendo l outlier Scelta delle metodologie di analisi Ci sono moltissimi metodi statistici e ognuno di essi è stato implementato in una miriade di algoritmi: è importante, quindi, una classificazione di tali metodi, al fine di fare un po di ordine. La scelta del metodo dipende dal tipo di analisi che vogliamo fare, che a sua volta dipende dagli obbiettivi prefissati e dai dati che abbiamo a disposizione. Per questo motivo, si dice che il Data Mining Process è guidato dall applicazione. Le principali classi di metodi statistici sono: Metodi descrittivi; Metodi predittivi; Metodi locali. 10 P a g i n a

19 Metodi descrittivi Anche detti metodi non supervisionati (unsupervised) o indiretti, mirano a raggruppare i dati sulla base di relazioni non note (e potremmo dire non notabili ) a priori o con un analisi esplorativa. Nel dataset, non è presente il target. E il caso del clustering. Metodi predittivi Anche detti metodi supervisionati (supervised) o diretti, hanno come obbiettivo trovare relazioni tra feature e target, al fine di identificare relazioni di classificazione o predizione. Nel dataset utilizzato è sempre presente un target. E il caso dei problemi di classificazione biclasse e multiclasse e della regressione. Metodi locali Hanno come obbiettivo identificare particolari caratteristiche e relazioni su sottoinsiemi del dataset. Esempi sono le association rules. Non solo: anche il problema della outlier detection può essere considerato un metodo locale e, come tale, potrà poi essere sottoposto ad attenta valutazione negli step successivi del DM Process Analisi dei dati A questo punto, scelto il metodo (o i metodi) con cui vogliamo affrontare l analisi dei dati, scelti gli algoritmi e scelti gli obbiettivi, non ci rimane che dare inizio alle operazioni. In questa fase, potrebbero essere usati software ad hoc, ma, spesso, ci si affida ad applicazioni già sviluppate disponibili in commercio (ad esempio all interno di SQL Server Analysis Services) o per il libero download. 11 P a g i n a

20 2.2.6 Valutazione dei metodi statistici e dei risultati ottenuti Terminata l analisi con tutti i metodi prescelti, non ci resta che definire (se non l abbiamo già fatto in precedenza) dei coefficienti per la comparazione. Per esempio, nel caso di classificazione, un buon termine di paragone potrebbe essere l errore previsto a run time per ogni metodo e algoritmo, al fine di scegliere quello che sbaglierà meno. Per trovare questi (o altri) coefficienti, e affinchè essi siano affidabili, è necessario, di norma, affidarsi a metodi di tipo statistico come ad esempio la Cross Validation. Tali tecniche ci devono permettere una valutazione rapida, semplice e affidabile. Spesso un coefficiente per la comparazione non è sufficiente, ma è necessario considerare altri fattori quali vincoli temporali o di risorse, qualità e stabilità del risultato ottenuto, e molto altro ancora Implementazione dell algoritmo Concludiamo questa carrellata sul DM Process con la fase di realizzazione del modello: una volta scelto, esso dovrà essere implementato a tutti gli effetti (la già citata fase feedforward). Anche in questo caso, ci si può affidare ad eseguibili in commercio o freeware. Data l usuale semplicità di implementazione della fase in avanti di molti algoritmi, si possono realizzare codici e programmi ad hoc, ottimizzati e personalizzati in base alle proprie esigenze. 12 P a g i n a

21 Capitolo 3 Machine Learning Come affermato nel capitolo precedente i principali algoritmi utilizzati nell ambito del Data Mining provengono dal Machine Learning. Figura 3.1 Rappresentazione schematica del Machine Learning Lo scenario tipico è presentato in figura 3.1: abbiamo un sistema di cui non sappiamo niente se non gli input x (scalari o vettoriali) e gli output y. Dopo aver immagazzinato un certo numero di coppie (x,y) ovvero dopo aver ottenuto un dataset esso viene passato alla learning machine LM (fase di apprendimento o di induzione). E importante che i campioni del dataset siano indipendenti e identicamente distribuiti (iid) ovvero che il processo di selezione delle varie campioni (x,y) lasci inalterata la distribuzione di probabilità generatrice degli stessi campioni. Durante la fase di apprendimento alla LM viene anche data come input la differenza tra il suo output e quello del sistema reale. 13 P a g i n a

22 Finita la fase di apprendimento la macchina è in grado di stimare con buona approssimazione l output che darebbe il sistema black box a partire da un determinato input x. La LM ha quindi creato un modello ed è in grado di predire un uscita y anche su un input x che non le era stato fornito in fase di apprendimento. La connessione tra tale modello e le informazioni non è univoca in quanto possiamo pensare a più modelli che generino le stesse informazioni. Quindi durante la fase di induzione deve essere effettuata una scelta tra i possibili modelli e di conseguenza devono essere prefissati dei criteri di scelta (problema della model selection). Essendo interessati ad ottenere le performance migliori possibili sceglieremo un modello che minimizzi la stima dell errore di generalizzazione cioè che riesca a predire l output reale anche su campioni sconosciuti o comunque non osservati in precedenza. 3.1 Definizione formale del problema Poniamo x variabile n-dimensionale, ovvero x R n, definita in un dominio. Assumiamo inoltre che una funzione di densità di probabilità (pdf) P(x) sia definita nel dominio e di avere a disposizione un set X di l campioni iid: X = x 1, x 2,, x l. (3.1) Definiamo pattern ogni campione x i e feature ogni variabile del pattern (x i ) j con j=1,...,n. Poniamo y R variabile random definita su un dominio Questa variabile dipende da x tramite un processo non conosciuto ed è caratterizzata da una pdf P(y x) e rappresenta il target da stimare. 14 P a g i n a

23 Consideriamo una regola generica f (α, ), che dipende da un set di parametri α La learning machine implementa f (α, ) e con una appropriata scelta degli α ha la capacità di stimare y associato ad un genrico pattern di ingresso x: f (α, x) = y y. (3.2) Al fine di quantificare la performance del funzionale y = f (α, x) usiamo il funzionale di rischio R( ): R α = L y, f α, x dp(x, y), (3.3) dove L(y, y) è la funzione di perdita che quantifica la discrepanza tra il target vero e quello stimato. Sfortunatamente l espressione del funzionale P(x, y) non è conosciuta. L obbiettivo della fase di apprendimento consiste nel trovare i valori dei parametri α che permettono di minimizzare il funzionale di rischio senza sapere (in generale) la pdf degli input e dei target. L unica quantità a nostra disposizione sono alcuni campioni di input e target. L apprendimento macchina è diviso in due grandi categorie: supervisionato e non supervisionato. 3.2 Apprendimento supervisionato Nell apprendimento supervisionato l obbiettivo è stimare l output di un processo decisionale ovvero si vuole trovare una relazione tra l input del sistema e il target che in questo caso può essere osservato, cioè i suoi valori sono presenti in fase di training. Tramite questa relazione è possibile classificare pattern forniti successivamente ovvero predire il loro target. A seconda del tipo di valori di target esistono diversi tipi di apprendimento. 15 P a g i n a

24 3.2.1 Classificazione binaria Il target è di tipo binario, solitamente y ±1 oppure y 0,1 e ognuno dei 2 valori rappresenta quindi una classe. Figura 1.2 mostra un esempio di problema di classificazione binaria nel quale le due classi sono rappresentate da cerchi rossi e crocette blu. Una funzione di perdita molto usata in questo tipo di problemi è la seguente (hard loss function): L H y, y = 0 if yy > 0 1 if yy 0, (3.4) ma in generale non rappresenta necessariamente la scelta migliore. Figura 3.2 Esempio del problema di classificazione binaria Ad ogni modo, sostituendo nell equazione (3.3) la (3.4), supponendo di conoscere la pdf dei pattern di input e dei target, si ottiene la probabilità di errore della regola f(.,.). 16 P a g i n a

25 3.2.2 Classificazione multiclasse Nella vita reale i problemi di classificazione solitamente non si limitano a due classi ma, in generale, i valori di target possono appartenere a un insieme finito discreto e non ordinato ovvero y N dove N è l insieme dei numeri naturali non negativi. Fig.3.3 mostra un esempio di problema di classificazione con tre classi. Questo tipo di problemi possono essere affrontati con algoritmi di apprendimento oppure scomponendo il problema in più sottoproblemi di classificazione binaria. Per le funzioni di perdita si può fare un discorso analogo a quello fatto in precedenza per la classificazione binaria. Figura 3.3 Esempio del problema di classificazione multiclasse Regressione Nel caso della regressione il target del processo sconosciuto è un valore continuo ovvero y R. Fig. 3.4 mostra graficamente un esempio di predittore monodimensionale. 17 P a g i n a

26 Figura 3.4 Esempio del problema di regressione Una possibile funzione di perdita che valuti la differenza tra l output vero e quello stimato è la distanza euclidea quadratica: L y, y = y y 2 2 = (y y) 2, (3.5) dove la seconda relazione è vera in quanto consideriamo un target scalare. Ad ogni modo nella letteratura ne vengono usati tanti altri tipi ma minimizzare il funzionale di eq. (3.3) usando la (3.5) permette di trovare il miglior regressore. Nell affrontare problemi del mondo reale vengono utilizzati dispositivi hardware per risolvere problemi di regressione e di classificazione. Ognuno di essi ha una sua precisione (per i personal computers moderni 32 o 64 bits) e nessun numero continuo può essere rappresentato esattamente: in altre parole questo significa che teoricamente ogni problema di regressione può essere riportato ad un problema di classificazione multiclasse con un enorme numero di classi (2 32 > classi). La vera differenza però sta nel fatto che nei problemi di regressione si suppone ci sia un ordine tra i valori di target e che quindi l uso di una funzione di perdita basata sul concetto di distanza sia lo strumento più naturale col quale quantificare gli errori. Al 18 P a g i n a

27 contrario nella classificazione multiclasse non c è un ordine tra i diversi valori di target e la funzione di perdita evidenzia solamente se la classificazione è corretta o no. 3.3 Apprendimento non supervisionato Nel apprendimento supervisionato un target può essere associato ad ogni input. Quando questa associazione diventa impossibile (ad esempio perché il sistema non ha un output esplicito oppure esso non è osservabile), il processo di apprendimento consiste nello stimare la distribuzione di probabilità, che genera il campione X, da un insieme di possibili P(α, x ): questo si chiama apprendimento non supervisionato. Una funzione di perdita adatta a minimizzare il rischio nel caso dell apprendimento non supervisionato è la seguente: L α = 1 l l i=1 log (P(α, x)). (3.6) Un applicazione tipica dell apprendimento non supervisionato è il clustering che consiste nel trovare somiglianze tra gruppi (clusters) di pattern di input. Il clustering è utilizzato spesso dalle compagnie telefoniche per identificare clienti che fanno parte dei cattivi pagatori oppure dalle compagnie di carte di credito per scoprire eventuali truffe. Fig. 3.5 rappresenta graficamente un esempio di clasutering di patterns bidimensionali raggruppati in tre clusters. 19 P a g i n a

28 Figura 3.5 Esempio di clustering 3.4 Metodi locali Un particolare caso delle tecniche di apprendimento non supervisionato sono i metodi locali che ricercano relazioni tra parti o sottoinsiemi di un dataset. Ad esempio, A priori [7], che è uno degli algoritmi più usati per trovare regole di associazione tra le features di un dataset, è un metodo locale. I metodi locali sono tecniche non supervisionate in quanto non sfruttano la possibile presenza di un target (che eventualmente è considerato come una feature qualunque) ma differiscono da tali tecniche in quanto considerano gruppi di features invece che sottoinsiemi di pattern nell eseguire l analisi. Inoltre l output non consiste in un vettore di coefficienti α che potrebbero essere utilizzati in seguito per la classificazione o il clustering di ulteriori pattern bensì è una serie di 20 P a g i n a

29 regole, relazioni, ecc... che possono essere utilizzate per una maggiore comprensione del dataset stesso. Facciamo un breve esempio. Supponiamo di dover gestire una catena di supermercati e che ognuno di essi, durante ogni giorno della settimana, raccolga informazioni riguardanti i prodotti venduti: ogni ricevuta viene immagazzinata (è un pattern) e ognuna contiene i prodotti venduti (ovvero le features). Dopo aver raccolto una certa quantità di informazioni possiamo usare un metodo locale per cercare associazioni tra le features del dataset così da identificare un gruppo di prodotti (ovvero di features) che vengono spesso venduti assieme; ciò potrebbe essere importante ad esempio per pianificare offerte speciali. Risulta evidente che finita la fase di apprendimento abbiamo le informazioni che ci servivano e non ci serve un modello da applicare ad altri dati (al massimo potremmo voler affinare la correttezza delle regole ottenute con un numero maggiore di informazioni ricavate successivamente). Ad ogni modo anche una tecnica di claustering sarebbe utile in questa situazione in quanto potremmo ricavare dei gruppi (clusters) di persone che comprano gli stessi prodotti e questo sarebbe utile come ricerca di marketing. 21 P a g i n a

30 Capitolo 4 Support Vector Machines in classificazione Mentre molti studiosi tra Stati Uniti ed Europa dibattevano negli anni 60 e 70 su percettrone, XOR e MLP (Multi Layer Perceptron), in Unione Sovietica due matematici, Vapnik e Chervonenkis, svilupparono una teoria, detta Statistical Learning Theory (SLT), che avrebbe trovato definitiva applicazione solo nella seconda metà degli anni 90 e che avrebbe rivoluzionato il mondo delle reti neurali. L idea si basa su due concetti fondamentali: 1. un classificatore deve essere sufficientemente complesso da riuscire a classificare efficacemente set di dati anche particolarmente mal posizionati (deve evitare l underfitting); 2. tale classificatore non deve essere, però, troppo complicato, altrimenti si subirebbero gli effetti dell overfitting. Nacque così la Support Vector Machine (SVM). L iniziale scarso successo della SVM è dovuto a diversi fattori: innanzitutto, la teoria è stata sviluppata in piena Guerra Fredda nell URSS, quindi non è stata volutamente divulgata al di qua di Trieste, per dirla con Churchill; in secondo luogo, la SVM presentava non pochi problemi pratici. Per realizzare, infatti, l obbiettivo di evitare l overfitting, era stata sviluppata una teoria, detta di Vapnik Chervonenkis o VC Theory, che permetteva di calcolare il grado di complessità di una famiglia di classificatori, ma in maniera tutt altro che pratica. Inoltre, la versione originale di SVM era in grado di trattare solo dataset linearmente separabili. Fu solo negli anni 90, al termine della Guerra Fredda, che Vapnik iniziò a lavorare negli USA presso il laboratorio di ricerca della AT&T e, grazie al fondamentale aiuto di Corinna Cortes, nacque la SVM così come la conosciamo oggi [3, 8]. 22 P a g i n a

31 In questo capitolo vengono introdotti brevemente i concetti principali riguardanti le Support Vector Machines per la classificazione biclasse e multiclasse. 4.1 Support Vector Machines lineari Problemi linearmente separabili Si consideri un semplice problema biclasse linearmente separabile come quello mostrato in Fig Figura 4.1 Esempio di un insieme di punti linearmente separabili Prendiamo in esame un insieme di classificatori lineari: f x = w x + b. (4.1) 23 P a g i n a

32 Per questi dati esistono diversi possibili classificatori che non commettono errori sui dati di training (Fig. 4.2). L algoritmo di SVM permette di trovare in maniera relativamente facile un iperpiano separatore a bassa complessità (ovvero con margine ampio) e con un basso rate di errore sui pattern disponibili (Fig. 4.3). In pratica w e b sono scalati in modo che ci sia almeno un pattern nel dataset per il quale: y j f x j = 1 (4.2) e, per tutti i punti del dataset sia vera la seguente condizione: y j f x j 1 (4.3) Queste due condizioni possono sempre essere soddisfatte in un problema linearmente separabile in quanto esistono sempre appropriati fattori di scalamento dei coefficienti. Figura 4.2 Esempio di due classificatori qualunque 24 P a g i n a

33 Figura 4.3 Iperpiano a margine massimo Vogliamo esprimere il margine M in funzione della soluzione ovvero M(w, b) così trovare il classificatore diventerebbe un problema di ottimizzazione. Consideriamo l iperpiano separatore w x + b = 0 per un particolare insieme di dati. Consideriamo inoltre un pattern x k e la sua proiezione sull iperpiano separatore x (p) k. Otteniamo: x k = x k (p) + dw w (4.4) dove d è la distanza euclidea tra il pattern x k e l iperpiano separatore. In quanto x k (p) si trova sul piano di separazione otteniamo la distanza d moltiplicando la precedente relazione per w: d = w x k+b w. (4.5) Se x k è tale da risultare w x k + b = +1 ovvero si trova sul confine del margine allora d 2 = w 2 e ne consegue che il margine è uguale a 25 P a g i n a

34 M w, b = 2 w 2. (4.6) Eq. (4.6) è la funzione che descrive il margine la quale dipende dai coefficienti dell iperpiano e dal bias. Possiamo così esprimere il problema di ottimizzazione per la ricerca del margine massimo: min w, b w 2 2 (4.7) y i w x i + b 1, i = 1,, l (4.8) che è chiamata formulazione primale, e che è un problema di programmazione quadratica convessa vincolata (CCQP). Il tutto è schematicamente riassunto in figura 4.4. Figura 4.4 Schema riassuntivo della classificazione in problemi linearmente separabili 26 P a g i n a

35 Introducendo l moltiplicatori di Lagrange α i possiamo scrivere una formulazione alternativa: L p = w 2 2 l i=1 α i [y i w x i + b 1], (4.9) con il vincolo sulla positività dei moltiplicatori di Lagrange (ovvero α i 0). La soluzione può essere trovata risolvendo il seguente sistema [9]: α i 0, i = 1, l L p = 0, j = 1,, n w j L p b = 0. (4.10) Si ottiene: w = l i=1 α i y i x i (4.11) l i=1 y i α i = 0. (4.12) Sostituendo le due equazioni appena ricavate nella formulazione primale (Eq. (4.7)- (4.8)) si ottiene la formulazione duale: min α 1 2 l l l i=1 j =1 α i α j y i y j x i x j i=1 α i (4.13) α i 0, i = 1, l l i=1 y i α i = 0. In generale la soluzione del problema duale è sparsa nel senso che solo un sottoinsieme dei coefficienti α della soluzione è strettamente maggiore di zero. Purtroppo resta ancora da calcolare il valore del bias b che non appare esplicitamente nella formulazione duale. La soluzione consiste nell utilizzare le condizioni di Karush-Kuhn-Tucker (KKT) [10,11], che danno condizioni necessarie e sufficienti per trovare la soluzione di problemi di ottimizzazione convessa come quello primale e quello duale. In particolare una delle condizioni KKT è la seguente: 27 P a g i n a

36 α i y i w x i + b 1 = 0. (4.14) Se consideriamo il pattern i-esimo corrispondente ad una α i > 0 dall equazione precedente si ottiene: y i w x i + b = 1. (4.15) E quindi sufficiente considerare un pattern con α i > 0 e quindi calcolare il bias semplicemente utilizzando Eq. (4.15). I pattern che corrispondono a coefficienti α i > 0 sono gli unici coinvolti nel calcolo di w e di b e sono i cosiddetti Support Vectors (SVs) in quanto sono gli unici utili (di supporto ) per la classificazione finale. Questi punti sono quelli che si trovano sul limite del margine da un punto di vista grafico e sono quelli cerchiati in figura 4.3. La soluzione a margine massimo viene utilizzata per classificare nuovi pattern nella fase in avanti (o feedforward). L iperpiano separatore si può esprimere in funzione dei coefficienti α semplicemente usando l Eq. (4.11) e si ottiene: f x = l i=1 α i y i x i x + b. (4.16) Introduzione del soft margin La formulazione di SVM per problemi linearmente separabili è piuttosto vantaggiosa in quanto trasforma il problema di trovare un iperpiano a margine massimo in un problema di programmazione quadratica convessa vincolata facile da risolvere con svariati strumenti di ottimizzazione. Sfortunatamente la maggior parte dei problemi reali è di tipo non linearmente separabile: in questi casi la SVM formulata nell Eq.(4.7) è inutile in quanto il vincolo di Eq. (4.8) potrebbe non essere mai rispettato utilizzando un classificatore lineare. La soluzione a questo tipo di problemi è stata proposta in [8] e consiste semplicemente nel rilassare gli l vincoli di Eq. (4.8) tramite l utilizzo di altrettante 28 P a g i n a

37 variabili di slack ξ. In figura 4.5 viene mostrato un dataset non linearmente separabile: l errore del pattern x out è misurato utilizzando la variabile ξ out. I vincoli diventano quindi: y i w x i + b 1 ξ i, i = 1,, l (4.17) ξ i 0, i = 1,, l. (4.18) Figura 4.5 Dataset non linearmente separabile con un errore commesso Con questa formulazione, per un generico pattern i-esimo,abbiamo tre possiblità: ξ i = 0: il pattern è classificato correttamente; 0 < ξ i < 1: il pattern è classificato correttamente ma risiede all interno del margine; ξ i 1: il pattern non è classificato correttamente. Il caso particolare di ξ i = 1 identifica un pattern che giace esattamente sull iperpiano separatore. 29 P a g i n a

38 Avessimo semplicemente rimpiazzato il vincolo della formulazione primale di Eq. (4.7) con quelli delle Eq. (4.17) e (4.18) avremmo un algoritmo con il problema dell underfitting ovvero il margine verrebbe massimizzato senza tenere conto del numero degli errori commessi sul dataset. Ad ogni modo, se l i-esimo pattern non è classificato correttamente, ξ i 1: ne deriva che l i=1 ξ i è il limite superiore del numero di errori. Possiamo quindi introdurre l iperparametro C che faccia da contrappeso ovvero che equilibri la ricerca dell iperpiano a margine massimo e la minimizzazione del numero di errori commessi: min w, b, ξ w 2 2 l + C i=1 ξ i (4.19) y i w x i + b 1 ξ i, i = 1,, l (4.20) ξ i 0, i = 1,, l. (4.21) Questa formulazione ci permette di trovare una soluzione semplice (ovvero un margine ampio) con un numero di errori accettabili (ovvero un basso valore di l i=1 ξ i ). Questa è la formulazione primale vera e propria in quanto quella senza l utilizzo del soft margin non ha utilizzi pratici. Possiamo quindi procedere seguendo la stessa strada utilizzata per il caso linearmente separabile. Scriviamo la lagrangiana della primale introducendo in questo caso due insiemi di moltiplicatori di Lagrange α e μ: L p = w 2 2 l l l + C i=1 ξ i i=1 α i y i w x i + b 1 + ξ i i=1 μ i ξ i. (4.22) Possiamo formulare le condizioni KKT per il problema duale: L p w j = 0 w j = l i=1 α i y i (x i ) j, j = 1,, n (4.23) L p l = 0 α b i=1 iy i = 0 (4.24) L p ξ i = 0 C α i μ i = 0, i = 1,, l (4.25) 30 P a g i n a

39 y i w x i + b 1 ξ i, i = 1,, l (4.26) α i y i w x i + b 1 + ξ i = 0, i = 1,, l (4.27) μ i ξ i = 0, i = 1,, l (4.28) C α i ξ i = 0, i = 1,, l (4.29) α i, ξ i, μ i 0, i = 1,, l (4.30) La formulazione duale dell SVM diventa quindi: min α 1 2 l l l i=1 j =1 α i α j y i y j x i x j i=1 α i (4.31) 0 α i C, i = 1,, l l i=1 y i α i = 0, che è la stessa dell Eq. (4.13) a meno del limite superiore di α i. Analogamente al caso linearmente separabile i pattern corrispondenti a α i = 0 sono classificati correttamente. Per quanto riguarda i pattern con α i > 0 si devono considerare diversi casi: 0 < α i < C: questi dati giacciono sul limite del margine e sono detti True Support Vectors (TSVs). Difatti, dall Eq. (4.27), y i w x i + b 1 + ξ i = 0. Inoltre, dall Eq. (4.25), essendo α i < C, otteniamo μ i > 0. Allora dall Eq. (4.28) si ricava che ξ i = 0: questa condizione implica che il dato o è classificato correttamente (è non è questo il caso in quanto α i 0) oppure si trova sul limite del margine. Dall Eq. (4.28), sostituendo ξ i = 0 è inoltre possibile ottenere il valore del bias b considerando uno dei TSV; α i = C: questi pattern giacciono dentro al margine oppure non sono stati classificati in maniera corretta. Questi dati vengono definiti come Bound Support Vectors (BSVs) e possono essere divisi in due sottocategorie: o Un insieme di campioni che si trova all interno del margine. Tra di essi si trovano pattern classificati correttamente e non. 31 P a g i n a

40 o Un altro insieme di campioni classificati in maniera non corretta posizionati all esterno del margine. Per questi pattern y i w x i + b < 1. La funzione per la fase di feedforward con l utilizzo del soft margin è esattamente la stessa utilizzata nel caso dei problemi linearmente separabili (Eq. (4.16)). 4.2 Support Vector Machines non lineari e kernels Nella prima parte di questo capitolo abbiamo analizzato l algoritmo di SVM partendo da un caso molto semplice: due insiemi di dati linearmente separabili ovvero divisibili da un classificatore lineare senza commettere errori. Il posso successivo, l introduzione del soft margin, ha permesso alla SVM di tollerare gli errori: in altre parole la SVM permette ad alcuni pattern di essere classificati erroneamente trovando un compromesso tra il numero di errori e la complessità dell iperpiano. Ad ogni modo, nelle applicazioni reali, un classificatore lineare porta solitamente a performance poco soddisfacenti. Introduciamo ad esempio il problema di figura 4.6: due insieme di dati estremamente sovrapposti. In questo caso un classificatore lineare nello spazio dei pattern di input (ovvero in R n ) non sarebbe in grado di dividere in maniera soddisfacente le due classi. Ci si presentano due possibilità: Passare a un classificatore non lineare: bisognerebbe quindi cambiare la formulazione della SVM e il problema da risolvere potrebbe non essere più CCQP che però è uno degli aspetti più interessanti delle SVM; 32 P a g i n a

41 Mappare in qualche maniera i pattern di input in modo da passare ad uno spazio a più dimensioni rispetto a quello iniziale R n. Le funzioni di kernel descrivono il modo di mappare i dati di input in un nuovo spazio. Figura 4.6 Esempio di due classi molto sovrapposte Utilizzo dei kernel Supponiamo di conoscere una funzione φ( ) capace di mappare un qualunque pattern di input x R n in un nuovo spazio φ(x) H, dove H è caratterizzato da una dimensionalità maggiore rispetto a R n ed è chiamato spazio delle feature. Riassumendo, si suppone di conoscere una funzione φ( ) tale che: φ: R n H (4.32) Se la dimensionalità di H è sufficientemente alta, la classificazione tramite classificatore lineare può essere eseguita compiendo molti meno errori rispetto allo spazio di partenza, a volte addirittura senza compiere errori. Ad esempio supponiamo di conoscere una φ: R 2 R 3 per il problema di figura 4.6 con la quale 33 P a g i n a

42 i pattern, nello spazio delle features, siano disposti come in figura 4.7: la classificazione usando un piano lineare risulterebbe essere molto efficace. Sfortunatamente, di solito, non si conosce la forma esplicita di queste trasformazioni. Comunque è possibile rimpiazzare x con φ(x) nella formulazione della SVM senza cambiarne il funzionamento. Analizzando le Eq. (4.16), (4.19) e (4.31), risulta evidente che ci sono prodotti scalari tra i pattern di input. Definiamo la seguente quantità: K a, b = φ a φ(b), (4.33) dove K, si chiama funzione di kernel. Questa definizione, apparentemente strana, nella letteratura è denominata kernel trick ( trucco del kernel ) ed è stata introdotta da Aizerman [12]: essa rappresenta il cuore di SVM e di molti altri algoritmi di apprendimento. Figura 4.7 Esempio di mappatura non lineare tramite una funzione φ( ) Infatti, mentre φ( ) è spesso sconosciuta, molte funzioni di kernel si trovano nella letteratura e possono essere usate per la mappatura implicita dei pattern nel nuovo 34 P a g i n a

43 (e in generale sconosciuto) spazio delle feature: servono solo i pattern di input (nel loro spazio di origine) e una funzione di kernel. Ovviamente non tutte le funzioni sono funzioni di kernel. Le condizioni necessarie e sufficienti perché una funzione sia un kernel sono descritte dal teorema di Mercer: una funzione è un kernel se e solo se per qualunque g(x) tale che g(x) 2 dx < + vale K x i, x j g x i g(x j )dx i dx j 0. (4.34) A volte verificare se una possibile funzione di kernel soddisfa il teorema di Mercer è particolarmente complicato: è per questo che il progetto dei kernel è un argomento molto importante nell ambito del Machine Learning *13,14+. L algoritmo di SVM non richiede in maniera esplicita che le condizioni del teorema di Mercer siano soddisfatte; ad ogni modo se non lo fossero potrebbero sorgere alcuni problemi durante la procedura di ottimizzazione. Tabella 4.1 Lista delle delle funzioni di kernel più comuni 35 P a g i n a

44 4.2.2 La SVM non lineare Siamo quindi pronti a ricavare la formulazione generale di SVM che fa uso dei kernel. Semplicemente rimpiazzando i prodotti scalari con una generica funzione di kernel K, otteniamo: min α 1 2 l l i=1 j =1 α i α j y i y j K x i, x j i=1 α i (4.35) l 0 α i C, i = 1,, l l i=1 y i α i = 0. Se definiamo una matrice Q tale che i suoi elementi siano: q ij = y i y j K x i, x j, (4.36) possiamo scrivere il problema di Eq. (4.35) in una forma più compatta: min α 1 2 αt Q α + r T α (4.37) 0 α i C, i = 1,, l (4.38) y T α = 0, (4.39) dove r i = 1, i = 1,, l. Una lista dei kernel più utilizzati è rappresentata in tabella 4.1: il kernel lineare permette di ottenere la formulazione lineare di Eq. (4.31), mentre gli altri kernel non lineari introducono dei nuovi iperparametri che devono essere regolati (p per il kernel polinomiale e γ per i kernel gaussiano e laplaciano). I kernel gaussiano e laplaciano sono anche chiamati kernel RBF (Radial Basis Function). Molte tecniche di ottimizzazione classiche possono essere utilizzate per la risoluzione del problema di Eq.( ): una delle più utilizzate è l algoritmo di SMO (Sequential Minimal Optimization) *15,16+. L SMO non fa altro che dividere grossi problemi di Programmazione Quadratica (QP) in problemi più 36 P a g i n a

45 piccoli (sempre di QP) composti da solo due pattern che vengono così risolti in maniera analitica. La funzione di feedforward per la classificazione di nuovi pattern x è: f x = l i=1 y i α i K x, x i + b. (4.40) In quanto solo i SV sono coinvolti nel feedforward possiamo scrivere più semplicemente: f x = l SV y SV SV SV i=1 i α i K x, x i + b, (4.41) dove la notazione SV rappresenta l indice di un Support Vector e l SV il numero totale di SVs trovati nella fase di training. L assegnazione alla classe +1 o -1 avviene calcolando il segno di f x. Se f x = 0 il pattern si trova esattamente sull iperpiano ed esistono due modi per classificarlo: Il pattern viene assegnato a una delle due classi in maniera casuale in quanto si può considerare che abbiano uguale probabilità. Il pattern non viene classificato ma viene ritenuto incerto. Nel calcolo della percentuale di errore allora viene solitamente considerato come errato. 4.3 Estensione al caso multiclasse Nei paragrafi precedenti abbiamo introdotto la Support Vector Machine lineare per problemi di classificazione binaria e siamo poi passati al soft margin e al caso non lineare: quest ultimo ci permette di non commettere errori anche quando le due classi sono estremamente sovrapposte (C ). Inoltre la fase di apprendimento dell SVM consiste in un problema CCQP per il quale si trovano in letteratura tecniche molto valide e che è caratterizzato da una soluzione sparsa, elemento molto interessante quando si ha a disposizione poca memoria. 37 P a g i n a

46 Ad ogni modo, molti problemi reali sono caratterizzati da più di due classi: ad esempio uno dei dataset di benchmark classici per la classificazione multiclasse è iris nel quale tre tipi di fiori della famiglia iris devono essere distinti avendo come input le dimensioni dei loro petali e sepali. Mentre molti altri algoritmi di apprendimento possono affrontare direttamente sia i problemi biclasse che quelli multiclasse, l SVM per come è formulata può affrontare, in maniera diretta, solo i problemi di classificazione binaria. Nei prossimi paragrafi analizzeremo le tecniche più utilizzate per fare sì che la SVM possa essere sfruttata anche per dataset con più di due classi. Supporremo di avere un dataset generico X con k classi All Versus All Il metodo All vs. All (AVA) consiste nel costruire k(k 1) 2 training set X uv, ognuno dei quali contiene dati provenienti solo da due classi distinte u e v. Questi training set vengono utilizzati per allenare k(k 1) 2 SVM e i modelli risultanti vengono salvati per la fase feddforward. Quando un nuovo pattern x deve essere classificato è utilizzato come input di tutte le SVM binarie così da ricavare l etichetta multiclasse. Nel caso di conflitto tra diverse classi la decisione viene presa seguendo il concetto di Winner-Take-All (WTA): la classe corrispondente al valore più alto di f x viene considerata come y finale del pattern. Consideriamo un semplice esempio. Chiamiamo X un dataset multiclasse con k=4 classi e l = 4 pattern (un pattern per classe). Applichiamo la tecnica AVA alla SVM: dobbiamo definire i diversi training set per le SVM binarie. Il numero totale degli insiemi di training è: k(k 1) 2 = = P a g i n a

47 I sei insiemi sono: X 12 (classe 1 vs. classe 2), X 13, X 14, X 23, X 24 e X 34. Ognuno di questi set d esempio è composto da solo due pattern (uno per classe). I training set vengono quindi usati per creare sei SVM che classificheranno i dati nella fase di feedforward. La tecnica AVA è solitamente caratterizzata da buone performance in termini di error rate, in quanto la granularità data dal classificare ogni classe contro tutte le altre aiuta ad arrivare ad un alta precisione. Comunque AVA ha principalmente due difetti: Il numero di classificatori cresce quadraticamente con il numero di classi. Ciò può essere deleterio per un gran numero di applicazioni come ad esempio in problemi di riconoscimento ottico dei caratteri (OCR) dove il dataset è solitamente composto almeno 36 classi (26 lettere e 10 cifre):in questo caso servirebbero 630 SVM; La qualità della classificazione potrebbe non essere buona se per alcune classi ci fossero pochi pattern: per rimanere sull esempio dell OCR potrebbe essere il caso della x e della j che sono meno frequenti One Versus All La tecnica One vs. All (OVA) consiste nel creare k training set X u : i pattern di X della classe u-esima sono salvati in X u con label +1 mentre quelli delle altre classi sono inseriti con label -1. A questo punto i k dataset sono utilizzati per costruire le SVM binarie e i coefficienti sono salvati per la fase feedforward. Quando un nuovo pattern x deve essere classificato viene dato in input a tutte le SVM binarie e viene così ricavata l etichetta multiclasse; in caso di conflitto si sceglie anche in questo caso col criterio del Winner-Take-All che assegna l etichetta corrispondente alla classe col massimo valore della funzione di feedforward. 39 P a g i n a

48 Richiamando l esempio utilizzato nel paragrafo precedente, con la tecnica OVA dovremmo creare 4 set, uno per ogni classe possibile: X 1 (classe 1 vs. classi 2,3 e 4), X 2, X 3, X 4. Con questi 4 training set vengono costruite altrettante SVM. In confronto alla tecnica AVA, OVA permette di ridurre il numero di classificatori (che cresce linearmente con il numero di classi) e aggira il problema di avere pochi pattern per determinate classi in quanto di tutti i pattern originali vengono utilizzati durante l allenamento di tutte le SVM. Sfortunatamente in svariate applicazioni reali le performance, in termini di error rate del metodo OVA risultano essere peggiori rispetto ad AVA. Inoltre ogni SVM con OVA viene allenata su tutti i pattern del dataset originale: questo causa un numero di Support Vectors per modello che, in generale, risulta essere superiore a quello riscontrato col metodo AVA. Quest ultimo problema va tenuto presente quando si ha poca memoria a disposizione Augmented Binary La tecnica Augmented Binary (AB) è stata proposta recentemente [17] e presenta un alternativa ai due metodi descritti precedentemente. Si consideri il dataset X = x 1, y 1,, x l, y l, dove x i R n e y i 1,2,, k per i = 1,, l. Possiamo sempre replicare k volte l i-esimo pattern estendendolo di un vettore v j R k, j = 1,, k: x i, y i (x i v 1,y i 1 ) (x i v 2,y i 2 ) (x i v k,y i k ) (4.42) dove v j è tale che la s-esima componente, per s = 1,, k, sia (v j ) s = +1 se s = j 1 se s j (4.43) e il nuovo target dei pattern è tale che 40 P a g i n a

49 y i j = +1 se j = y i 1 se j y i. (4.44) Alla fine della procedura si ottiene quindi un nuovo dataset X A R kl (n+k) : questo è un dataset biclasse tale da poter essere utilizzato con una singola SVM. Per chiarire il procedimento si pensi al seguente esempio: un pattern di un dataset biclasse appartenente alla classe 2 (y i = 2) verrà espanso nella seguente maniera x i, 2 (x i +1, 1, 1, 1) (x i 1, +1, 1, +1) (x i 1, 1, +1, 1). (4.45) Per la fase feedforward il pattern da classificare x sarà a sua volta esteso e replicato con la procedura di Eq. (4.42) e ogni replica viene classificata. La classe del pattern viene quindi assegnata e anche questa volta in caso di conflitto col criterio WTA viene assegnata l etichetta finale utilizzando i valori della funzione di feedforward ottenuti dall utilizzo di ogni replica. I vantaggio principale deriva dal fatto che si ha bisogno di una sola SVM; il principale difetto è che la dimensionalità del training set aumenta notevolmente. Riprendendo l esempio dell applicazione di OCR, supponiamo che il numero di classi sia 36, il numero di features sia n = 100 e ci siano l = 1000 pattern disponibili. Prima della procedura di AB il dataset e X R mentre successivamente diventa X A R Comunque AB da ottimi risultati sui dati delle matrici ad alta densità (microarrays) che sono solitamente caratterizzati da un basso numero di classi, pochi pattern e un numero di features estremamente alto [17]. 41 P a g i n a

50 Capitolo 5 Microsoft SQL Server e DataMining Microsoft SQL Server è un DBMS relazionale, meglio noto come Relational Database Management System (RDBMS), prodotto da Microsoft. L'ingresso di Microsoft nel mondo dei database di fascia "enterprise" risale al 1989 quando cominciò la competizione con Oracle, IBM e Sybase che erano i dominatori del mercato. La prima versione fu SQL Server per OS/2 ed era quasi identica a Sybase SQL Server 4.0 su Unix. SQL Server 7.0 è stato il primo database server basato su un'interfaccia grafica fabbricata dalla stessa ditta del Database. L'attuale versione, Microsoft SQL Server 2008 (10.0), è stata rilasciata (RTM) nell'agosto Perché SQL Server? La scelta dei DBMS è ampia: sul mercato SQL Server deve affrontare la concorrenza di prodotti come Oracle, Sybase, DB2, Informix e tanti altri. Senza contare gli altri prodotti della stessa Microsoft come Access e Visual FoxPro. Access ad esempio ha il grande pregio di trovarsi sulla maggior parte dei PC esistenti. Sfortunatamente ha i suoi limiti per quanto riguarda scalabilità, velocità e flessibilità; risulta quindi adatto a realtà ristrette che non richiedono particolari funzionalità. I principali concorrenti di SQL Server restano Oracle e Sybase [18]. Il primo può essere considerato come il leader del mercato ed ha un elevato numero di utenti. Senza voler trovare un vincitore, cerchiamo solamente di capire perché SQL Server può essere considerato una buona alternativa. 42 P a g i n a

51 Oracle è solitamente considerato come il leader nel campo dei database ed ha un bacino di utenza estremamente ampio. Per quanto più complesso da installare e amministrare rispetto a SQL Server possiede svariate caratteristiche che lo rendono uno strumento estremamente potente e scalabile. E inoltre decisamente flessibile in quanto permette di aggiungere componenti a seconda delle necessità rendendolo più comodo rispetto a SQL Server. Ad esempio quest ultimo costringe ad installare il.net framework sul server anche se non si è interessati ad utilizzarne le funzionalità. D altro canto Oracle è meno user-friendly dal punto di vista di uno sviluppatore. Inoltre SQL Server mette a disposizione nativamente strumenti per l analisi dei dati o per la loro copia da altre sorgenti come ad esempio Excel; con Oracle al contrario ogni feature desiderata dovrà essere acquistata separatamente. Sybase invece è molto simile a SQL Server con una eccezione importante: non ha una GUI di front-end. Solo ianywhere ne è fornito ma viene usato solo per utilizzi di fascia bassa. I puristi non ne hanno bisogno perché le GUI sono fatte per chi non sa programmare, almeno così dicono loro. Sybase inoltre si trova principalmente in ambiente Unix ma circolano anche versioni per Windows. I suoi vantaggi principali sono la velocità e la robustezza a discapito di un linguaggio di programmazione meno potente e con meno funzionalità rispetto a SQL Server. Tutti i database hanno la loro sintassi SQL che parte da una base comune ovvero quella dello standard ANSI-92. Ciò significa che la sintassi per il recupero dei dati è la stessa ma ogni database ha la sua sintassi particolare per essere gestito. 5.2 Database Relazionali Come detto in precedenza, SQL Server è un RDBMS. Diamo quindi una breve spiegazione del concetto di database relazionali. 43 P a g i n a

52 Il termine database, banca dati, base di dati o anche base dati, indica un archivio strutturato in modo tale da consentire l'accesso e la gestione dei dati stessi (l'inserimento, la ricerca, la cancellazione ed il loro aggiornamento) da parte di particolari applicazioni software ad essi dedicate. Il database è un insieme di informazioni, di dati che vengono suddivisi per argomenti in ordine logico (tabelle) e poi tali argomenti vengono suddivisi per categorie (campi). La base di dati, oltre ai dati veri e propri, deve contenere anche le informazioni sulle loro rappresentazioni e sulle relazioni che li legano. Spesso, ma non necessariamente, una base dati contiene le seguenti informazioni: Strutture dati che velocizzano le operazioni frequenti, di solito a spese di operazioni meno frequenti. Collegamenti con dati esterni, cioè riferimenti a file locali o remoti non facenti parte del database. Informazioni di sicurezza, che autorizzano solo alcuni profili utente ad eseguire alcune operazioni su alcuni tipi di dati. Programmi che vengono eseguiti, automaticamente o su richiesta di utenti autorizzati, per eseguire elaborazioni sui dati. Un tipico automatismo consiste nell'eseguire un programma ogni volta che viene modificato un dato di un certo tipo. Le basi di dati possono avere varie strutture, di solito, in ordine cronologico: 1. gerarchica (rappresentabile tramite un albero - anni sessanta), 2. reticolare (rappresentabile tramite un grafo - anni sessanta), 3. relazionale (attualmente il più diffuso, rappresentabile mediante tabelle e relazioni tra esse - anni settanta), 44 P a g i n a

53 4. ad oggetti (estensione alle basi di dati del paradigma "Object Oriented", tipico della programmazione a oggetti - anni ottanta), 5. semantica (rappresentabile con un grafo relazionale - inizio anni duemila). Le prime due strutture si dicono anche navigazionali. Un requisito importante di una buona base dati consiste nel non duplicare inutilmente le informazioni in essa contenute: questo è reso possibile dai gestori di database relazionali. Informalmente e impropriamente, la parola "database" viene spesso usata come abbreviazione dell'espressione Database Management System (DBMS), che invece si riferisce a una vasta categoria di sistemi software che consentono la creazione e la manipolazione (gestione) efficiente dei dati di un database RDBMS Il termine Relational Database Management System (RDBMS) (sistema per la gestione di basi di dati relazionali) indica un database management system basato sul modello relazionale, ed è stato introdotto da Edgar F. Codd. Codd lavorava alla sede californiana della IBM come ricercatore sulla nascente tecnologia degli hard disk quando osservò l'inefficienza dell'approccio Codasyl (consorzio industriale dedito allo sviluppo di linguaggi di programmazione standard) con la nuova modalità di memorizzazione dei dati, inefficienza principalmente dovuta all'assenza di una funzione di ricerca. Nel 1970 cominciò a produrre diversi documenti schematizzanti un nuovo approccio alla costruzione delle basi di dati, culminati in [19]. In questo articolo, descrisse un nuovo sistema per archiviare e modificare grandi quantità di dati. Invece di utilizzare delle righe (in inglese, ma anche molto usato in italiano: "record" o anche "tuple") collegate tra di loro attraverso un qualche tipo 45 P a g i n a

54 di struttura ad albero, come nell approccio Codasyl, ritenne di utilizzare una tabella di righe a lunghezza fissa. Questo sistema sarebbe stato molto inefficiente nell'archiviazione di dati sparsi, in cui la tabella avrebbe potuto avere diverse celle vuote; tale errore di impostazione fu corretto dividendo i dati in diverse tabelle, in cui gli elementi opzionali venivano spostati, anziché sprecare spazio nella tabella principale. Ad esempio, un utilizzo comune delle basi di dati è quello di registrare delle informazioni sugli utenti: il loro nome, informazioni di accesso, indirizzo e numeri di telefono. In un database navigazionale tutti questi dati sarebbero stati memorizzati in un unico record, e gli elementi non presenti (ad esempio un utente di cui non sia noto l'indirizzo) sarebbero stati semplicemente omessi. Al contrario, in un database relazionale, le informazioni vengono divise, ad esempio, nelle tabelle "utente", "indirizzi", "numeri di telefono" e solo se i dati sono presenti viene creata, nella rispettiva tabella, una tupla. Uno degli aspetti interessanti introdotti nei database relazionali sta nel collegamento delle tabelle: nel modello relazionale, per ogni record viene definita una chiave, ovvero un identificatore univoco della tupla. Nella ricostruzione delle relazioni, l'elemento di riferimento, che distingue una riga da un'altra è proprio questa chiave e viene richiamata nella definizione della relazione. La chiave può essere uno dei dati stessi che vengono memorizzati (ad esempio, per la tabella utenti, il "Codice Fiscale" della persona), o un campo che viene aggiunto specificatamente per questo scopo (spesso chiamato OID- Object IDentifier), o una combinazione di più campi (chiave composta). Questa operazione di riunificazione dei dati non è prevista nei linguaggi di programmazione tradizionali: mentre l'approccio navigazionale richiede semplicemente di ciclare per raccogliere i diversi record, l'approccio relazionale richiede al programma di ciclare per raccogliere le informazioni riguardanti ogni record. Codd, propose, come soluzione, la creazione di un linguaggio dedicato a 46 P a g i n a

55 questo problema. Tale linguaggio, più tardi, si è sviluppato nella codifica che oggi è universalmente adottata e che è il mattone fondamentale delle basi di dati: SQL. Utilizzando una branca della matematica chiamata "calcolo delle tuple", dimostrò che questo sistema era in grado di compiere tutte le normali operazioni di amministrazione dei database (inserimento, cancellazione, etc.) e che inoltre consentiva di disporre di uno strumento semplice per trovare e visualizzare gruppi di dati tramite un'unica operazione. 5.3 SQL Server: architettura, servizi e strumenti Affidabilità, sicurezza e flessibilità sono le tre caratteristiche chiave su cui si fonda SQL Server per agevolare il lavoro dei designer, degli sviluppatori amministratori [20]. e degli Affidabilità: quando i database relazionali sono alla base di una soluzione è essenziale che gli utenti e gli amministratori possano essere sicuri che il server sia funzionante e che ogni informazione passatagli possa essere immagazzinata e recuperata senza rischi. Sicurezza: SQL Server offre svariati strumenti orientati alla sicurezza come ad esempio la possibilità di crittare tutti gli oggetti del database in maniera automatica ovvero senza che gli sviluppatori e/o gli amministratori se ne debbano preoccupare direttamente. Flessibilità: in quanto SQL Server dovrebbe essere la principale fonte di informazioni per una impresa, Microsoft introduce insieme a SQL Server un gran numero di applicazioni software di supporto. Basti pensare ai servizi di integrazione, di segnalazione e di analisi. Tutte queste tecnologie interagiscono tra di loro e semplificano di gran lunga il lavoro di sviluppatori e amministratori. 47 P a g i n a

56 In Fig. 5.1 viene esposta una panoramica dell architettura alla base di SQL Server. Figura 5.1 Architettura generale di SQL Server I protocolli esterni si occupano della connettività e della memoria condivisa. Il formato di comunicazione è stato definito da Microsoft ed è il Tabular Data Stream (TDS) ma questi pacchetti possono essere incapsulati in altri protocolli di trasporto come ad esempio TCP/IP. Il database engine si occupa principalmente di creare, recuperare, aggiornare e cancellare informazioni dal database. SQLOS è lo strato che connette SQL Server con l hardware. Nei paragrafi successivi viene esposta una descrizione più dettagliata dei principali meccanismi, strumenti e servizi che caratterizzano SQL Server. 48 P a g i n a

57 5.3.1 Immagazzinamento dei dati Come abbiamo già detto l unità principale per l immagazzinamento dei dati è il database ovvero un insieme di tabelle con colonne tipizzate. SQL Server supporta diversi tipi di dato tra i quali quelli primari (interi, float, decimal, char, varchar, binary, text, ecc...). Inoltre c è la possibilità di utilizzare tipi definiti dall utente (UDTs). Oltre alle tabelle i database possono contenere altri oggetti come le viste (tabelle virtuali che contengono il risultato di una query), funzioni (solitamente chiamate stored procedures), indici (strutture che velocizzano la ricerca nei database) e i log. Il tipo di file principale usato per salvare i database è il.mdf e in aggiunta si trovano i file.ndf che sono usati se è necessario salvare dei metadati. I log hanno estensione.ldf. Dal punto di vista logico, per essere salvate, le righe delle tabelle vengono divise in partizioni numerate, di default tutte le righe di una tabella si trovano nella stessa partizione. Quindi le righe di ogni partizione vengono immagazzinate in un B-tree (generalizzazione del binary tree). Se alla tabella è associato un indice per la ricerca veloce le righe sono immagazzinate seguendo l ordine dell indice. Lo spazio allocato per un database è diviso in pagine, numerate sequenzialmente, da 8 KB l una. La pagina è l unità base per le operazioni di I/O in SQL Server mentre lo spazio è allocato a gruppi di 8 pagine. Una riga di un database non può andare oltre la dimensione di una pagina ed è quindi limitata ad 8KB; se il limite viene superato e la riga contiene un dato di tipo varchar o varbinary esso viene spostato in un'altra pagina e rimpiazzato da un puntatore. Per minimizzare l I/O sul disco rigido SQL Server usa la RAM come buffer. L insieme delle pagine nel buffer si chiama buffer cache ed è gestito dal Buffer Manager. Ad ogni pagina viene aggiunto un checksum in scrittura così da poterlo controllare in fase di lettura ed assicurarsi che il file non sia danneggiato. 49 P a g i n a

58 SQL Server garantisce inoltre che ogni cambiamento effettuato sui dati sia ACID [21] ovvero vengono garantite: Atomicità: deve essere rispettata la regola del tutto o niente ovvero se una parte della transazione fallisce il database deve essere riportato allo stato precedente all inizio della stessa. Consistenza: ogni transazione deve portare il database da uno stato consistente ad un altro stato consistente. Isolamento: nel caso di transazioni concorrenti su uno stesso database non si deve permettere che dati coinvolti da una transazione vengano modificati finchè essa non è conclusa. Durata (o affidabilità): il DBMS deve garantire che dopo che un utente ha avuto la conferma di transazione avvenuta essa non sarà persa anche a fronte di guasti hardware o software. SQL Server implementa le transazioni utilizzando un log di write-ahead: qualunque cambiamento operato su una pagina aggiorna il suo stato nella cache e allo stesso tempo i cambiamenti vengono riportati sul log con l ID della transazione della quale il cambiamento fa parte. Ogni voce del log è identificata da un LSN (Log Sequence Number) così da evitare sovrascritture. SQL Server assicura che il log venga salvato sul disco prima che la pagina venga scritta nel database: questo assicura l integrità in quanto se, in caso di guasto, una pagina venisse scritta solo in parte il log permetterebbe di completare la scrittura in un secondo momento; se neanche il log fosse stato scritto allora l integrità verrebbe ugualmente assicurata in quanto la transazione non sarebbe mai avvenuta [22]. Per quanto riguarda le transazioni concorrenti, SQL Server fornisce due metodi di controllo: pessimistico e ottimistico. Con quello pessimistico gli accessi contemporanei sono prevenuti con dei lock esclusivi o condivisi (ovvero nel caso della lettura si esclude la scrittura ma non la lettura da parte di altri processi). In caso si formassero dei deadlock SQL Server li risolve solitamente terminando uno 50 P a g i n a

59 dei processi in questione. La parte di SQL Server che gestisce tutti questi meccanismi è il Lock Manager. Il metodo ottimistico implica invece che, ogni volta che una riga viene modificata, la sua versione precedente venga spostata in un database di sistema chiamato TempDB. Quando la riga sta subendo un aggiornamento tutti gli altri processi che cercano di accedervi sono rimandati alla vecchia versione. Nel caso di due aggiornamenti contemporanei entrambe le nuove righe verranno salvate nel nuovo database ma con i due ID della transazione diversi [22] Recupero dei dati Il modo principale per ottenere dei dati da un database di SQL Server è eseguire una query utilizzando una variante di SQL chiamata T-SQL (Transact-SQL) che è una estensione di SQL proprietaria Microsoft e Sybase. Le query vengono eseguite dal Query Processor che decide tutti i passi necessari (query plan) per il recupero delle informazioni richieste ottimizzando i tempi di risposta e le risorse utilizzate. Dalla versione 2005 SQL Server include anche un compenente chiamato SQL CLR (Common Language Runtime) attraverso il quale integra il framework.net. Questo permette di scrivere stored procedures, triggers e molto altro in linguaggi interpretati come C# e VBNET Servizi aggiuntivi SQL Server offre una vasta gamma di servizi aggiuntivi che, per quanto non siano essenziali al funzionamento del database, offrono possibilità aggiuntive per la gestione del database e per lo sfruttamento delle informazioni immagazzinate in esso. Ognuno di questi componenti è eseguito come parte di qualche altro componente di SQL Server o come un servizio di Windows. 51 P a g i n a

60 - Il Service Broker permette a due o più database di dialogare senza il bisogno di scrivere applicazioni ad-hoc (come si doveva fare prima della sua introduzione nel 2005) [20]. Permette lo scambio di messaggi asincrono ovvero, mentre una procedura che voleva mandare un messaggio in precedenza doveva occuparsene prima di poter proseguire, adesso il messaggio viene affidato al Service Broker e la procedura può proseguire. Inoltre garantisce la consegna che deve avvenire solo una volta e nell ordine corretto anche quando il ricevente dovesse essere temporaneamente offline. - I Servizi di Duplicazione (Replication Services) servono a copiare le informazioni e fare si che siano sempre aggiornate. Quanto spesso l informazione viene aggiornata dipende da quanto spesso essa cambia e quanto è importante che sia aggiornata. Tutto ciò può essere fatto per svariati motivi tra cui il backup dei dati, la suddivisione della mole di lavoro con un altro server, la necessità di copiare i dati di vari database su un database centrale. Questo tipo di servizi si basa sulla metafora dell editoria. Figura 5.2 Metafora dell editoria 52 P a g i n a

61 Nel mondo dell editoria esistono gli editori, i distributori e gli abbonati. Analogamente nel mondo dei database, ci sono: gli editori che gestiscono il database fonte dell informazione, i distributori che spediscono le parti di database richieste dagli abbonati e infine quest ultimi che ricevono le informazioni sotto forma di pubblicazioni (Fig. 5.2). Ogni pubblicazione è costituita da uno o più articoli che sono, in altre parole, un qualunque oggetto facente parte del database (tabelle,indice,ecc...). Il distributore è spesso inglobato dall editore * I Servizi di Analisi (Analysis Services) aggiungono funzioni di OLAP (Online Analytical Processing) e di Data Mining ai database di SQL Server. Questi servizi verranno trattati più approfonditamente nel paragrafo 5.4 in quanto è all interno di tali servizi che si colloca il modulo aggiuntivo oggetto di questa tesi. - I Servizi di Resoconto (Reporting Services) permettono agli utenti di ottenere da un database di SQL Server delle relazioni (o rapporti o resoconti). Figura 5.3 Schema di funzionamento di SQL Server Reporting Services 53 P a g i n a

62 Un server viene configurato come SSRS (SQL Server Reporting Services) Server e gli utenti possono interrogarlo tramite un qualunque browser di rete ricevendo in risposta il rapporto sotto forma di pagine HTML (Fig. 5.3). E inoltre possibile configurare SQL Server in modo che funzioni anche come server SSRS, dipende dal carico e dalla potenza del server. Uno dei grandi benefici è che i rapporti sono dinamici ovvero lo sviluppatore può creare un rapporto e l utente finale, ogni volta che ne farà richiesta, riceverà un rapporto aggiornato rispetto allo stato attuale del database. Inoltre un rapporto può essere configurato in modo che accetti dei parametri in ingresso; diventa così possibile effettuare richieste personalizzate. - I Servizi di Integrazione sono utilizzati per integrare informazioni provenienti da fonti esterne a SQL Server ma anche esportarle verso l esterno. Ad esempio è spesso necessario: importare/esportare informazioni da/in file di testo, fondere più fonti di dati in una unica o dover eseguire il procedimento inverso, trasferire informazioni verso applicazioni SAP o Oracle, interagire con altri database relazionali come Oracle o MySQL, creare un data warehouse, usare FTP per spedire e ricevere dati, interagire con strumenti come Excel,Word,ecc... SQL Server Integration Services (SSIS) permette di fare tutto ciò senza passare per strumenti esterni. La piattaforma SQL Server semplifica molto la vita poiché riesce, ad esempio, a fare comunicare Analysis Services, Visual Studio, Excel nella maniera più naturale possibile ed è proprio sull interazione tra questi tre strumenti che si è basato il lavoro della presente tesi. SSIS utilizza degli adattatori per interagire con una grande varietà di formati come: ADO.NET, OLE DB, ODBC, Excel, XML, file testuali, formati di terze parti. Inoltre integrando Visual Studio si possono usare come linguaggi di programmazione C#, C++, Visual Basic.NET e gli Script. E inoltre 54 P a g i n a

63 messo a disposizione degli sviluppatori un debugger che aiuta a individuare gli inevitabili problemi che si presentano durante il processo di integrazione [20]. 5.4 Analysis Services SQL Server Analysis Services (SSAS) è uno dei componenti chiave all interno di una soluzione di Business Intelligence (BI) ed è complementare a due dei componenti presentati nel paragrafo precedente ovvero SSRS e SSIS. In poche parole Analysis Services serve per estrarre informazioni utili da dati grezzi provenienti da uno o più database. In pratica il servizio cerca di rappresentare le informazioni in maniera più chiara e significativa in modo che a partire da esse possano essere prese delle decisioni. Permette in altre parole di porre domande complesse e ricevere risposte il più possibile esaurienti. SSAS utilizza tecniche OLAP (Online Analytical Processing). OLAP e OLTP (Online Transaction Processing) differiscono per come il database è utilizzato ma anche per come è costruito: Online Analytical Processing: sul database vengono eseguite principalmente query di tipo SELECT. Il database è solitamente denormalizzato per ottimizzare le query ed è spesso riconfigurato utilizzando cubi. Online Transaction Processing: il database viene modificato frequentemente con query contenenti INSERT UPDATE e DELETE. Per ottimizzare le transazioni il database OLTP è solitamente normalizzato come database relazionale. 55 P a g i n a

64 5.4.1 OLAP: terminologia base Parlando di database OLAP i termini chiave sono: cubi, dimensioni, misure, indicatori chiave di performance (KPIs). Un cubo è la versione denormalizzata di un database ovvero è una estensione delle classiche tabelle bidimensionali che si trovano in un database OLTP. I cubi permettono di esaminare i dati da diverse prospettive in quanto partendo da una visione piana dei dati (le tabelle) aggiungono delle dimensioni. Una dimensione di un cubo è un metodo usato per confrontare o analizzare i dati. Ad esempio una dimensione di un cubo potrebbe essere creata utilizzando certi attributi di un prodotto come: il nome, il costo, il prezzo di listino, la categoria e il colore. Aggiungendo altre dimensioni, come ad esempio le vendite in un certo periodo, i dati saranno rappresentati in maniera differente così da semplificare il lavoro di un analista delle vendite che una volta individuato il prodotto dai suoi attributi potrebbe voler ricavare le informazioni riguardanti le vendite. Una misura, all interno di un cubo, è una colonna e rappresenta una informazione quantificabile (solitamente numerica). Le misure possono essere associate ad una particolare colonna di una dimensione e possono essere utilizzate ad esempio per calcoli di somma o media (SUM e AVG) su quella determinata dimensione. In parole povere la misura fornisce una rappresentazione sintetica di una dimensione. Un indicatore chiave di performance o key performance indicator (KPI) è solitamente definito da coloro che devono prendere le decisioni all interno dell azienda identificando delle soglie e dei livelli particolarmente interessanti per la misura delle performance della compagnia. 56 P a g i n a

65 5.4.2 Integrazione con i prodotti di Microsoft Office Un elemento interessante della suite di BI è la accessibilità dei servizi e dei dati di SSAS tramite applicazioni esterne. Tali applicazioni permettono di interfacciarsi in maniera semplice e immediata con le funzionalità di SSAS e sono: Microsoft Office Excel 2007: è già di per se uno strumento potente ma la versione 2007 è stata progettata per funzionare con SQL Server 2008 così da diventare un interfaccia chiara e immediata per accedere alle funzionalità di analisi OLAP e di data mining (Fig. 5.4). Proprio per questi motivi è stato lo strumento principale utilizzato in fase di test (Cap. 7). E inoltre possibile ricevere i rapporti di SQL Server direttamente all interno di Excel. Microsoft Office Word 2007: include un visualizzatore in grado di importare i rapporti di SQL Server. Microsoft Office Visio 2007: può essere utilizzato per rappresentare i risultati del data mining con una veste grafica migliore rispetto a SQL Server. Microsoft Office Share Point Server 2007: offre strumenti per rappresentare i rapporti di SQL Server. Figura 5.4 Strumenti di data mining in Excel P a g i n a

66 5.4.3 Ambienti di sviluppo per Analysis Services Per quanto Excel fornisca una comoda interfaccia, i due ambienti di sviluppo più completi per lavorare con SSAS sono: Business Intelligence Development Studio (BIDS) e SQL Server Management Studio (SSMS). BIDS può essere considerato come lo strumento primario per lo sviluppo di un progetto di Analysis Services. Come si può notare in Fig. 5.5 il componente Business Intelligence utilizza la shell di Visual Studio. Figura 5.5 Business Intelligence Development Studio Il secondo strumento per gestire i database di SSAS è il Management Studio (Fig. 5.6). Il suo scopo fondamentale è quello di amministrare le istanze degli oggetti di Analysis Services (backup, monitoraggio, ecc...). Può essere anche utilizzato per creare vari oggetti ma in questo caso è solitamente più facile e utile usare BIDS. La query dei dati avviene solitamente tramite diversi tipi di script: Multidimensional 58 P a g i n a

67 Expressions (MDX) scripts, Data Mining Extensions (DMX) scripts e XML for Analysis (XMLA) scripts. Di questi tre linguaggi tratteremo brevemente il DMX nel paragrafo successivo in quanto è stato utilizzato nella presente tesi in fase di test; per ogni altro approfondimento si rimanda a [20]. Figura 5.6 SQL Server Management Studio Data mining in SSAS Gli strumenti di data mining di SSAS permettono di eseguire analisi predittive sulle informazioni e di identificare trend e pattern ricorrenti. Tutto questo serve nel campo della Business Intelligence al fine di prevedere le vendite, creare mailing list rivolte a determinati clienti, identificare prodotti da vendere in coppia,ecc... I passi chiave del processo di data mining in SQL Server sono: Creare una struttura di data mining. Una struttura identifica l origine dei dati ovvero lo schema del database (tabelle, indici, viste, ecc...) sul quale si potranno costruire i modelli di data mining. Per la sua creazione esiste un apposita procedura guidata presente sia in BIDS che in Excel. 59 P a g i n a

68 Creare un modello di data mining. Un modello descrive il problema che si sta tentando di risolvere. Si possono scegliere le tabelle desiderate dalla vista e quindi scegliere gli attributi (colonne) che si vogliono analizzare. Anche per la sua creazione esiste una apposita procedura guidata. Eseguire il training del modello. In altre parole il modello viene elaborato, costruito in modo che sia pronto per le predizioni. Utilizzare il modello per le predizioni. Questo avviene creando query predittive sui modelli di data mining e permette di stimare, con buona probabilità, cosa succederà in futuro. Le query predittive sono di tipo DMX. Questo linguaggio è simile al T-SQL ma con svariate aggiunte e modifiche. Prima di tutto le query DMX sono utilizzate per lavorare sulle strutture e i modelli. La stessa creazione delle strutture e dei modelli può avvenire tramite query al posto delle procedure guidate sopracitate. In generale le query DMX permettono di creare, elaborare, cancellare, copiare e esplorare le strutture e i modelli e a partire da essi possono eseguire predizioni. Esistono due tipi di comandi DMX: Comandi DMX DDL (Data Definition Language): utilizzati per creare, definire, importare e esportare nuove strutture e modelli. Alcuni esempi sono: CREATE, ALTER, EXPORT, IMPORT, SELECT INTO e DROP. Comandi DMX DML (Data Manipulation Language): utilizzati per esplorare i modelli e creare predizioni. Alcuni esempi sono: INSERT INTO e SELECT. SELECT ha enormi potenzialità e possibilità di personalizzazione Algoritmi di data mining per Analysis Services esistenti Un algoritmo di data mining può essere visto come il meccanismo che sta alla base del funzionamento dei modelli descritti nel paragrafo precedente. Microsoft propone nove algoritmi installati automaticamente con Analysis Services e sono: 60 P a g i n a

69 Association Algorithm, Clustering Algorithm, Decision Trees Algorithm, Linear Regression Algorithm, Logistic Regression Algorithm, Naive Bayes Algorithm, Neural Network (reti neurali) Algorithm, Sequence Clustering Algorithm, Time Series Algorithm. Inoltre AS offre la possibilità di sviluppare e installare moduli aggiuntivi contenenti algoritmi di data mining di qualunque tipo. In questo paragrafo si fornisce una breve descrizione dell algoritmo di reti neurali Microsoft e dell unico algoritmo di SVM implementato fino ad oggi per SQL Server, prodotto da Avanade Inc. e reperibile gratuitamente in rete [23]. Sarà proprio con questi due algoritmi che confronteremo le performance del nostro algoritmo di SVM. Per approfondimenti sugli altri algoritmi Microsoft si faccia riferimento a [24]. La rete neurale di Microsoft utilizza una rete MLP (Multi Layer Perceptron) composta, al massimo, di tre strati di neuroni o percettroni. Questi tre livelli sono quello di ingresso o di input, quello dei neuroni nascosti o hidden (opzionale) e quello di uscita o di output. Ogni neurone riceve uno o più input e riceve uno o più output identici. Ogni output è una semplice funzione non lineare della somma degli input del neurone. I nodi di input forniscono un ingresso a quelli hidden che agiscono analogamente verso quelli di output. I neuroni di uno stesso strato non sono connessi tra di loro. Più precisamente: I neuroni di input forniscono i valori di input al modello di data mining. Per attributi discreti un neurone di input solitamente rappresenta un singolo stato dell attributo; questo include anche lo stato valore mancante. Se un attributo discreto di input può trovarsi in più di due stati allora genererà un neurone per ogni stato più un altro per il valore mancante. Un attributo continuo invece genera due neuroni di input: uno per lo stato mancante e uno per rappresentare il valore continuo stesso. I neuroni hidden fanno da tramite tra quelli di input e quelli di output. I neuroni di output rappresentano i possibili attributi che possono essere predetti dal modello di data mining. In caso di attributi discreti il neurone di output rappresenta solitamente un singolo stato. Ad esempio un attributo 61 P a g i n a

70 booleano da predire genera tre neuroni di output: uno per il valore vero, uno per il falso e uno per lo stato mancante. Le colonne continue invece danno luogo a due neuroni di output esattamente per lo stesso ragionamento dei neuroni di input. Se sono generati più di 500 neuroni di output Analysis Services genera una nuova rete all interno del modello che rappresenti i neuroni di output eccedenti. Ogni input entrante in un neurone ha un valore associato, detto peso, che descrive l importanza di quel determinato ingresso per il neurone hidden o di output. Ad ogni neurone viene associata una funzione non-lineare, chiamata funzione di attivazione, che descrive l importanza di tale neurone all interno del suo strato. I neuroni di hidden utilizzano una tangente iperbolica mentre quelli di output una sigmoide. L apprendimento della rete neurale passa attraverso varie fasi fortemente influenzate dai parametri specificati durante la procedura di creazione del modello. L intero procedimento può essere così riassunto: Vengono estratti i dati di training dalla sorgente. SAMPLE_SIZE e HOLDOUT_PERCENTAGE determinano quante righe utilizzare in fase di training e quanti dati tenere da parte per testare l accuratezza del modello durante il training. Nel caso in cui il numero degli attributi di input sia maggiore del valore specificato in MAXIMUM_INPUT_ATTRIBUTES o che gli attributi su cui fare la predizione superino MAXIMUM_OUTPUT_ATTRIBUTES viene utilizzato un algoritmo di feature selection per selezionare gli attributi statisticamente più rilevanti ed eliminare quelli in eccesso. Vengono create una o più reti a partire dall input discreto o continuo. Il massimo numero di stati supportato dall algoritmo è definito da MAXIMUM_STATES. Viene creato lo strato di hidden con un numero iniziale di neuroni pari a HIDDEN_NODE_RATIO. Per far si che la rete neurale abbia solamente gli strati di input e output basta settare tale parametro a zero. 62 P a g i n a

71 I pesi vengono valutati e quindi regolati iterativamente tramite l algoritmo del gradiente coniugato. Questa è la fase in cui avviene l apprendimento vero e proprio. Passando al modulo per data mining proposto da Avanade Inc., esso permette di eseguire classificazione tramite l utilizzo di una Support Vector Machine. La SVM di Avanade utilizza il classico algoritmo di SMO (descritto al paragrafo 4.2.2) e permette, in fase di creazione del modello, di scegliere il tipo di kernel da utilizzare tra: lineare, polinomiale e RBF. Si sente la mancanza di un qualunque tipo di model selection. Proprio a causa di questa mancanza, in fase di creazione del modello, devono essere inseriti manualmente i valori dell iperparametro C (di default a 1) e di gamma nel caso del kernel RBF o dell esponente nel caso del kernel polinomiale (rispettivamente a 0.2 e 2 di default). Figura 5.7 Output grafico del modulo di data mining di Avanade 63 P a g i n a

72 Il problema della classificazione multiclasse è invece stato affrontato facendo uso del metodo All versus All descritto nel paragrafo Infine il modulo di Avanade implementa uno strumento grafico che presenta su uno scatter plot i risultati della classificazione (Fig. 5.7). 64 P a g i n a

73 Capitolo 6 Implementazione del modulo per Data Mining La creazione di un modulo aggiuntivo di data mining per SQL Server è composta di due passi principali: La creazione di un algoritmo ovvero, nel nostro caso, l implementazione software dell algoritmo di SVM. L inserimento di tale algoritmo in un applicativo che permetta l installazione all interno di SQL Server e di conseguenza l interazione con esso. 6.1 Librerie per SVM Per l algoritmo vero e proprio abbiamo utilizzato delle librerie di SVM scritte in Fortran90 e già ampiamente collaudate: SDM_Classification_TwoClass.dll, SDM_Classification_MultiClass.dll. Esponiamo brevemente le principali caratteristiche di queste librerie che, come si evince dai nomi, servono, rispettivamente, per eseguire la classificazione binaria e multiclasse. Entrambe presentano un metodo che si occupa della fase di training e uno per la fase feedforward da chiamare, quest ultima, ogni qualvolta si voglia eseguire una classificazione su un nuovo pattern a partire da un modello preesistente. La fase di training utilizza l algoritmo di Sequential Minimal Optimization (SMO) (paragrafo 4.2.2) per la risoluzione del problema di programmazione quadratica. I kernel a disposizione sono: lineare, polinomiale, gaussiano e laplaciano (già esposti in Tab. 4.1). 65 P a g i n a

74 Tra le varie opzioni di personalizzazione della fase di training troviamo la possibilità di applicare diversi tipi di normalizzazione ai dati in ingresso, di randomizzare l input ma la più importante è sicuramente la possibilità di utilizzare la model selection con ricerca a griglia (grid search) e stima dell errore tramite K-fold Cross Validation, approfondite nel paragrafo successivo. Per quanto riguarda la classificazione multiclasse la libreria utilizzata presenta una soluzione di tipo Augmented Binary già trattata ampiamente al paragrafo Model selection e stima dell errore La ricerca degli iperparametri che permettono alla SVM di ottenere le performance migliori nella classificazione di un particolare set di dati si chiama model selection. Facciamo uso della formulazione convenzionale per la SVM non lineare (Eq. 4.37). In generale avremo uno o più iperparametri da settare che possiamo indicare brevemente con C, dove C è il termine di regolarizzazione e indica gli altri possibili iperparametri (ad esempio gamma nel caso del kernel gaussiano). Il metodo più utilizzato per la model selection è la ricerca a griglia: il problema di CCQP è risolto più volte utilizzando tutte le possibili combinazioni di iperparametri all interno di un determinato range di valori campionato a piacere. A ogni iperparametro viene assegnato un range di ricerca che viene suddiviso in intervalli lineari o logaritmici (nel caso si pensi che sia più probabile che i valori bassi diano risultati migliori). Tra le soluzioni trovate verrà scelta quella in corrispondenza del minor errore di generalizzazione stimato e quelli saranno gli iperparametri utilizzati dal modello finale. La model selection è quindi strettamente collegata alla capacità di generalizzazione del classificatore (ovvero al rate di errore ottenibile su dati nuovi non ancora osservati) in quanto il modello scelto dovrà per forza essere caratterizzato dal minor errore di generalizzazione possibile. Essendo sconosciuta la distribuzione di 66 P a g i n a

75 probabilità che origina i dati, l errore di generalizzazione di un classificatore non può essere calcolato ma sono state proposte diverse tecniche per la sua stima probabilistica. Tali metodi sono divisi in due categorie: pratici e teorici [25]. La libreria di SVM in questione utilizza uno dei metodi pratici che, sperimentalmente, è tra i più performanti ovvero la K-fold Cross Validation (KCV). La KCV prevede che il dataset che abbiamo a disposizione venga diviso in k subset, detti fold, di uguali dimensioni (nel caso in cui il numero di pattern l non sia esattamente divisibile per k, normalmente, si duplicano dei dati presenti nel dataset originario). A turno, k 1 fold vengono usati per l apprendimento e il restante fold come validation set: ad esempio, ipotizzando 10 fold, al primo passo useremo i fold dal primo al nono per il training e il decimo come validation; al secondo step, dal primo all ottavo e il decimo come training e il nono come validation, e così via. Su ogni fold di validation, è possibile calcolare il numero di errori e i, i = 1,..., k. Alla fine, il parametro per il confronto tra i modelli sarà pari a: e = k i=1 e i k (6.1) Il vantaggio della KCV è che, se abbiamo un singolo dataset (quindi senza validation separato), non sprechiamo dati, dato che a turno tutti i pattern vengono usati per l apprendimento; non solo, abbiamo anche un validation set molto grande, essendo alla fine composto anch esso, di fatto, da tutte le istanze del dataset. Lo svantaggio consiste nel dover ripetere k volte l apprendimento: questo significa lunghi tempi di attesa nel caso di dataset con molti pattern di training. Un paio di note conclusive. Spesso, prima di applicare la KCV è necessario un rimescolamento casuale dei dati del dataset: questo, ad esempio, per evitare che una fold per il training sia costituita da soli dati di una classe. Fissare k potrebbe essere considerato come una ricerca di iperparametro: in verità, la pratica ha ampiamente dimostrato che k = 5 e k = 10 sono valori ottimi da utilizzare. 67 P a g i n a

76 6.2 Realizzazione del modulo aggiuntivo L algoritmo del modulo aggiuntivo (o plug-in) ha principalmente tre compiti [26]: Descrivere le proprie caratteristiche. Elaborare i dati per creare un modello a partire da essi e salvarlo. Rendere disponibile il modello creato al passo precedente. Questi compiti sono associati a determinate interfacce COM. L interfaccia COM (Component Object Model) è un interfaccia binaria standard per componenti software introdotta da Microsoft nel 1993; essenzialmente il COM permette di implementare oggetti in modo che essi possano essere utilizzati in ambienti e linguaggi diversi da quelli d origine o addirittura su macchine con architetture diverse [27]. Le interfacce COM di nostro interesse sono: IDMAlgorithmMetadata: per la descrizione delle caratteristiche. IDMAlgorithm: per la creazione del modello. IDMAlgorithmNavigation: per rendere esplorabile il modello. Il plug-in, scritto in linguaggio interpretato C#, deve quindi implementare almeno tre classi che chiamiamo: Metadata, Algorithm e AlgorithmNavigator. Un implementazione parziale delle tre classi è fornita nella COM interop primaria per plug-in interpretati: DMPluginWrapper.dll. Una COM Interop è una tecnologia inclusa nel.net CLR che permette a oggetti COM di interagire con oggetti.net e viceversa [28]. In particolare DMPluginWrapper.dll ha il compito di tradurre chiamate COM dal server di Analysis Services al plug-in, è scritta in C++ ed è reperibile come codice sorgente gratuitamente in rete [29]. All interno del plug-in risulta quindi necessario derivare le tre implementazioni parziali fornite in DMPluginWrapper. Per ricapitolare: La classe Metadata deriva da AlgorithmMetadataBase (che implementa parzialmente IDMAlgorithmMetadata). 68 P a g i n a

77 La classe Algorithm deriva da AlgorithmBase (che implementa parzialmente IDMAlgorithm). La classe AlgorithmNavigator deriva da AlgorithmNavigationBase (che implementa parzialmente IDMAlgorithmNavigation). All interno di DMPluginWrapper tutti i tipi sono definiti come parte del namespace Microsoft.SqlServer.DataMining.PluginAlgorithms. In definitiva le classi di DMPluginWrapper implementano le interfacce necessarie al plug-in ed hanno la funzione di traduttore, vediamo come. Analysis Services utilizza le interfacce COM implementate da DMPluginWrapper per imparare da dei dati e creare un modello. All inizio AS utilizza un file di inizializzazione (msmdsrv.ini) per determinare quali algoritmi di data mining sono disponibili. Una volta costruita la libreria che implementa il plug-in essa deve essere aggiunta a questa lista. Successivamente Analysis Services utilizza l interfaccia dei metadati per determinare se l algoritmo è appropriato per il lavoro da svolgere. AS crea poi un istanza dell algoritmo, allena il modello e lo rende disponibile tramite l interfaccia di navigazione. Figura 6.1 Scambio dati tra server e plug-in 69 P a g i n a

78 In Fig. 6.1 si illustra come dialogano il server di Analysis Services e il plug-in. Tutte le classi che vengono esposte nei paragrafi successivi vanno create all interno di uno stesso progetto (nel nostro caso chiamato SVM ). L unica classe esterna, per cui è stato creato un progetto differente è SmartLabAlgo.cs che è stata creata all interno del progetto SmartLabAlgo. Analizziamo ora dettagliatamente la nostra implementazione delle classi Metadata, Algortihm, AlgorithmNavigator e SmartLabAlgo La classe Metadata La classe metadata serve a rendere accessibili le caratteristiche del plug-in ed è derivata da AlgorithmMetadatabase. Per iniziare si devono includere i seguenti namespaces: using System; using System.IO; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using Microsoft.SqlServer.DataMining.PluginAlgorithms; Perché la classe sia visibile dal sottosistema COM si deve utilizzare l attributo [ComVisible(true)] e assegnargli una Guid generata randomicamente tramite l attributo [Guid] seguito dal numero generato. Si ottiene una struttura di questo tipo: [ComVisible(true)] [Guid("44503EAB-570E-4b25-A9F A7D78E")] public class Metadata : AlgorithmMetadataBase{}. I metodi di questa classe permettono semplici operazioni come: Definire il nome del modulo aggiuntivo. 70 P a g i n a

79 Permettere all utente di impostare il tipo di kernel desiderato al momento della creazione del modello scegliendo tra RBF, lineare e polinomiale. Permettere che le colonne di input, ovvero gli attributi, possano essere sia discreti che continui. Limitare le colonne di output al campo del discreto (in quanto le righe, ovvero i pattern, dovranno appartenere ad una determinata classe). Vediamo come. Dichiariamo in anzitutto un campo in cui salvare i parametri: protected MiningParameterCollection parameters. Scriviamo quindi il costruttore: public Metadata() { parameters = DeclareParameters(); }. Il metodo che segue popola la lista dei parametri del costruttore: static public MiningParameterCollection DeclareParameters() { MiningParameterCollection parameters= new MiningParameterCollection(); MiningParameter param; param = new MiningParameter("KERNEL_TYPE","The type of the kernel (e.g. Linear Kernel, Polynomial Kernel, RBF Kernel)", "rbf","[linear, Polynomial, RBF]",true,true, typeof(system.string)); parameters.add(param); return parameters; }. Come si nota nel nostro caso siamo interessati unicamente al tipo di kernel, il resto dei parametri sarà impostato da noi e l utente non se ne dovrà interessare. Il metodo [public override MiningParameterCollection GetParametersCollection()] ritorna semplicemente parameters. 71 P a g i n a

80 Avendo definito il parametro KERNEL_TYPE così da permettere la scelta del kernel al momento della creazione del modello, resta da gestire l acquisizione di tali parametri; scriviamo: public override object ParseParameterValue(int parameterindex, string parametervalue) { object retval = null; if (parameterindex == 0) // KERNEL_TYPE }. { } retval = parametervalue; string strkerneltype = (string)retval; strkerneltype = strkerneltype.tolower(); if (strkerneltype == "") { strkerneltype = "rbf"; } if ((strkerneltype!= "linear") && (strkerneltype!="polynomial") && (strkerneltype!= "rbf")) { throw new Exception("You have specified an invalid KernelType. The kernel Type must be: 'linear', 'polynomial', or 'rbf'"); } return retval; Come si può notare il kernel deve essere per forza RBF, lineare o polinomiale. Nel caso di default viene selezionato automaticamente il kernel RBF. Inoltre questa funzione deve ritornare un oggetto che contenga il valore del parametro; si noti inoltre che il tipo dell oggetto deve essere esattamente quello del parametro passato (parameterindex). Riassumendo, tutti i parametri ottenuti vengono salvati nella collezione apposita (MiningParameterCollection parameters), dichiarata precedentemente, per poi poter essere esplorati ed utilizzati successivamente dall algoritmo. I restanti metodi servono a descrivere le caratteristiche dell algoritmo di datamining. Essi sono: public override string GetDisplayName() { return "SmartLab Support Vector Machine"; } 72 P a g i n a

81 public override string GetServiceName() { return "SmartLab_Support_Vector_Machine"; } public override string GetServiceDescription() { return "SmartLab Support Vector Machines data mining algorithm."; }. Quest ultimo fornisce una descrizione informale dell algoritmo. Invece per descrivere la funzione dell algoritmo (nel nostro caso la classificazione) si utilizza: public override PlugInServiceType GetServiceType() { return PlugInServiceType.ServiceTypeClassification; } Altri metodi puramente descrittivi da implementare in questa classe sono: [public override MiningScaling GetScaling()] - restituisce la scalabilità dell algoritmo in fase di training; [public override MiningTrainingComplexity GetTrainingComplexity()] - ritorna la complessità attesa (relativa) dell algoritmo; [public override MiningPredictionComplexity GetPrediction Complexity()] - restituisce la complessità attesa della fase predittiva; [public override MiningExpectedQuality GetExpectedQuality()] - restituisce la qualità attesa delle predizioni (tutti i metodi appena elencati possono restituire tre valori: high, medium o low); [public override void ValidateAttributeSet(AttributeSet attributeset)] - convalida l insieme degli attributi prima che il training venga avviato; public override MiningColumnContent[] GetSupInputContentTypes() { MiningColumnContent[] arinputcontenttypes = new MiningColumnContent[] { MiningColumnContent.Discrete, 73 P a g i n a

82 MiningColumnContent.Continuous, MiningColumnContent.Discretized, MiningColumnContent.Key }; return arinputcontenttypes; } serve dichiarare che contenuto possono avere le colonne (tutte tranne quella di target) della tabella di database utilizzata come dataset. Similmente [public override MiningColumnContent[] GetSupPredictContentTypes()] ha la stessa funzione ma riferita alla colonna target che, nel caso della classificazione, è d uopo limitare al campo discreto. Dobbiamo ancora implementare un metodo che specifichi quali funzioni di data mining standard si possono chiamare da Analysis Services su un modello creato con il nostro plug-in; a noi bastano le funzioni di predizione generiche: public override SupportedFunction[] GetSupportedStandardFunctions() { SupportedFunction[] arfuncs = new SupportedFunction[] { // General prediction functions}; return arfuncs; } Infine abbiamo implementato alcuni metodi che potrebbero essere utili per sviluppi futuri (se ad esempio si decidesse di implementare il visualizzatore grafico) ma che allo stato attuale del software sono ininfluenti: [public override string GetViewerType()], [public override bool GetSupportsDMDimensions()], [public override bool GetSupportsDrillThrough()], [public override bool GetDrillThroughMustIncludeChildren()], [public override bool GetCaseIdModeled()], [public override MarginalRequirements GetMarginalRequirements()], [public override MiningModelingFlag[] GetSupModelingFlags()], [public override string GetModelingFlagName(MiningModelingFlag flag)], [public override bool SupportsPMML()]. Per concludere la classe, serve un metodo che crei un istanza della classe Algorithm associata al modello di data mining che viene passato come parametro: 74 P a g i n a

83 public override AlgorithmBase CreateAlgorithm(ModelServices model) { return new Algorithm(); } La classe Algorithm La classe Algorithm è il cuore del nostro plug-in ed è così dichiarata: [public class Algorithm : AlgorithmBase]. Prima di tutto bisogna aggiungere la seguente riga alle inclusioni utilizzate per la classe precedente: using SmartLab.Datamining.SmartLabAlgo; Lasciamo vuoto il costruttore e creiamo anche il metodo [protected override void Initialize()] senza implementazione. Inizialmente la classe ricava parametri di interesse dalla collezione creata in precedenza, uno su tutti il kernel da utilizzare. Ciò è reso possibile dal metodo: protected voidparseparameters(miningparametercollection trainingparams) { foreach (MiningParameter param in trainingparams) { if (param.name!= null) { String paramname = param.name.tolower(); switch (paramname) { case "kernel_type": strkerneltype = (string) param.value; strkerneltype = strkerneltype.tolower(); break; } } } Come si può notare, il codice, nel caso di un solo parametro, potrebbe essere molto più semplice ma almeno in questo modo è pronto a gestire anche casi più generali. Successivamente tramite il metodo [void InsertCases(PushCaseSet caseset, MiningParameterCollection trainingparams)] vengono estratti, riga per riga 75 P a g i n a

84 tutti i dati di training dal dataset. Questo è reso possibile dalla classe ausiliaria [class MyCaseProcessor : ICaseProcessor] e dal suo unico metodo: public void ProcessCase(long caseid, MiningCase inputcase) { int ncolfeatures; double label; double[] values; algo.getvalues(inputcase, out values, out label, out ncolfeatures); if (totalrows == 0 ncolfeaturesprima == ncolfeatures { featuresrowstmp.addlast(values); labelstmp.addlast(label); } else throw new Exception("Diverso num di features da una riga all altra"); ncolfeaturesprima = ncolfeatures;//colonne totalrows++;//case totali }. Esso viene chiamato tante volte quanti sono i pattern in esame ed ogni riga della tabella (e il rispettivo target) vengono salvati in due linked list differenti tramite il metodo addlast(). Esaminiamo ora il metodo InsertCases sopracitato: protected override void InsertCases(PushCaseSet caseset, MiningParameterCollection trainingparams) { //parse dei parameteri parseparameters(trainingparams); //determino l attributo di target TargetAttribute = gettargetattribute(); numberofclasses = (int)attributeset.getattributestatecount(targetattribute); //lettura dei dati di training MyCaseProcessor processor = new MyCaseProcessor(this); caseset.startcases(processor); //creo matrice delle dimensioni giuste totalrows x ncolfeatures Xin = new double[processor.totalrows][]; for (int i = 0; i < processor.totalrows; i++) Xin[i] = new double[processor.ncolfeaturesprima]; //quindi la riempio processor.featuresrowstmp.copyto(xin, 0); //analogamente per il vettore etichette Yin = new double[processor.totalrows]; processor.labelstmp.copyto(yin, 0); smtalg = new SmartLab.Datamining.SmartLabAlgo.SmartLabAlgo( processor.ncolfeaturesprima,processor.totalrows,10,numbe rofclasses,xin,yin,decidekernel(strkerneltype)); 76 P a g i n a

85 smtalg.doit(); }. Una volta ricavati i dati, come si evince dalle ultime due istruzioni, questi vengono utilizzati per la creazione del modello di data mining. Tale processo è affidato ad un altra classe esterna ossia a [public class SmartLabAlgo] descritta nel paragrafo successivo. Nella classe Algortihm, sono presenti inoltre due metodi per il salvataggio e il caricamento di modelli già allenati (SaveContent (PersistenceWriter writer), LoadContent (PersistenceReader reader)). Questi non fanno altro che salvare in una lista (o ricavare da essa nel caso di LoadContent) tutti i dati sensibili ottenuti durante la fase di apprendimento. Bisogna innanzitutto dichiarare un enumerazione: enum Persistent { Parameters, smtalgo }; e a questo punto salvare i parametri e i dati relativi al modello allenato: protected override void SaveContent(PersistenceWriter writer) { writer.openscope((persistitemtag)persistent.parameters); writer.setvalue(maximuminput); writer.setvalue(lowerorder); writer.setvalue(exponent); writer.setvalue(strkerneltype); writer.closescope(); writer.openscope((persistitemtag)persistent.smtalgo); writer.setvalue(smtalg.ni); writer.setvalue(smtalg.np); writer.setvalue(smtalg.nclass); //salvo utti i val delle Xin for (int i = 0; i < smtalg.np;i++ ) { for (int j=0;j<smtalg.ni;j++) { writer.setvalue(smtalg.x[i, j]); } } P a g i n a

86 Il metodo LoadContent sopracitato dovrà essere speculare e sostituirà a writer.setvalue() il metodo reader.getvalue(). La classe Algorithm si occupa infine delle predizioni tramite il metodo: protected override void Predict(MiningCase inputcase, PredictionResult predictionresult) { double[] values; double label = 0; int ncoldellefeatures = 0; getvalues(inputcase,out values,out label,out ncoldellefeatures); double[,] tempmat = new double[1, values.length]; for (int i = 0; i < values.length; i++) tempmat[0, i] = values[i]; double[] tmpvect = new double[1]; tmpvect[0] = label; double[] predictedclass = new double[1]; smtalg.feedforward(tempmat, tmpvect,predictedclass); AttributeStatistics result = new AttributeStatistics(); result.attribute = gettargetattribute(); StateStatistics statestat = new StateStatistics(); StateValue stateval = new StateValue(); stateval.setdouble((predictedclass[0])); statestat.value =AttributeSet.TokenizeAttributeValue(result. Attribute,AttributeSet.UntokenizeAttributeValue( result.attribute,stateval)); result.statestatistics.add(statestat); predictionresult.addprediction(result); }. Per fare ciò si appoggia nuovamente alle librerie di SVM ed, in particolare, ai metodi di feedforward descritti nel paragrafo successivo. Questi utilizzano i risultati della fase di training e forniscono come uscita la classe di presunta appartenenza del pattern sottoposto a predizione. Inoltre è questo il metodo che si occupa anche di fornire il risultato della predizione a SQL Server tramite le ultime otto istruzioni. Già due volte abbiamo citato getvalues() dobbiamo ora dargli un corpo: public void getvalues(miningcase inputcase, out double[] doublevalues, out double label, out int featurescoltotal) { SortedDictionary<uint, double> dict = new SortedDictionary<uint,double>(); bool bcontinue = inputcase.movefirst(); while (bcontinue) { if (inputcase.value.isdouble) { dict.add(inputcase.attribute, inputcase.doublevalue); 78 P a g i n a

87 } else { dict.add(inputcase.attribute, (double)inputcase.value.index); bcontinue = inputcase.movenext(); } LinkedList<double> values = new LinkedList<double>(); label = 0; featurescoltotal = 0; SortedDictionary<uint, double>.enumerator enumerator = dict.getenumerator(); while (enumerator.movenext()) { uint attribute = enumerator.current.key; double value = enumerator.current.value; if (istarget(attribute)) { label = value; } else { values.addlast(value); featurescoltotal++; } } this.featurescoltotal = featurescoltotal; doublevalues = new double[featurescoltotal]; values.copyto(doublevalues, 0); }. Questo metodo non fa altro che salvare l inputcase in un dizionario in modo da ordinare gli attributi e trovare il valore dell attributo di target. Inoltre è qui che agli input non numerici viene associato un numero identificativo intero univoco per ogni stato in cui possono trovarsi. Alla fine il contenuto del dizionario viene trasferito in una linkedlist. Troviamo infine alcuni metodi ausiliari : *protected bool isnominal(uint attribute)] controlla se un attributo è discreto; [protected bool istarget(uint attribute)+ controlla se l attributo in questione è l oggetto della predizione; [protected uint gettargetattribute()] ritorna il target; [public int[] getlabels()] ritorna un identificativo intero per il target; [public String[] getattributenames()] ritorna il nome degli attributi; [private int decidekernel(string ker)] converte il tipo di kernel da stringa ad identificativo intero. 79 P a g i n a

88 6.2.3 La classe SmartLabAlgo Questa classe, a partire dai parametri e dai pattern ricavati ai passi precedenti, ha il compito di chiamare il metodo di training presente in SDM_Classification_TwoClass.dll oppure SDM_Classification_MultiClass.dll (par. 6.1) a seconda che si tratti di un problema di classificazione binaria o multiclasse. Il dialogo tra il codice C# e le due librerie (scritte in Fortran90) è reso possibile grazie a dei metodi preliminari ovvero da anteporre al resto del codice che permettono di associare le variabili della classe C# alle corrispettive nelle dll: [DllImport("C:\\dll locationtemp\\sdm_classification_twoclass.dll")] internal static extern void SDM_modelSelectionMain( [MarshalAs(UnmanagedType.Bool)] bool readf, [MarshalAs(UnmanagedType.LPStr)] StringBuilder file, [MarshalAs(UnmanagedType.I4)] int ni, [MarshalAs(UnmanagedType.I4)] int np, [MarshalAs(UnmanagedType.LPArray)] double[,] x, [MarshalAs(UnmanagedType.LPArray)] double[] y, Il costruttore deve inizializzare tutte le variabili che serviranno per l addestramento (riportiamo solo la parte per la classificazione binaria in quanto per il caso multiclasse si procede analogamente): public SmartLabAlgo(int numcol, int numrighe,int numfoldersxval,int numclass, double[][] featuresmat,double[] labelsvect,int kernel) { ni = numcol;//number of features - colonne meno quella di label np = numrighe;//number of patterns - righe nclass = numclass; readf = false; file = null; typkern = kernel; nfold = numfoldersxval; x = new double[np, ni]; fillxwithdatafromx(featuresmat); y = new double[np]; fillywithlablesfromy(labelsvect); if ((nclass-1 ) == 2) { strat = false;typegrid = 0;unbal = false;rand = false; typnorm=2;nstdev = 2.0;nbit = 0;cnorm = new double[2, ni]; typees = 4;typMS = 2;probab = false;minc = 1;maxC = 10000; nstepc = 8;minG = ;maxG = 1000;nStepG = 8;minP = 2; maxp = 3;nStepP = 2;typeQP = 2;Q = new double[np, np]; starta = true;startq = true;maxiter = ;verbose = 0; 80 P a g i n a

89 } wstep = 2;eps = 0.001;normAlp = false;debug = false;obst = 0.3; rempm = false;pm = false;gmin = 1.0;gmax = 10.0;gstep = 10; ggrid = 1;npfin = 0;xfin = new double[np, ni]; yfin = new double[np];gsig = 0.0;Copt = 0.0;bias = 0.0; pi = 0.0;Gopt = 0.0;err = -1;Popt = -1;alpha = new double[np]; Successivamente creiamo il metodo per l addestramento vero e proprio: public void doit() { if ((nclass-1) == 2) { SDM_modelSelectionMain(readf, file, ni, np, x, y, nfold, strat, typegrid, unbal, rand, typnorm, nstdev, nbit, cnorm, typees, typms, typkern, probab, minc, maxc, nstepc, ming, maxg, nstepg, minp, maxp, nstepp, typeqp, Q, starta, startq, maxiter, verbose, wstep, eps, normalp, debug, obst, rempm, pm, gmin, gmax, gstep, ggrid, ref npfin, xfin, yfin, ref gsig, ref Copt, ref Gopt, ref Popt, alpha, ref bias, ref pi, ref err); if (err > 0) throw new Exception("errore: "+err); } else if ((nclass-1) > 2) { SDM_MC_modelSelectionMain(readf, file, ni, np, (nclass-1), x, y, nfold, strat, typegrid, unbal, rand, typnorm, nstdev, nbit, cnorm, typees, typms, typkern, probab, minc, maxc, nstepc, ming, maxg, nstepg, minp, maxp, nstepp, obst, rempm, pm, gmin, gmax, gstep, ggrid, typeqp, Q, starta, startq, maxiter, verbose, wstep, eps, normalp, debug, ref npfin, xfin, yfin, ref Copt, ref Gopt, ref Popt, alpha, ref bias, ref gsig, ref pi, ref err); } else throw new Exception("bad # of classes"); }. Come si può notare dal codice, il metodo che richiama l algoritmo di apprendimento delle librerie di SVM richiede il passaggio di svariati parametri, tutti ricavati nelle 81 P a g i n a

90 fasi precedenti o impostati manualmente. Il risultato viene invece ritornato tramite reference (ref). Finito l addestramento si ottengono gli iperparametri e le alfa ottimali che vengono salvati per essere riutilizzati nella fase feedforward ovvero nel momento in cui serviranno previsioni su nuovi pattern. Tale fase è gestita dal metodo: public void feedforward(double[,] xtarget,double[] ytarget,double[] classresult) { if ((nclass-1) == 2) { for (int j = 0; j < ytarget.length;j++ ) { if (ytarget[j] == 1) ytarget[j] = -1; else ytarget[j] = 1; } cp = new double[ytarget.length]; SDM_IntfcFeedforward(readf,file,ni,np,ytarget.Length,xtarget,true, ytarget,typnorm,cnorm,xfin,yfin,alpha,bias,typkern,gopt,popt, false, gsig,classresult,cp,ref err); for (int j = 0; j <classresult.length;j++ ) { if (classresult[j] <0) classresult[j] = 1; else classresult[j] = 2; } } else if ((nclass-1 ) > 2) { cpmulti = new double[ytarget.length, (nclass-1)]; SDM_MC_IntfcFeedforward(readf, file, ni, np, ytarget.length, (nclass-1), xtarget, false, ytarget, typnorm, cnorm, xfin, yfin, alpha, bias, typkern, Gopt, Popt, false, gsig, classresult, cpmulti, ref err); }}. Come si può notare la gestione del caso binario è leggermente più complicata in quanto la fase di feedforward fornisce come risultato della predizione (classresult) la distanza dall iperpiano e non la classe; di conseguenza questa distanza va tradotta nell intero identificativo della classe di appartenenza (1 o 2). Dobbiamo infine implementare due metodi di appoggio (utilizzati in precedenza) che servono semplicemente per trasferire i dati da una variabile ad un altra: 82 P a g i n a

91 private void fillxwithdatafromx(double[][] feats) { for (int i = 0; i < np; i++) { for (int j = 0; j < ni; j++) { x[i,j]=feats[i][j]; } } } private void fillywithlablesfromy(double[] labels) { for (int i = 0; i < np; i++) { y[i] = labels[i];}} La classe AlgorithmNavigator La classe AlgorithmNavigator (class AlgorithmNavigator : AlgorithmNavigation Base) è utile per la fase esplorativa del modello creato. Questo può essere ad esempio interessante nel caso di algoritmi di clustering o, in generale, in un qualunque caso in cui il modello di training sia facilmente rappresentabile tramite un albero. Nel nostro caso abbiamo implementato la classe in quanto necessaria per il corretto funzionamento del plug-in all interno di Analysis Services anche se, al fine della mera classificazione, è inutile. Innanzitutto scriviamo un semplice costruttore: public AlgorithmNavigator(Algorithm currentalgorithm, bool dmdimension) { algorithm = currentalgorithm; fordmdimension = dmdimension; } Questa classe, nella nostra implementazione, non fa altro che creare il nodo radice dell albero e ripone in esso tutte le informazioni sul modello ottenuto in fase di training; in pratica l albero è composto da un solo nodo che altro non è che il modello stesso, come del resto si evince dal metodo: protected override NodeType GetNodeType() { 83 P a g i n a

92 } // Root node is Model return NodeType.Model; Con il metodo: protected override string GetNodeUniqueName() { return "Node"; } assegniamo un nome generico al nostro nodo. Altri metodi che dobbiamo implementare sono: protected override int GetNodeIdFromUniqueName(string nodeuniquename) { int nnode = System.Convert.ToInt32(nodeUniqueName); return nnode; } che converte il nome in un intero identificativo del nodo; protected override AttributeStatistics[] GetNodeDistribution() { return new AttributeStatistics[0]; } che ne ricava le proprietà ritornando informazioni sul modello. I restanti metodi, che sono implementati perché necessari, ma non utilizzati, sono: [protected override bool MoveToNextTree()], [protected override int GetCurrentNodeId()], [protected override bool ValidateNodeId(int nodeid)], [ protected override uint GetParentCount()], [protected override void MoveToParent(uint parentindex)], [protected override int GetParentNodeId(uint parentindex)], [protected override uint GetChildrenCount()], [protected override void MoveToChild(uint childindex)], [protected override int GetChildNodeId(uint childindex)], [protected override uint[] GetNodeAttributes()], [protected override double GetDoubleNodeProperty(NodeProperty property)], [protected 84 P a g i n a

93 override string GetStringNodeProperty(NodeProperty property)], [protected override AttributeStatistics[] GetNodeDistribution()] Il programma di installazione. Per concludere abbiamo anche sviluppato un programma di installazione. La sua mansione principale è installare nella cartella della Global Assembly Cache (GAC) le seguenti librerie: DMPluginWrapper.dll, Microsoft.AnalysisServices.AdomdClient.dll, setuphelper.dll, SVM.dll,smartlabAlgo.dll. Le prime due sono requisiti perché il tutto funzioni mentre le ultime tre sono il risultato della build del codice fino a qui descritto. Ne risulta il programma di setup raffigurato in Fig che porta l utente ad installare il plug-in in Analysis Services con una semplice procedura guidata. Figura 6.2 Procedura guidata di installazione 85 P a g i n a

94 Figura 6.3 Procedura guidata di installazione 86 P a g i n a

95 Capitolo 7 Fase di test Ora che abbiamo sviluppato il modulo di data mining e lo abbiamo installato all interno di Analysis Services siamo pronti a testare le sue performance in termini di classificazioni corrette e in termini di tempo di esecuzione. In quanto testeremo anche la velocità del modulo, di seguito riportiamo le specifiche della macchina sulla quale sono stati eseguiti tutti i test per dare un punto di riferimento nella lettura dei tempi: CPU: Intel Pentium M MHz RAM: 1GB DDR 166MHz SO: Windows XP SP3 32bit I test metteranno a confronto le capacità del nostro plug-in in relazione a quelli descritti nel paragrafo ovvero il modulo di SVM di Avanade Inc. e la rete neurale di Microsoft. Il primo è stato scelto in quanto, oltre al nostro, è l unico plugin di SVM disponibile per SQL Server. La rete neurale è stata scelta invece in quanto, tra gli algoritmi già presenti in Analysis Services, è quello che può affrontare più agevolmente e in maniera comparabile alla SVM la classificazione di problemi non linearmente separabili. Inoltre reti neurali ed SVM sono da sempre le due principali alternative nel campo della classificazione. 7.1 I datasets Al fine di eseguire i test, sono stati compiuti diversi esperimenti utilizzando dei dataset di benchmark tra i più sfruttati nel campo del Machine Learning. In 87 P a g i n a

96 particolare i dataset utilizzati nei nostri esperimenti sono quelli descritti in Tab. 7.1: vennero introdotti da G. Rätsch proprio allo scopo di paragonare gli algoritmi di Machine Learning [30]. In tutti i dataset, il set di training e quello di test non condividono nessun pattern, in altre parole i dati di test sono indipendenti da quelli di training così da testare i modelli su dati mai visti prima. Nome N di features Campioni di training Campioni di test Banana Breast-Cancer Diabetis Flare-Solar German Heart Image Ringnorm Splice Thyroid Titanic Twonorm Waveform Tabella 7.1 I dataset Rätsch 88 P a g i n a

97 7.2 Procedura di test Per eseguire i test abbiamo, prima di tutto, dovuto importare i dataset all interno di una tabella facente parte di un database. Per fare ciò è stato sufficiente prendere i dataset in formato.txt e importarli in Excel, connettendosi ad un database creato precedentemente, come evidenziato in Fig Perché sia possibile proseguire nei test è necessario che il Server e il servizio di Analysis Services siano attivi e raggiungibili. Figura 7.1 Esempio di dataset importato. In evidenza la connessione al Server. Successivamente per ognuno dei 13 set di dati di training importati è necessario creare una struttura di data mining. Tale opzione si trova nella sezione Modellazione dati - Avanzate e permette, tramite una procedura guidata, di 89 P a g i n a

98 scegliere quali features utilizzeremo per la creazione del modello, nel nostro caso le selezioneremo tutte (Fig. 7.2). Il passo successivo consiste proprio nella creazione del modello, cioè nella fase di training. Si accede alla procedura guidata corrispondente sempre dalla stessa sezione evidenziata in Fig Si effettua la scelta della struttura di dati sulla quale creare il modello, si sceglie l algoritmo che si desidera utilizzare, si impostano i parametri desiderati (Fig. 7.3) e infine si specifica quale feature utilizzare come target per la classificazione. E durante questa fase che viene cronometrato il tempo di esecuzione. Figura 7.2 Creazione di una struttura di data mining. 90 P a g i n a

99 Figura 7.3 Creazione di un modello di data mining. Terminata la fase di apprendimento si passa alla fase di test. In questa fase si utilizza il dataset di test (corrispondente a quello di training su cui è stato effettuato il passo precedente) e si esegue una query DMX predittiva su di esso: SELECT [model].[target] AS [prediction],t.[target] AS [input],t.* FROM [model] NATURAL PREDICTION AS T Tabella 7.2 Query DMX predittiva. Questa query esegue la predizione su ogni riga del test set e ritorna, per ogni pattern, il valore stimato e quello reale del target. A questo punto si può calcolare la percentuale di errori commessi dall algoritmo confrontando le due colonne. 91 P a g i n a

SVM. Veronica Piccialli. Roma 11 gennaio 2010. Università degli Studi di Roma Tor Vergata 1 / 14

SVM. Veronica Piccialli. Roma 11 gennaio 2010. Università degli Studi di Roma Tor Vergata 1 / 14 SVM Veronica Piccialli Roma 11 gennaio 2010 Università degli Studi di Roma Tor Vergata 1 / 14 SVM Le Support Vector Machines (SVM) sono una classe di macchine di che derivano da concetti riguardanti la

Dettagli

VC-dimension: Esempio

VC-dimension: Esempio VC-dimension: Esempio Quale è la VC-dimension di. y b = 0 f() = 1 f() = 1 iperpiano 20? VC-dimension: Esempio Quale è la VC-dimension di? banale. Vediamo cosa succede con 2 punti: 21 VC-dimension: Esempio

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

Tecniche di riconoscimento statistico

Tecniche di riconoscimento statistico Tecniche di riconoscimento statistico Applicazioni alla lettura automatica di testi (OCR) Parte 8 Support Vector Machines Ennio Ottaviani On AIR srl ennio.ottaviani@onairweb.com http://www.onairweb.com/corsopr

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Capitolo 13: L offerta dell impresa e il surplus del produttore

Capitolo 13: L offerta dell impresa e il surplus del produttore Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:

Dettagli

Corrispondenze e funzioni

Corrispondenze e funzioni Corrispondenze e funzioni L attività fondamentale della mente umana consiste nello stabilire corrispondenze e relazioni tra oggetti; è anche per questo motivo che il concetto di corrispondenza è uno dei

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Pro e contro delle RNA

Pro e contro delle RNA Pro e contro delle RNA Pro: - flessibilità: le RNA sono approssimatori universali; - aggiornabilità sequenziale: la stima dei pesi della rete può essere aggiornata man mano che arriva nuova informazione;

Dettagli

1. PRIME PROPRIETÀ 2

1. PRIME PROPRIETÀ 2 RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,

Dettagli

LE FUNZIONI A DUE VARIABILI

LE FUNZIONI A DUE VARIABILI Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

Note su quicksort per ASD 2010-11 (DRAFT)

Note su quicksort per ASD 2010-11 (DRAFT) Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea

Dettagli

Quando troncare uno sviluppo in serie di Taylor

Quando troncare uno sviluppo in serie di Taylor Quando troncare uno sviluppo in serie di Taylor Marco Robutti October 13, 2014 Lo sviluppo in serie di Taylor di una funzione è uno strumento matematico davvero molto utile, e viene spesso utilizzato in

Dettagli

Ottimizazione vincolata

Ottimizazione vincolata Ottimizazione vincolata Ricordiamo alcuni risultati provati nella scheda sulla Teoria di Dini per una funzione F : R N+M R M di classe C 1 con (x 0, y 0 ) F 1 (a), a = (a 1,, a M ), punto in cui vale l

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

1 Serie di Taylor di una funzione

1 Serie di Taylor di una funzione Analisi Matematica 2 CORSO DI STUDI IN SMID CORSO DI ANALISI MATEMATICA 2 CAPITOLO 7 SERIE E POLINOMI DI TAYLOR Serie di Taylor di una funzione. Definizione di serie di Taylor Sia f(x) una funzione definita

Dettagli

LA DISTRIBUZIONE DI PROBABILITÀ DEI RITORNI AZIONARI FUTURI SARÀ LA MEDESIMA DEL PASSATO?

LA DISTRIBUZIONE DI PROBABILITÀ DEI RITORNI AZIONARI FUTURI SARÀ LA MEDESIMA DEL PASSATO? LA DISTRIBUZIONE DI PROBABILITÀ DEI RITORNI AZIONARI FUTURI SARÀ LA MEDESIMA DEL PASSATO? Versione preliminare: 25 Settembre 2008 Nicola Zanella E-Mail: n.zanella@yahoo.it ABSTRACT In questa ricerca ho

Dettagli

Lezioni di Matematica 1 - I modulo

Lezioni di Matematica 1 - I modulo Lezioni di Matematica 1 - I modulo Luciano Battaia 16 ottobre 2008 Luciano Battaia - http://www.batmath.it Matematica 1 - I modulo. Lezione del 16/10/2008 1 / 13 L introduzione dei numeri reali si può

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli

Regressione Mario Guarracino Data Mining a.a. 2010/2011

Regressione Mario Guarracino Data Mining a.a. 2010/2011 Regressione Esempio Un azienda manifatturiera vuole analizzare il legame che intercorre tra il volume produttivo X per uno dei propri stabilimenti e il corrispondente costo mensile Y di produzione. Volume

Dettagli

Introduzione alla teoria dei database relazionali. Come progettare un database

Introduzione alla teoria dei database relazionali. Come progettare un database Introduzione alla teoria dei database relazionali Come progettare un database La struttura delle relazioni Dopo la prima fase di individuazione concettuale delle entità e degli attributi è necessario passare

Dettagli

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione

Dettagli

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi.

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi. Iniziamo con definizione (capiremo fra poco la sua utilità): DEFINIZIONE DI VARIABILE ALEATORIA Una variabile aleatoria (in breve v.a.) X è funzione che ha come dominio Ω e come codominio R. In formule:

Dettagli

Elementi di Psicometria con Laboratorio di SPSS 1

Elementi di Psicometria con Laboratorio di SPSS 1 Elementi di Psicometria con Laboratorio di SPSS 1 29-Analisi della potenza statistica vers. 1.0 (12 dicembre 2014) Germano Rossi 1 germano.rossi@unimib.it 1 Dipartimento di Psicologia, Università di Milano-Bicocca

Dettagli

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

Matematica 1 - Corso di Laurea in Ingegneria Meccanica Matematica 1 - Corso di Laurea in Ingegneria Meccanica Esercitazione su massimi e minimi vincolati 9 dicembre 005 Esercizio 1. Considerare l insieme C = {(x,y) R : (x + y ) = x } e dire se è una curva

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

~ Copyright Ripetizionando - All rights reserved ~ http://ripetizionando.wordpress.com STUDIO DI FUNZIONE

~ Copyright Ripetizionando - All rights reserved ~ http://ripetizionando.wordpress.com STUDIO DI FUNZIONE STUDIO DI FUNZIONE Passaggi fondamentali Per effettuare uno studio di funzione completo, che non lascia quindi margine a una quasi sicuramente errata inventiva, sono necessari i seguenti 7 passaggi: 1.

Dettagli

Esercizi su lineare indipendenza e generatori

Esercizi su lineare indipendenza e generatori Esercizi su lineare indipendenza e generatori Per tutto il seguito, se non specificato esplicitamente K indicherà un campo e V uno spazio vettoriale su K Cose da ricordare Definizione Dei vettori v,,v

Dettagli

Matematica e Statistica

Matematica e Statistica Matematica e Statistica Prova d esame (0/07/03) Università di Verona - Laurea in Biotecnologie - A.A. 0/3 Matematica e Statistica Prova di MATEMATICA (0/07/03) Università di Verona - Laurea in Biotecnologie

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Introduzione all Information Retrieval

Introduzione all Information Retrieval Introduzione all Information Retrieval Argomenti della lezione Definizione di Information Retrieval. Information Retrieval vs Data Retrieval. Indicizzazione di collezioni e ricerca. Modelli per Information

Dettagli

Ricerca di outlier. Ricerca di Anomalie/Outlier

Ricerca di outlier. Ricerca di Anomalie/Outlier Ricerca di outlier Prof. Matteo Golfarelli Alma Mater Studiorum - Università di Bologna Ricerca di Anomalie/Outlier Cosa sono gli outlier? L insieme di dati che sono considerevolmente differenti dalla

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

Esponenziali elogaritmi

Esponenziali elogaritmi Esponenziali elogaritmi Potenze ad esponente reale Ricordiamo che per un qualsiasi numero razionale m n prendere n>0) si pone a m n = n a m (in cui si può sempre a patto che a sia un numero reale positivo.

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0. EQUAZIONI E DISEQUAZIONI Le uguaglianze fra espressioni numeriche si chiamano equazioni. Cercare le soluzioni dell equazione vuol dire cercare quelle combinazioni delle lettere che vi compaiono che la

Dettagli

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione Capitolo 2 MATRICI Fra tutte le applicazioni su uno spazio vettoriale interessa esaminare quelle che mantengono la struttura di spazio vettoriale e che, per questo, vengono dette lineari La loro importanza

Dettagli

TECNICHE DI SIMULAZIONE

TECNICHE DI SIMULAZIONE TECNICHE DI SIMULAZIONE INTRODUZIONE Francesca Mazzia Dipartimento di Matematica Università di Bari a.a. 2004/2005 TECNICHE DI SIMULAZIONE p. 1 Introduzione alla simulazione Una simulazione è l imitazione

Dettagli

Probabilità discreta

Probabilità discreta Probabilità discreta Daniele A. Gewurz 1 Che probabilità c è che succeda...? Una delle applicazioni della combinatoria è nel calcolo di probabilità discrete. Quando abbiamo a che fare con un fenomeno che

Dettagli

Matematica generale CTF

Matematica generale CTF Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione

Dettagli

13. Campi vettoriali

13. Campi vettoriali 13. Campi vettoriali 1 Il campo di velocità di un fluido Il concetto di campo in fisica non è limitato ai fenomeni elettrici. In generale il valore di una grandezza fisica assegnato per ogni punto dello

Dettagli

Transitori del primo ordine

Transitori del primo ordine Università di Ferrara Corso di Elettrotecnica Transitori del primo ordine Si consideri il circuito in figura, composto da un generatore ideale di tensione, una resistenza ed una capacità. I tre bipoli

Dettagli

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S. 2002-03. A. Pisani, appunti di Matematica 1

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S. 2002-03. A. Pisani, appunti di Matematica 1 Le funzioni continue A. Pisani Liceo Classico Dante Alighieri A.S. -3 A. Pisani, appunti di Matematica 1 Nota bene Questi appunti sono da intendere come guida allo studio e come riassunto di quanto illustrato

Dettagli

Corso di. Dott.ssa Donatella Cocca

Corso di. Dott.ssa Donatella Cocca Corso di Statistica medica e applicata Dott.ssa Donatella Cocca 1 a Lezione Cos'è la statistica? Come in tutta la ricerca scientifica sperimentale, anche nelle scienze mediche e biologiche è indispensabile

Dettagli

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano

Dettagli

Regressione non lineare con un modello neurale feedforward

Regressione non lineare con un modello neurale feedforward Reti Neurali Artificiali per lo studio del mercato Università degli studi di Brescia - Dipartimento di metodi quantitativi Marco Sandri (sandri.marco@gmail.com) Regressione non lineare con un modello neurale

Dettagli

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria).

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Aprile 20 Indice Serie numeriche. Serie convergenti, divergenti, indeterminate.....................

Dettagli

MODULO 5 Appunti ACCESS - Basi di dati

MODULO 5 Appunti ACCESS - Basi di dati MODULO 5 Appunti ACCESS - Basi di dati Lezione 1 www.mondopcnet.com Modulo 5 basi di dati Richiede che il candidato dimostri di possedere la conoscenza relativa ad alcuni concetti fondamentali sui database.

Dettagli

Università per Stranieri di Siena Livello A1

Università per Stranieri di Siena Livello A1 Unità 20 Come scegliere il gestore telefonico CHIAVI In questa unità imparerai: a capire testi che danno informazioni sulla scelta del gestore telefonico parole relative alla scelta del gestore telefonico

Dettagli

Ottimizzazione Multi Obiettivo

Ottimizzazione Multi Obiettivo Ottimizzazione Multi Obiettivo 1 Ottimizzazione Multi Obiettivo I problemi affrontati fino ad ora erano caratterizzati da una unica (e ben definita) funzione obiettivo. I problemi di ottimizzazione reali

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Principi di analisi causale Lezione 2

Principi di analisi causale Lezione 2 Anno accademico 2007/08 Principi di analisi causale Lezione 2 Docente: prof. Maurizio Pisati Logica della regressione Nella sua semplicità, l espressione precedente racchiude interamente la logica della

Dettagli

e-dva - eni-depth Velocity Analysis

e-dva - eni-depth Velocity Analysis Lo scopo dell Analisi di Velocità di Migrazione (MVA) è quello di ottenere un modello della velocità nel sottosuolo che abbia dei tempi di riflessione compatibili con quelli osservati nei dati. Ciò significa

Dettagli

Relatore Chiar.mo Prof. Davide Anguita Relatore Aziendale Ing. Silvio Costa (IsoSistemi) Relatore Aziendale Ing. Marco De Leo (IsoSistemi)

Relatore Chiar.mo Prof. Davide Anguita Relatore Aziendale Ing. Silvio Costa (IsoSistemi) Relatore Aziendale Ing. Marco De Leo (IsoSistemi) Relatore Chiar.mo Prof. Davide Anguita Relatore Aziendale Ing. Silvio Costa (IsoSistemi) Relatore Aziendale Ing. Marco De Leo (IsoSistemi) Allievo Matteo Bardini Genova, 15/7/2011 1 Indice Il Process Mining.

Dettagli

CONTROLLO IN TENSIONE DI LED

CONTROLLO IN TENSIONE DI LED Applicazioni Ver. 1.1 INTRODUZIONE CONTROLLO IN TENSIONE DI LED In questo documento vengono fornite delle informazioni circa la possibilità di pilotare diodi led tramite una sorgente in tensione. La trattazione

Dettagli

Capitolo 4 Probabilità

Capitolo 4 Probabilità Levine, Krehbiel, Berenson Statistica II ed. 2006 Apogeo Capitolo 4 Probabilità Insegnamento: Statistica Corso di Laurea Triennale in Economia Facoltà di Economia, Università di Ferrara Docenti: Dott.

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Rappresentazione di numeri Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Un numero e un entità teorica,

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

La Programmazione Lineare

La Programmazione Lineare 4 La Programmazione Lineare 4.1 INTERPRETAZIONE GEOMETRICA DI UN PROBLEMA DI PROGRAMMAZIONE LINEARE Esercizio 4.1.1 Fornire una rappresentazione geometrica e risolvere graficamente i seguenti problemi

Dettagli

Computazione per l interazione naturale: macchine che apprendono

Computazione per l interazione naturale: macchine che apprendono Computazione per l interazione naturale: macchine che apprendono Corso di Interazione Naturale! Prof. Giuseppe Boccignone! Dipartimento di Informatica Università di Milano! boccignone@di.unimi.it boccignone.di.unimi.it/in_2015.html

Dettagli

FUNZIONI ELEMENTARI - ESERCIZI SVOLTI

FUNZIONI ELEMENTARI - ESERCIZI SVOLTI FUNZIONI ELEMENTARI - ESERCIZI SVOLTI 1) Determinare il dominio delle seguenti funzioni di variabile reale: (a) f(x) = x 4 (c) f(x) = 4 x x + (b) f(x) = log( x + x) (d) f(x) = 1 4 x 5 x + 6 ) Data la funzione

Dettagli

Feature Selection per la Classificazione

Feature Selection per la Classificazione 1 1 Dipartimento di Informatica e Sistemistica Sapienza Università di Roma Corso di Algoritmi di Classificazione e Reti Neurali 20/11/2009, Roma Outline Feature Selection per problemi di Classificazione

Dettagli

Studente: SANTORO MC. Matricola : 528

Studente: SANTORO MC. Matricola : 528 CORSO di LAUREA in INFORMATICA Corso di CALCOLO NUMERICO a.a. 2004-05 Studente: SANTORO MC. Matricola : 528 PROGETTO PER L ESAME 1. Sviluppare una versione dell algoritmo di Gauss per sistemi con matrice

Dettagli

Laboratorio di Pedagogia Sperimentale. Indice

Laboratorio di Pedagogia Sperimentale. Indice INSEGNAMENTO DI LABORATORIO DI PEDAGOGIA SPERIMENTALE LEZIONE III INTRODUZIONE ALLA RICERCA SPERIMENTALE (PARTE III) PROF. VINCENZO BONAZZA Indice 1 L ipotesi -----------------------------------------------------------

Dettagli

Introduzione all analisi dei segnali digitali.

Introduzione all analisi dei segnali digitali. Introduzione all analisi dei segnali digitali. Lezioni per il corso di Laboratorio di Fisica IV Isidoro Ferrante A.A. 2001/2002 1 Segnali analogici Si dice segnale la variazione di una qualsiasi grandezza

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo Logica Numerica Approfondimento E. Barbuto Minimo Comune Multiplo e Massimo Comun Divisore Il concetto di multiplo e di divisore Considerato un numero intero n, se esso viene moltiplicato per un numero

Dettagli

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA Tutti gli anni, affrontando l argomento della divisibilità, trovavo utile far lavorare gli alunni sul Crivello di Eratostene. Presentavo ai ragazzi una

Dettagli

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA Francesco Bottacin Padova, 24 febbraio 2012 Capitolo 1 Algebra Lineare 1.1 Spazi e sottospazi vettoriali Esercizio 1.1. Sia U il sottospazio di R 4 generato dai

Dettagli

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero

Dettagli

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi. E. Calabrese: Fondamenti di Informatica Problemi-1 Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi. L'informatica

Dettagli

Documentazione esterna al software matematico sviluppato con MatLab

Documentazione esterna al software matematico sviluppato con MatLab Documentazione esterna al software matematico sviluppato con MatLab Algoritmi Metodo di Gauss-Seidel con sovrarilassamento Metodo delle Secanti Metodo di Newton Studente Amelio Francesco 556/00699 Anno

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

1. Distribuzioni campionarie

1. Distribuzioni campionarie Università degli Studi di Basilicata Facoltà di Economia Corso di Laurea in Economia Aziendale - a.a. 2012/2013 lezioni di statistica del 3 e 6 giugno 2013 - di Massimo Cristallo - 1. Distribuzioni campionarie

Dettagli

Applicazioni lineari

Applicazioni lineari Applicazioni lineari Esempi di applicazioni lineari Definizione. Se V e W sono spazi vettoriali, una applicazione lineare è una funzione f: V W tale che, per ogni v, w V e per ogni a, b R si abbia f(av

Dettagli

APPUNTI SU PROBLEMI CON CALCOLO PERCENTUALE

APPUNTI SU PROBLEMI CON CALCOLO PERCENTUALE APPUNTI SU PROBLEMI CON CALCOLO PERCENTUALE 1. Proporzionalità diretta e proporzionalità inversa Analizziamo le seguenti formule Peso Lordo = Peso Netto + Tara Ricavo = Utile + Costo Rata = Importo + Interesse

Dettagli

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

11) convenzioni sulla rappresentazione grafica delle soluzioni

11) convenzioni sulla rappresentazione grafica delle soluzioni 2 PARAGRAFI TRATTATI 1)La funzione esponenziale 2) grafici della funzione esponenziale 3) proprietá delle potenze 4) i logaritmi 5) grafici della funzione logaritmica 6) principali proprietá dei logaritmi

Dettagli

Parte 2. Determinante e matrice inversa

Parte 2. Determinante e matrice inversa Parte. Determinante e matrice inversa A. Savo Appunti del Corso di Geometria 013-14 Indice delle sezioni 1 Determinante di una matrice, 1 Teorema di Cramer (caso particolare), 3 3 Determinante di una matrice

Dettagli

SPC e distribuzione normale con Access

SPC e distribuzione normale con Access SPC e distribuzione normale con Access In questo articolo esamineremo una applicazione Access per il calcolo e la rappresentazione grafica della distribuzione normale, collegata con tabelle di Clienti,

Dettagli

1 Applicazioni Lineari tra Spazi Vettoriali

1 Applicazioni Lineari tra Spazi Vettoriali 1 Applicazioni Lineari tra Spazi Vettoriali Definizione 1 (Applicazioni lineari) Si chiama applicazione lineare una applicazione tra uno spazio vettoriale ed uno spazio vettoriale sul campo tale che "!$%!

Dettagli

Parte 6. Applicazioni lineari

Parte 6. Applicazioni lineari Parte 6 Applicazioni lineari A Savo Appunti del Corso di Geometria 203-4 Indice delle sezioni Applicazioni fra insiemi, 2 Applicazioni lineari tra spazi vettoriali, 2 3 Applicazioni lineari da R n a R

Dettagli

Psicometria (8 CFU) Corso di Laurea triennale STANDARDIZZAZIONE

Psicometria (8 CFU) Corso di Laurea triennale STANDARDIZZAZIONE Psicometria (8 CFU) Corso di Laurea triennale Un punteggio all interno di una distribuzione è in realtà privo di significato se preso da solo. Sapere che un soggetto ha ottenuto un punteggio x=52 in una

Dettagli

SISTEMI INFORMATIVI AVANZATI -2010/2011 1. Introduzione

SISTEMI INFORMATIVI AVANZATI -2010/2011 1. Introduzione SISTEMI INFORMATIVI AVANZATI -2010/2011 1 Introduzione In queste dispense, dopo aver riportato una sintesi del concetto di Dipendenza Funzionale e di Normalizzazione estratti dal libro Progetto di Basi

Dettagli

( x) ( x) 0. Equazioni irrazionali

( x) ( x) 0. Equazioni irrazionali Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza

Dettagli

Data Warehousing (DW)

Data Warehousing (DW) Data Warehousing (DW) Il Data Warehousing è un processo per estrarre e integrare dati storici da sistemi transazionali (OLTP) diversi e disomogenei, e da usare come supporto al sistema di decisione aziendale

Dettagli

Un po di statistica. Christian Ferrari. Laboratorio di Matematica

Un po di statistica. Christian Ferrari. Laboratorio di Matematica Un po di statistica Christian Ferrari Laboratorio di Matematica 1 Introduzione La statistica è una parte della matematica applicata che si occupa della raccolta, dell analisi e dell interpretazione di

Dettagli

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli