Ristorazione - Speciale Linea Bi-color / Catering - Bi-color Special Line
D:/Ghio/Didattica/BI 2008-09/Dispense BI/Dispense BI · Prefazione Il termine Business Intelligence...
Transcript of D:/Ghio/Didattica/BI 2008-09/Dispense BI/Dispense BI · Prefazione Il termine Business Intelligence...
UNIVERSITA DEGLI STUDI DI GENOVAFACOLTA DI INGEGNERIA
Corso di Laurea Specialistica in Ingegneria Gestionale
Dispense per le esercitazioni dell’insegnamento
Business Intelligence
Prof. Davide Anguita
A cura di: Alessandro Ghio
Anno Accademico 2008 - 2009
Documento realizzato in LATEX
Indice
Prefazione 5
Principali acronimi utilizzati 7
1 Introduzione 9
1.1 Cos’e il Data Mining? . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Terminologia di base . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Data Mining Process . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1 Definizione degli obiettivi . . . . . . . . . . . . . . . . 14
1.3.2 Organizzazione dei dati . . . . . . . . . . . . . . . . . . 15
1.3.3 Analisi esplorativa dei dati . . . . . . . . . . . . . . . . 15
1.3.4 Scelta delle metodologie di analisi . . . . . . . . . . . . 19
1.3.5 Analisi dei dati . . . . . . . . . . . . . . . . . . . . . . 20
1.3.6 Valutazione dei metodi statistici e dei risultati ottenuti 20
1.3.7 Implementazione dell’algoritmo . . . . . . . . . . . . . 21
1.4 Il software che useremo: WEKA . . . . . . . . . . . . . . . . . 21
1.5 Organizzazione della dispensa . . . . . . . . . . . . . . . . . . 24
2 Organizzazione dei dati 25
2.1 Tipi di attributi . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.1 Variabili qualitative . . . . . . . . . . . . . . . . . . . . 26
2.1.2 Variabili quantitative . . . . . . . . . . . . . . . . . . . 26
2.2 La matrice dei dati . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.1 Gestione delle variabili . . . . . . . . . . . . . . . . . . 28
2.3 Normalizzazione di un dataset . . . . . . . . . . . . . . . . . . 29
3 Analisi esplorativa dei dati 31
3.1 Distribuzioni di frequenza . . . . . . . . . . . . . . . . . . . . 31
1
3.1.1 Distribuzioni univariate . . . . . . . . . . . . . . . . . 31
3.1.2 Distribuzioni bivariate e multivariate . . . . . . . . . . 32
3.2 Analisi esplorativa univariata . . . . . . . . . . . . . . . . . . 33
3.2.1 Richiami su stimatori e loro caratteristiche . . . . . . . 33
3.2.2 Indici di posizione . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Indici di variabilita . . . . . . . . . . . . . . . . . . . . 35
3.2.4 Indici di eterogeneita . . . . . . . . . . . . . . . . . . . 36
3.3 Analisi esplorativa bivariata e multivariata . . . . . . . . . . . 38
3.4 Esempi di analisi con WEKA . . . . . . . . . . . . . . . . . . 40
3.5 Riduzione di dimensionalita . . . . . . . . . . . . . . . . . . . 43
3.6 Esempi di riduzione di dimensionalita utilizzando WEKA . . . 44
4 Classificazione 48
4.1 Zero Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 49
4.1.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.3 Estensione al caso multiclasse . . . . . . . . . . . . . . 49
4.1.4 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 49
4.2 Naive Bayesian Classifier . . . . . . . . . . . . . . . . . . . . . 54
4.2.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 54
4.2.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 55
4.2.3 Estensione al caso multiclasse . . . . . . . . . . . . . . 55
4.2.4 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 56
4.3 Reti neurali: MultiLayer Perceptrons . . . . . . . . . . . . . . 56
4.3.1 Cenni storici: il percettrone . . . . . . . . . . . . . . . 56
4.3.2 Architettura di un MLP . . . . . . . . . . . . . . . . . 60
4.3.3 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 62
4.3.4 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 64
4.3.5 Estensione al caso multiclasse . . . . . . . . . . . . . . 64
4.3.6 Esempio di analisi in WEKA (I) . . . . . . . . . . . . . 64
4.3.7 Esempio di analisi in WEKA (II) . . . . . . . . . . . . 66
4.3.8 Validation set e test set . . . . . . . . . . . . . . . . . 67
4.4 Support Vector Machines . . . . . . . . . . . . . . . . . . . . . 68
4.4.1 Il problema del classificatore a massimo margine . . . . 68
4.4.2 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 71
4.4.3 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 73
2
4.4.4 Estensione al caso multiclasse . . . . . . . . . . . . . . 73
4.4.5 SVM e la probabilita . . . . . . . . . . . . . . . . . . . 74
4.4.6 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 75
4.4.7 SVM per feature selection . . . . . . . . . . . . . . . . 76
4.5 Decision Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.5.1 La nascita degli alberi di decisione . . . . . . . . . . . 80
4.5.2 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 82
4.5.3 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 86
4.5.4 Estensione al caso multiclasse . . . . . . . . . . . . . . 86
4.5.5 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 87
5 Regressione 90
5.1 Zero Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.1.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 90
5.1.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 90
5.1.3 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 91
5.2 Support Vector Regression . . . . . . . . . . . . . . . . . . . . 91
5.2.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 92
5.2.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 93
5.2.3 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 93
5.3 Regression Trees . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.3.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 93
5.3.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 94
5.3.3 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 94
6 Clustering 96
6.1 k–Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.1.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 97
6.1.2 Fase in avanti . . . . . . . . . . . . . . . . . . . . . . . 98
6.1.3 Esempio di analisi in WEKA . . . . . . . . . . . . . . . 98
7 Association rules 100
7.1 Apriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.1.1 Apprendimento . . . . . . . . . . . . . . . . . . . . . . 101
7.1.2 Esempio di analisi in WEKA (I) . . . . . . . . . . . . . 104
7.1.3 Esempio di analisi in WEKA (II) . . . . . . . . . . . . 106
3
8 Valutazione comparativa di algoritmi di Data Mining 108
8.1 Metodi (pratici) per la comparazione fra algoritmi . . . . . . . 108
8.1.1 Training set (TS) . . . . . . . . . . . . . . . . . . . . . 108
8.1.2 Validation set (VS) . . . . . . . . . . . . . . . . . . . . 109
8.1.3 K–Fold Cross Validation (KCV) . . . . . . . . . . . . . 109
8.2 Analisi in WEKA explorer . . . . . . . . . . . . . . . . . . . . 110
8.2.1 Metodo TS . . . . . . . . . . . . . . . . . . . . . . . . 110
8.2.2 Metodo VS . . . . . . . . . . . . . . . . . . . . . . . . 111
8.2.3 Metodo KCV . . . . . . . . . . . . . . . . . . . . . . . 111
8.3 Analisi in WEKA KF . . . . . . . . . . . . . . . . . . . . . . . 112
8.3.1 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.3.2 Selezione della classe . . . . . . . . . . . . . . . . . . . 113
8.3.3 Creazione delle k fold per la KCV . . . . . . . . . . . . 113
8.3.4 Inserimento dei blocchi per le SVM . . . . . . . . . . . 113
8.3.5 Elaborazione dei risultati . . . . . . . . . . . . . . . . . 114
8.3.6 Uscita a video . . . . . . . . . . . . . . . . . . . . . . . 114
8.3.7 Configurazione finale ed esecuzione . . . . . . . . . . . 114
8.4 Note conclusive . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Bibliografia 117
4
Prefazione
Il termine Business Intelligence (BI ) e piuttosto vago. Una definizione
che comunemente puo essere rintracciata in letteratura [14] e la seguente:
Con il termine business intelligence (BI) ci si puo solitamente
riferire a: un insieme di processi aziendali per raccogliere ed ana-
lizzare informazioni strategiche; la tecnologia utilizzata per rea-
lizzare questi processi; le informazioni ottenute come risultato di
questi processi.
Per quanto abbia riscosso sempre maggiore interesse solo negli ultimi
anni, il processo di BI venne definito come tale nel 1958 da H. P. Luhn,
ricercatore dell’IBM: ovviamente, all’epoca non si avevano a disposizione
gli strumenti di oggi (a partire dal computer stesso, almeno nell’accezione
moderna di PC), ma gia era nata l’idea che i dati, specialmente quando sono
numerosi, debbano essere interpretati al fine di fornire informazioni utili. Non
solo: le stesse informazioni devono essere a loro volta analizzate per trovare
indici (quanto piu completi e sintetici) in grado di velocizzare il processo
decisionale.
E immediato, quindi, comprendere come una parte fondamentale del pro-
cesso di BI sia costituita dal Data Mining (DM ). Traducendo letteralmente
il termine Mining, esso deriva da to mine, ovvero estrarre (come si fa, nella
pratica, in miniera) risorse preziose dalle viscere dei (numerosi, in generale)
dati a disposizione. Proprio per questo motivo, al Data Mining viene spes-
so affiancato il concetto di Knowledge Discovery (KD): e quindi frequente
sentire parlare non solo di DM, ma, piu in generale, di KDDM.
Nel corso di questo insegnamento vedrete che il DM fa parte di un pro-
cesso molto complesso, che comprende progettazione ed interrogazione di da-
tabase, creazione di Data Marts, reportistica, ecc. Durante le esercitazioni,
data l’esiguita del tempo a nostra disposizione, ci concentreremo solamente
5
sulla presentazione dei principali algoritmi di DM per BI: sia, quindi, ben
chiaro che:
• queste esercitazioni (sfortunatamente) non potranno coprire per intero
il problema della BI;
• verranno presentati solo alcuni algoritmi (i piu famosi ed usati, seppure
in moltissime varianti che non analizzeremo), scelti tra la miriade di
tecniche a disposizione in letteratura.
Per queste dispense, ho tratto ispirazione da [10], sebbene Wikipedia1
offra sempre ottimi spunti di approfondimento.
1http://wikipedia.it/
6
Principali acronimi utilizzati
Acronimo Significato
BI Business Intelligence
DM Data Mining
KD Knowledge Discovery
KDDM Knowledge Discovery & Data Mining
MBA Market Basket Analysis
ML Machine Learning
MLP MultiLayer Perceptrons
NN Neural Networks (reti neurali)
SLT Statistical Learning Theory
SVM Support Vector Machine
NBC Naive Bayesian Classifier
IT Information Technology
OLAP OnLine Analytical Processing
KF Knowledge Flow (programma di WEKA)
CV Coefficiente di variazione
IQR Inter–Quartile Range
PCA Principal Component Analysis
SVD Singular Value Decomposition
MAE Mean Absolute Error
RMSE Root Mean Squared Error
TP True Positives
FP False Positives
CM Confusion Matrix
7
Acronimo Significato
BP BackPropagation
WTA Winner Take All
CCQP Constrained Convex Quadratic Problem
SMO Sequential Minimal Optimization
KKT Condizioni di Karush–Kuhn–Tucker
OVA One Vs. All
AVA All Vs. All
DT Decision Trees
SVR Support Vector Regression
RT Regression Trees
KCV K–Fold Cross Validation
8
Capitolo 1
Introduzione
1.1 Cos’e il Data Mining?
Posto nella Prefazione che in queste dispense ci occuperemo solamente
dei principali algoritmi di Data Mining (DM) per Business Intelligence (BI),
vediamo di approfondire meglio cosa si intende per Data Mining.
Consideriamo il caso di una catena di supermercati e supponiamo di avere
tre centri di vendita: per esempio, Genova, Savona e La Spezia. Ipotizziamo
inoltre di aver sede a Genova e di avere a disposizione un enorme database in
cui salviamo tutte le transazioni (i.e., tutte le vendite) di ogni supermercato.
Da questa montagna di dati vorremmo estrarre, per esempio, informazioni di
piu alto livello, come le relazioni fra prodotti venduti. Per renderci conto di
quanti dati potremmo avere a disposizione, basti pensare che, in media, un
supermercato di dimensione medio–grande in una giornata puo effettuare piu
di 2000 vendite in giorni feriali e 3000 nei festivi. Supponiamo di collezionare
dati per il mese di luglio 2008, che comprende 8 giorni festivi e 23 feriali.
Considerando i 3 supermercati della nostra piccola catena abbiamo:
(2000 · 23 + 3000 · 8) · 3 = 210000,
piu di 200000 dati! E solo in un mese!! E abbastanza intuitivo capire che
analizzare ad occhio piu di 200mila dati non e banale...
Supponiamo ora di disporre di un algoritmo A in grado di identificare
relazioni fra prodotti venduti: potrebbe sovente capitare che il cliente che
acquista Coca Cola compri anche degli snack. Il nostro algoritmo A indivi-
duera in automatico tali relazioni, che potranno poi essere sfruttate al fine di
9
sistemare Coca Cola e snack in maniera strategica all’interno degli scaffali,
oppure per organizzare le offerte commerciali da proporre ai clienti. Non
solo: si possono utilizzare altri algoritmi B, C,... per individuare altri tipi di
indici o estrarre altre informazioni, dividendo queste ultime sulla base della
citta in cui il supermercato e situato o per tipologia di prodotto. Questo
tipo di problema viene detto Market Basket Analysis (MBA) ed e una delle
situazioni in cui le metodologie di BI (e, in particolare, le tecniche di DM)
trovano applicazione.
Altri migliaia di esempi potrebbero essere portati in questa sede. Quello
che ci interessa maggiormente e, ora, cercare di dare una definizione di Data
Mining [9]:
Data mining is the process of selection, exploration, and modelling
of large quantities of data to discover regularities or relations that
are at first unknown with the aim of obtaining clear and useful
results for the owner of the database.
Le metodologie utilizzate dal DM provengono da due mondi diversi, in
generale:
1. alcuni algoritmi sono stati sviluppati nell’ambito del Machine Lear-
ning (ML), il cui scopo e 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 piu efficace proces-
so di generalizzazione del modello anche a casi non ancora osservati.
Il primo esempio di algoritmo di ML e stato il percettrone di Rosen-
blatt [21], dal quale hanno avuto origine modelli sempre piu complessi
come i MultiLayer Perceptrons (MLP), facenti parte della categoria
delle reti neurali (Neural Networks, NN ), di cui torneremo a parlare
a tempo debito. Negli ultimi dieci anni circa, ha preso sempre piu
piede, nel campo del ML, l’algoritmo Support Vector Machine (SVM ),
che, basandosi su una teoria statistica molto solida e chiamata Stati-
stical Learning Theory (SLT ) [23], 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: e il caso, per esem-
10
pio, di algoritmi basati sulle teorie di Bayes, come il Naive Bayesian
Classifier (NBC ) [12].
Volendo unire assieme nel mondo del DM i principi della statistica e del
ML, possiamo dire che negli algoritmi di DM devono permettere un’analisi
approfondita dei dati (come i modelli statistici), ma devono anche garanti-
re 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: tornando all’esempio del supermercato,
il rumore consiste nel fatto che ognuno di noi ha gusti diversi. Ad esempio,
qualcuno potrebbe gradire acquistare Coca Cola abbinata a salatini, men-
tre qualcun altro abbina l’acquisto della Coca Cola ad una torta dolce. Se
noi memorizzassimo ogni possibile associazione, senza cercare di estrarre in-
formazione, non avremmo piu Data Mining, per la precisione non avremmo
piu il Mining! Si viene, quindi, a porre un trade–off tra memorizzazione e
capacita di generalizzazione dei dati disponibili: in pratica, non dovremo ave-
re ne un modello troppo complicato (ovvero, che memorizza perfettamente
sia il dato disponibile sia il rumore che affligge per definizione i dati a no-
stra disposizione), ne troppo generale, ovvero non piu in grado di descrivere
adeguatamente la sorgente dei nostri dati.
Come ogni algoritmo, anche i metodi di DM generano un output, che
sara di natura diversa a seconda del tipo di applicazione che ci troviamo ad
analizzare (rimandiamo di qualche paragrafo ulteriori chiarimenti a riguar-
do). Spesso, l’output del nostro modello, nell’ambito della BI, puo fornire
nuova ispirazione per raccogliere altri dati, oppure per generare nuovi indici
o ipercubi per l’analisi: ecco perche, in applicazioni di tipo business, si parla
di circolo virtuoso della conoscenza [5], in quanto l’estrazione di conoscenza
porta a nuove informazioni, che possono a loro volta essere usate per ottenere
ulteriori e piu approfondite nozioni a riguardo. Per questi motivi, il DM non
e semplicemente l’utilizzo di uno o piu algoritmi o tecniche statistiche su dati
utilizzando un calcolatore; il DM e un processo di BI che dev’essere usato
insieme a tutti gli strumenti di Information Technology (IT ) al fine di fornire
un supporto alle decisioni in ambito aziendale. Non solo: tale informazione
dev’essere utile, quanto piu corretta possibile e di facile interpretazione per
tutti, dal consigliere di amministrazione all’impiegato dell’area logistica.
11
Temperatura Pressione Guasto
32 111 0
35 110 0
44 144 1
28 109 0
27 108 0
31 110 0
Tabella 1.1: Esempio di controllo sul funzionamento di un macchinario.
1.2 Terminologia di base
Prima di avventurarci in maggiori dettagli, elenchiamo un po’ di termini
di base.
Viene definito dataset un insieme di dati a disposizione per l’analisi: puo
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. Que-
st’ultimo, cosı trovato, verra quindi usato nella cosiddetta fase in avanti o
feedforward, ovvero lo step di applicazione a run–time. Distingueremo piu
avanti in questa dispensa, invece, i validation set e test set.
Un dataset e composto, come dice il nome stesso, di dati: ogni osserva-
zione viene chiamata pattern. Ogni pattern e caratterizzato da un insieme
di valori, detti variabili (variables), attributi (attributes) o features. Ad ogni
pattern puo essere assegnato un target, ovvero un valore indicante una par-
ticolare proprieta di ogni pattern. In pratica, una feature svolge il ruolo di
target, se cosı deciso da noi. Un paio di esempi chiariranno il tutto.
Consideriamo il dataset di Tab. 1.1: ogni riga del dataset e un pattern,
mentre ogni colonna rappresenta una feature. Questo dataset, in particolare,
e composto da 6 pattern, ognuno dei quali e costituito da 3 variabili (feature).
Possiamo, pero, considerare il seguente problma da analizzare: a seconda del
livello di temperatura e pressione, vogliamo controllare se un macchinario e
guasto o funzionante. In tal caso, Guasto svolge il ruolo di target, quindi il
nostro dataset e composto da 6 pattern, 2 attributi e un target.
Nel caso del dataset di Tab. 1.2, invece, abbiamo 6 pattern e 5 feature: in
questo caso, tuttavia, e difficile identificare una feature come target. Difficile
12
Vendita Coca Cola Snack Pane Gelato
110500 0 1 0 1
110501 1 1 0 0
110502 1 1 0 0
110503 1 1 0 0
110504 0 1 0 1
110505 0 1 0 1
Tabella 1.2: Esempio di vendite in un supermercato.
ma non impossibile: per esempio, potremmo voler prevedere se un cliente
acquistera o meno gelato sulla base degli acquisti di Coca Cola, snack e
pane, per quanto analisi di questo tipo non siano particolarmente utili. In
generale, e l’applicazione e il tipo di analisi che ci guidano a selezionare
(eventualmente) una feature come target.
Esistono, peraltro, target di diverso tipo (ove presenti), a seconda del
problema che si vuole affrontare. Normalmente, si usa la seguente notazione
per indicare un dataset dotato di target: {(x1, y1), ...., (xl, yl)}, con xi ∈ �m
indicanti i pattern. Quindi, m e il numero di feature, l e il numero di pattern,
mentre yi varia, come detto, a seconda del tipo di problema:
• se yi ∈ {−1, 1} oppure yi ∈ {0, 1}, si parla di classificazione biclasse:
considerando Guasto come target, il dataset di Tab. 1.1 e un esempio
di dataset per classificazione binaria, in cui le feature Temperatura e
Pressione sono utilizzate per cercare una relazione fra esse e, appunto,
Guasto. Tale target puo assumere solo due valori binari, in quanto una
macchina puo solo essere guasta o funzionante (anche se vedremo che
si puo introdurre un discorso di tipo probabilistico, ma ne riparleremo
a tempo debito);
• se yi ∈ S ⊂ ℵ, ovvero il target puo assumere solo un certo set di
valori interi, si parla di classificazione multiclasse, semplice estensione
di quanto descritto al punto precedente;
• se yi ∈ � si parla di regressione, ed equivale di fatto a trovare una
relazione f(·) del tipo y = f(x).
13
1.3 Data Mining Process
Viene definita Data Mining Process una serie di operazioni che vanno
dalla definizione preliminare degli obiettivi per l’analisi fino alla valutazione
dei risultati ottenuti. Di seguito, elenchiamo le varie attivita caratterizzanti
il DM Process, quindi, nei successivi paragrafi, daremo maggiori dettagli sulle
varie fasi di progetto:
1. Definizione degli obiettivi 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 azien-
dale.
1.3.1 Definizione degli obiettivi
Sebbene questa fase sembri la piu immediata e semplice, non e sempre
cosı: spesso gli obiettivi e le problematiche aziendali non sono cosı chiari, ne
e 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:
torniamo al caso della catena di supermercati, ad esempio. Supponiamo
che l’obiettivo prefissato sia di voler aumentare i profitti: che tipo di analisi
vogliamo effettuare sui dati? Trovare le associazioni fra prodotti per orga-
nizzare meglio la disposizione degli scaffali o le offerte? Trovare l’andamento
dei guadagni per prodotto e/o supermercato per, eventualmente, decidere di
ingrandire un market o un reparto, o aprirne direttamente uno nuovo?
Questa fase e di certo la piu critica, e spesso viene sottovalutata: e
importante che gli obiettivi dell’analisi siano definiti precisamente a priori e
non persistano dubbi prima di passare alle fasi successive.
14
1.3.2 Organizzazione dei dati
Una volta terminata la fase 1.3.1, iniziamo a considerare i dati a nostra
disposizione. Normalmente, in un’azienda si ha a disposizione un grande
database di dati, il data warehouse, da cui estraiamo i data marts.
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 (per esempio, considerando il dataset di Tab. 1.2, il codice della
vendita in molti casi non ha utilita alcuna per un’analisi sui dati). Questa
fase aiuta anche, in maniera retroattiva, a migliorare (se necessario) la qualita
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
feature con molti valori missing).
La seconda fase consiste nella creazione di subset di dati: questo step e
necessario soprattutto quando ci troviamo a trattare masse davvero impo-
nenti di dati, per le quali l’utilizzo di tutto il data mart spesso porta ad avere
meno informazione (meglio, un’informazione meno “pulita”) rispetto all’uti-
lizzo di sottoinsiemi di esso opportunamente scelti. In generale, l’utilizzo di
dataset troppo grandi puo portare al fenomeno dell’overfitting, ovvero alla
memorizzazione dei dati (e della realizzazione particolare del rumore che li
affligge). Inoltre, vedremo piu avanti nella nostra trattazione come i dati non
selezionati possano diventare ottimo banco di prova per verificare le presta-
zioni del modello durante la fase 1.3.6. La selezione dei subset, tuttavia, e
tutt’altro che banale, ed e stata affrontata spesso in letteratura [4, 3].
1.3.3 Analisi esplorativa dei dati
Un’analisi esplorativa dei dati e spesso determinante al fine di incremen-
tare la qualita dei risultati ottenuti. Queste metodologie di analisi, simili
nella loro filosofia alle tecniche OLAP (OnLine Analytical Processing), per-
mettono 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);
15
• feature analysis (altresı variable analysis);
• outlier detection.
La feature selection consta nella selezione di un sottoinsiemi di variabi-
li, caratterizzanti ogni dato, che permettono di preparare e riorganizzare il
nostro data mart (ad esempio) in modo da rendere piu semplice e piu per-
formante le analisi dei passi successivi. Un esempio dovrebbe chiarire meglio
questo concetto.
Torniamo al caso della catena di supermercati, e supponiamo che il nostro
data mart sia piuttosto piccolo e sia rappresentato in Tab. 1.2: ovviamente,
non e un caso reale, ma ci serve come spunto per qualche riflessione. La
prima colonna rappresenta il codice univoco di una vendita, per esempio il
numero seriale dello scontrino fiscale; le colonne successive rappresentano
4 prodotti che possono essere acquistati: uno 0 indica che quel prodotto
non e stato venduto in quella particolare transazione, mentre un 1 indica
la vendita del prodotto. Notiamo subito due cose: in questo caso, tutti
hanno acquistato snack, e nessuno ha acquistato pane. Pertanto, sia gli
snack sia il pane ci danno informazioni di base (ovvero che ai nostri clienti
piacciono moltissimo i nostri snack e che dobbiamo cambiare panettiere...)
ma sono variabili che potrebbero essere inutili per analisi piu sofisticate, non
permettendo distinzioni tra le varie vendite. Come accorgersi di tutto cio in
casi reali con migliaia di vendite e prodotti? Semplice, basta controllare le
colonne a varianza nulla, ad esempio, o utilizzare appositi algoritmi di ranking
per classificare l’informativita delle variabili (ne parleremo piu avanti).
Selezionare un sottoinsieme di variabili puo essere utile in quanto:
• spesso feature poco informative peggiorano le prestazioni di un modello;
• molti algoritmi soffrono la curse of dimensionality in rapporto al nu-
mero di feature.
Non e sempre vantaggioso, comunque, ridurre il numero di variabili, in
quanto tutto dipende dal tipo di analisi che vogliamo affrontare. Tornando
alla Tab. 1.2, eliminare la colonna snack, in quanto poco informativa, potreb-
be essere una buona scelta in alcune metodologie, ma potrebbe, ad esempio,
farci perdere delle relazioni importanti nel caso di cui abbiamo discusso nel
paragrafo 1.1. Morale della favola: la feature selection va applicata con molta
16
0 0.2 0.4 0.6 0.8 10
0.5
1
1.5
2
2.5
3
Figura 1.1: Campioni del segnale ignoto y = f(x). In 0.8, si noti il presunto
outlier.
attenzione e solo sapendo esattamente cio che si sta facendo e l’analisi che
vorremo applicare in seguito.
La feature analysis, invece, consiste nell’analizzare le caratteristiche sta-
tistiche di base del nostro insieme di dati e notificare (se e il caso) l’eventuale
mancanza di ulteriori variabili, che potrebbero facilitare le operazioni suc-
cessive. Di fatto, la feature analysis permette di capire preventivamente
se e meglio intervenire sulla sorgente dati o se le variabili che abbiamo a
disposizione dovrebbero essere sufficienti per gli algoritmi da applicare.
Per spiegare piu in dettaglio l’operazione di outlier detection, invece,
dobbiamo definire innanzitutto cos’e un outlier. Un dato viene detto outlier
se e palesemente afflitto da un picco di rumore, quindi se e estremamente
sbagliato. Supponiamo di voler ricostruire una relazione del tipo y = f(x) in
un intervallo [0, 1] a partire da alcuni valori campionati (xc, yc) e di trovare dei
sample come in Fig. 1.1. Con ogni probabilita, il campione in 0.8 e sbagliato,
magari perche in quel momento sul sistema e intervenuto un picco di disturbo.
Nella ricostruzione del segnale, mantenere o eliminare l’outlier puo avere
influenze importanti sulla qualita del risultato finale: le Figg. 1.2 e 1.3
mostrano due approssimazioni del segnale includendo e escludendo l’outlier.
Abbiamo detto che un outlier e un dato estremamente sbagliato: ma
estremamente, di preciso, cosa significa? Ovviamente, il tutto varia da caso
17
0 0.2 0.4 0.6 0.8 1−0.5
0
0.5
1
1.5
2
2.5
3
Figura 1.2: Approssimazione escludendo l’outlier.
0 0.2 0.4 0.6 0.8 1−0.5
0
0.5
1
1.5
2
2.5
3
Figura 1.3: Approssimazione includendo l’outlier.
18
a caso, e molto si basa sulle eventuali informazioni a priori che potremmo
avere a disposizione. Nel caso di Fig. 1.1, qualora sapessimo che i dati
hanno un andamento lineare, ovviamente l’outlier deve essere escluso; senza
informazioni a priori, corriamo comunque un rischio.
Una nota conclusiva: spesso, proprio per i motivi precedentemente pre-
sentati, l’outlier detection e considerata, a tutti gli effetti, un metodo stati-
stico da valutare attentamente sulla base della qualita dei risultati ottenuti
e viene pertanto spostata dalla fase di analisi esplorativa dei dati alle fasi
successive del DM Process.
1.3.4 Scelta delle metodologie di analisi
Ci sono moltissimi metodi statistici e ognuno di essi e stato implementato
in una miriade di algoritmi: e 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 obiettivi prefissati
e dai dati che abbiamo a disposizione. Per questo motivo, si dice che il Data
Mining Process e guidato dall’applicazione.
Le principali classi di metodi statistici sono:
1. Metodi descrittivi;
2. Metodi predittivi;
3. Metodi locali.
Nei prossimi paragrafi, li presentiamo brevemente.
Metodi descrittivi
Anche detti metodi non supervisionati (unsupervised) o indiretti, mira-
no 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 e pre-
sente il target. Tra i vari problemi affrontati con metodi descrittivi, noi ci
occuperemo principalmente del clustering.
19
Metodi predittivi
Anche detti metodi supervisionati (supervised) o diretti, hanno come
obiettivo trovare relazioni tra feature e target, al fine di identificare relazioni
di classificazione o predizione. Nel dataset utilizzato e sempre presente un
target. E il caso dei problemi di classificazione biclasse e multiclasse e della
regressione.
Metodi locali
Hanno come obiettivo identificare particolari caratteristiche e relazioni su
sottoinsiemi del dataset. Esempi sono le association rules, che abbiamo citato
indirettamente nel nostro esempio introduttivo nel paragrafo 1.1. Non solo:
come anticipato in precedenza, anche il problema della outlier detection puo
essere considerato un metodo locale e, come tale, potra poi essere sottoposto
ad attenta valutazione negli step successivi del DM Process.
1.3.5 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 obiettivi, non ci rimane che
dare inizio alle operazioni. In questa fase, potrebbero essere usati software
ad hoc, ma, piu in generale, ci si affida ad applicazioni gia sviluppate (e te-
state) disponibili in commercio o per il libero download. Daremo brevemente
un’occhiata a questi software nel paragrafo 1.4, concentrandoci in particolar
modo sul software che useremo: il freeware WEKA.
1.3.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 gia fatto in precedenza) dei coefficienti per la compara-
zione. 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 sbagliera meno. Per trovare questi (o altri) coeffi-
cienti, e affinche essi siano affidabili, e necessario, di norma, affidarsi a metodi
di tipo statistico: analizzeremo piu avanti in queste dispense alcune di queste
20
tecniche, come la Cross Validation. Tali tecniche ci devono permettere una
valutazione rapida, semplice e affidabile.
Spesso un coefficiente per la comparazione non e sufficiente, ma e neces-
sario considerare altri fattori quali vincoli temporali o di risorse, qualita e
stabilita del risultato ottenuto, e molto altro ancora.
1.3.7 Implementazione dell’algoritmo
Concludiamo questa carrellata sul DM Process con la fase di realizzazione
del modello: una volta scelto, esso dovra essere implementato a tutti gli effetti
per entrare in funzione (la gia citata fase feedforward) nel nostro business
aziendale. Anche in questo caso, ci si puo affidare ad eseguibili in commercio
o freeware. Data l’usuale semplicita di implementazione della fase in avanti di
molti algoritmi, si possono realizzare codici e programmi ad hoc, ottimizzati
e customizzati sulle esigenze aziendali e di analisi.
1.4 Il software che useremo: WEKA
Negli ultimi anni e cresciuto in modo esponenziale il numero di software
per BI che comprendono al loro interno suite per il DM: basti citare Oracle
e Microsoft SQL Server. Date le caratteristiche di prodotti commerciali a
prezzi tutt’altro che contenuti e data l’oggettiva difficolta di apprendimento
in strumenti piu professionali che divulgativi, si e deciso di utilizzare un
programma freeware chiamato Waikato Enviroment for Knowledge Analysis,
in breve WEKA. Esso e stato sviluppato in Nuova Zelanda presso l’Universita
di Waikato ed e scaricabile gratuitamente1. Al proprio interno, comprende
moltissime routine per training e fase in avanti di moltissimi algoritmi.
WEKA e realizzato in Java, pertanto necessita solo della Java Virtual
Machine (JVM) installata sulla propria macchina (e possibile scaricare la
JVM assieme a WEKA in un unico pacchetto dal sito neozelandese). Nel
caso di utilizzo su macchine Windows (qualsiasi versione, Vista incluso), e
possibile installare il programma, che viene compilato con opzioni di com-
pilazione standard. Su altri sistemi operativi (Mac piuttosto che Linux) e
obbligatorio (su Windows e solo opzionale) scaricare i sorgenti e compilarli
prima di eseguire WEKA. La riga di compilazione e la seguente:
1http://www.cs.waikato.ac.nz/ml/weka/
21
Figura 1.4: Interfaccia di base di WEKA.
java -jar weka.jar
e sara la JVM a occuparsi del resto. Ulteriori opzioni di compilazione sono
possibili per aumentare la dimensione dello stack o simili.
In Fig. 1.4 viene mostrata l’interfaccia di base di WEKA. Quattro opzioni
sono possibili:
• Simple CLI apre una finestra a riga di comando per qualsiasi tipo di
operazione e analisi sui dati. Essendo poco “user–friendly”, e facilmente
utilizzabile solo da utenti esperti e dopo un po’ di pratica;
• Explorer lancia una finestra GUI per ogni tipo di analisi e operazio-
ne sui dati. Explorer e decisamente piu intuitivo rispetto alla CLI,
quindi, almeno nei primi tempi, ci dedicheremo soprattutto a questa
applicazione;
• Experimenter permette di confrontare fra loro piu metodi di analisi,
comparandone le prestazioni. Il setup di Experimenter non e banale
e necessita di un po’ di esperienza, ma i risultati sono decisamente
interessanti;
22
• Knowledge Flow assomiglia all’ambiente Simulink di MATLAB e con-
sente di costruire confronti fra metodi (tipo Experimenter) ma sotto
forma di diagrammi a blocchi, quindi in modo piu intuitivo.
Si noti che WEKA non comprende direttamente al proprio interno un
software per la fase in avanti degli algoritmi: abbiamo anticipato nel para-
grafo 1.3.7 come spesso si preferiscano realizzazioni ad hoc, quindi gli autori
di WEKA si sono concentrati sui passi 1–6 del DM Process piuttosto che sul
7. Ciononostante, mostreremo come Explorer e KF possano essere utilizzati
anche per implementare la fase in avanti degli algoritmi.
Dedichiamo qualche cenno al formato dei file in input a WEKA. I dataset
possono essere passati al software in tre differenti modi:
• file ARFF (che analizzeremo a breve);
• indirizzo web (per database di tipo Java DB);
• file locale Java DB.
Premesso che probabilmente nel corso dell’insegnamento utilizzeremo
esclusivamente i file locali ARFF, analizziamone la struttura (puo essere utile
per scrivere eventuali convertitori da altri formati per dataset). Ogni riga
preceduta dal carattere jolly ‘%’ e considerata un commento, mentre sono
necessari i seguenti campi:
• un campo @relation, seguito dal nome del dataset;
• l’elenco degli attributi, uno per riga, aventi la seguente struttura:
– la parola chiave @attribute;
– il nome dell’attributo;
– il set di valori che la variabile puo assumere (per attributi di tipo
qualitativo o quantitativo discreto) o, in alternativa, il tipo di
feature (real o integer);
• la parola chiave @data, seguita nella linea successiva da tutti i pattern.
Ogni pattern e costituito dalle feature, divise dal carattere ‘,’. Un
missing e contraddistinto da ‘?’.
23
1.5 Organizzazione della dispensa
Questa dispensa e organizzata sulla base del flusso del Data Mining Pro-
cess, di cui analizzeremo (per motivi di tempo) solamente alcuni aspetti. In
particolare:
• nel Capitolo 2, affronteremo il problema dell’organizzazione dei dati,
delle trasformazioni applicabili ai pattern e dei tipi di variabili;
• nel Capitolo 3, approfondiremo alcuni concetti su parametri statistici
e caratteristiche del nostro dataset;
• nel Capitolo 4, invece, cominceremo ad analizzare alcuni algoritmi per
la classificazione di pattern;
• nel Capitolo 5 affronteremo il problema della regressione;
• il clustering sara, invece, l’argomento centrale del Capitolo 6;
• trovare le regole di associazione tra feature di un dataset e il problema
affrontato nel Capitolo 7;
• termineremo presentando alcuni metodi pratici per il confronto fra algo-
ritmi e introducendo l’utilizzo di WEKA Knowledge Flow nel Capitolo
8.
24
Capitolo 2
Organizzazione dei dati
In questo capitolo andiamo ad affrontare brevemente le problematiche
relative all’organizzazione dei dati. Dati per scontati concetti quali data
warehouse e data marts, partiamo dal presupposto di avere a disposizione
un dataset, composto da l pattern e m feature, come definito nel paragrafo
1.2. Al momento, non ci interessa se il dataset e dotato di target o meno.
Tralasciamo per il momento, inoltre, la selezione di un subset adatto: e un
problema decisamente complesso, che richiameremo solo in parte a tempo
debito, negli ultimi capitoli di queste dispense.
Per quanto riguarda le prime applicazioni usando WEKA, rimandia-
mo alla fine del prossimo capitolo, quando avremo terminato questa breve
carrellata sull’analisi e l’organizzazione dei dati.
2.1 Tipi di attributi
Le feature possono essere organizzate in due principali categorie, a loro
volta divise in due sottocategorie:
1. Variabili qualitative:
(a) nominali;
(b) ordinali;
2. Variabili quantitative:
(a) discrete;
25
(b) continue.
Nei prossimi paragrafi dettagliamo i tipi di attributi precedentemente
elencati.
2.1.1 Variabili qualitative
Le feature di tipo qualitativo sono di solito legate ad aggettivi riferiti ad
un particolare attributo e possono essere classificate in livelli, detti categorie.
Esempi sono il codice postale o il sesso di una persona.
Variabili qualitative nominali
Una variabile qualitativa e detta nominale se e organizzata su diverse
categorie, per le quali non e possibile definire un ordine preciso. In parti-
colare, e possibile definire rapporti di uguaglianza e disuguaglianza (= e �=)
tra diversi livelli. Esempio sono le codifiche per il sesso: e possibile definire
rapporti di uguaglianza (ad esempio, M = M), ma non un ordine fra sessi
(non si puo definire un rapporto M < F , ad esempio).
Variabili qualitative ordinali
Viceversa, sono dette ordinali le variabili qualitative per le quali e possi-
bile stabilire un ordine (operazioni <, >, =), ma senza la possibilita di quan-
tificare la differenza fra livelli. Un esempio e una classifica di una gara podi-
stica: se noi non indichiamo i distacchi, ma solo le posizioni finali, da esse si
puo stabilire l’ordine d’arrivo ma non quantificare la distanza fra un atleta e
l’altro.
2.1.2 Variabili quantitative
Le feature quantitative sono strettamente legate alle quantita numeriche
che le descrivono ed e possibile non solo stabilire un ordine (operazioni <, >
, =), ma anche quantificare la distanza (in senso generico) fra vari livelli. E
il caso dell’eta di una persona, ad esempio: e possibile non solo dire che una
persona di 20 anni e piu giovane di una di 45, ma anche che ci sono 25 anni
di differenza fra i due.
26
Variabili quantitative discrete
Una variabile quantitativa e discreta solo se puo assumere un numero
finito di valori. E il caso di segnali campionati, per esempio. Si distingue dalle
variabili qualitative nominali perche e possibile definire quantitativamente la
distanza fra i livelli.
Variabili quantitative continue
Una variabile quantitativa e continua se puo assumere un numero infinito
di valori. Per esempio, una temperatura registrata da un sensore ad alta
precisione puo essere considerata a tutti gli effetti una variabile quantitativa
continua. A tutti gli effetti, ricordiamo comunque che variabili continue su
un calcolatore non possono ne potranno mai esistere, sebbene 32 (o 64) bit
di precisione siano piu che sufficienti per approssimare ogni variabile discreta
come continua.
2.2 La matrice dei dati
Abbiamo anticipato nel paragrafo 1.2 la rappresentazione di una matrice
dati, notazione che ripetiamo per comodita:
{x1, ...., xl} , (2.1)
e rappresentante un dataset composto da l pattern (in questo caso, suppo-
niamo non sia presente target). Abbiamo inoltre stabilito che ogni pattern
xi ∈ �m, ovvero abbiamo m feature. Viene chiamata matrice dei dati (data
matrix ) la rappresentazione matriciale di tale dataset:
X =
⎡⎢⎢⎢⎢⎢⎢⎢⎣
x1,1 · · · x1,j · · · x1,m
......
......
...
xi,1 · · · xi,j · · · xi,m
......
......
...
xl,1 · · · xl,j · · · xl,m
⎤⎥⎥⎥⎥⎥⎥⎥⎦. (2.2)
Quindi, l’elemento ij–esimo xi,j rappresenta la j–esima feature dell’i–
esimo pattern della matrice. D’ora in poi, questa notazione verra utilizzata
27
implicitamente, anche quando non ci riferiremo espressamente alla matrice
dei dati X.
2.2.1 Gestione delle variabili
Come detto, i nostri dati possono essere rappresentati utilizzando una
matrice o, in alternativa, una rappresentazione ad insiemi. Le variabili xi,j
devono essere, quindi, quantita numeriche. Inoltre, in molti algoritmi la
distanza tra pattern svolge un ruolo centrale nella scelta del modello ottimo.
Se, di solito, non ci sono problemi per quanto riguarda le variabili quantitative
(in quanto rappresentate gia da valori numerici), possono sorgere difficolta
per le feature qualitative.
Siano attributi qualitativi nominali o ordinali, spesso essi vengono salvati
nel data warehouse (in generale) sotto forma “testuale”. La trasformazione
in variabili numeriche avviene attraverso la cosiddetta binarizzazione, ovve-
ro l’assegnazione di un codice binario per ognuno dei valori assunti dalla
feature. Supponiamo che una variabile sia di tipo qualitativo e possa assu-
mere r distinti livelli. Verranno create, quindi, r nuove variabili quantitative
binarie in codice one hot, ovvero la variabile binaria equivarra a 1 solo se
corrispondente all’originale livello della variabile qualitativa.
Un esempio dovrebbe chiarire il tutto. Supponiamo di considerare una
variabile qualitativa v che puo assumere 3 distinti livelli: a, b oppure c.
Codifichiamo i 3 livelli utilizzando un codice binario one hot, come quello
rappresentato in Tab. 2.1. Supponendo di avere una matrice di dati X
come in Eq. (2.3), caratterizzata da 5 pattern e 2 feature, attraverso la
binarizzazione otteniamo la matrice dei dati finale Xf di Eq. (2.4), avente
sempre 5 pattern, ma 4 attributi:
X =
⎡⎢⎢⎢⎢⎢⎢⎣1.1 a
3.5 b
1.4 b
9.0 c
3.1 a
⎤⎥⎥⎥⎥⎥⎥⎦ . (2.3)
28
Variabile qualitativa Codifica
v v′1 v′
2 v′3
a 1 0 0
b 0 1 0
c 0 0 1
Tabella 2.1: Esempio di codifica per variabile qualitativa.
Xf =
⎡⎢⎢⎢⎢⎢⎢⎣1.1 1 0 0
3.5 0 1 0
1.4 0 1 0
9.0 0 0 1
3.1 1 0 0
⎤⎥⎥⎥⎥⎥⎥⎦ . (2.4)
La binarizzazione e estremamente utile in molti casi, ma comporta un
aumento del numero di feature: abbiamo gia discusso nel paragrafo 1.3.3
che questa non e sempre una scelta ottimale. Un analisi preliminare serve
anche per cercare una codifica efficace e/o per eliminare, ove consentito, il
salvataggio di variabili di tipo qualitativo in memoria (agendo sulla sorgente
di osservazioni).
2.3 Normalizzazione di un dataset
La normalizzazione di valori e una delle operazioni che piu di frequente
vengono effettuate su un dataset per svariati motivi. Numerici, innanzitutto,
in quanto eventuali valori nell’ordine di 103 o superiori possono portare a
problemi di overflow (e viceversa, ovvero valori sotto 10−3 possono portare
all’underflow).
Esistono diverse tecniche per la normalizzazione: le piu comuni prevedo-
no di riportare i dati della nostra matrice X all’interno dell’intervallo [0, 1]
o [−1, 1]. Dovrebbe ora risultare piu chiaro come mai si sia tanto insistito
su data cleansing e analisi dei dati nel capitolo 1. Supponiamo di avere una
matrice di dati
29
X =
⎡⎢⎢⎢⎢⎢⎢⎣1.1 4.1
3.5 6.5
1.4 108
9.0 1.9
3.1 5.0
⎤⎥⎥⎥⎥⎥⎥⎦ : (2.5)
con ogni probabilita, x3,2 = 108 rappresenta un errore di misura. Se non ce
ne accorgessimo, potremmo semplicemente normalizzare la nostra matrice fra
[0, 1] e ottenere una matrice con elementi < 10−7, ad eccezione di x′3,2 = 1.
30
Capitolo 3
Analisi esplorativa dei dati
In questo capitolo, affronteremo brevemente il problema dell’analisi esplo-
rativa dei dati, presentando alcuni indici statistici. Questo capitolo poten-
zialmente potrebbe coprire un intero insegnamento, quindi ci limiteremo a
qualche nozione di base, anche in relazione agli strumenti operativi forniti da
WEKA. Per maggiori dettagli, gli interessati possono fare riferimento a [10].
3.1 Distribuzioni di frequenza
3.1.1 Distribuzioni univariate
A volte e utile analizzare le distribuzioni dei valori che puo assumere una
variabile di tipo qualitativo, oppure quantitativa discreta. Questo tipo di
analisi puo essere estesa anche alle variabili quantitative continue, cercan-
do gli intervalli ottimi in cui dividere i valori assunti dalle feature (ce ne
occuperemo brevemente quando parleremo di alberi di decisione).
Supponiamo di considerare una variabile v e che essa possa assumere
un numero finito k di livelli, ovvero v = {v∗1, ..., v
∗k}. Si definisce frequenza
assoluta il numero di occorrenze ni di un livello in un dataset. Ad esempio,
Tab. 3.1 riporta le distribuzioni assolute per la seconda feature della matrice
X dell’Eq. (2.3).
Si definisce frequenza relativa la frequenza assoluta normalizzata per il
numero totale di pattern, ovvero:
pi =ni
l. (3.1)
31
Livello Frequenza
na 2
nb 2
nc 1
Tabella 3.1: Esempio di frequenza assoluta per una feature qualitativa.
Livello Frequenza
pa 0.4
pb 0.4
pc 0.2
Tabella 3.2: Esempio di frequenza relativa per una feature qualitativa.
Tab. 3.2 riporta le frequenze relative per il dataset X. Proprieta banali sono
che∑
i ni = l e∑
i pi = 1.
3.1.2 Distribuzioni bivariate e multivariate
Nel precedente paragrafo abbiamo considerato sempre solo una variabile
per volta; ora, invece, siamo interessati ad una statistica “incrociata” delle
variabili. Inoltre, sarebbe possibile estendere il ragionamento a piu feature,
ma per brevita ci limiteremo a descrivere le distribuzioni bivariate.
Analogamente a quanto visto nel paragrafo precedente, supponendo di
avere due variabili qualitative v e z, che possono assumere, rispettivamente,
k e h livelli, si definisce frequenza assoluta congiunta nvz(v∗i , z
∗j ) il numero
di osservazioni in cui, contemporaneamente, la variabile v assume livello v∗i
e la feature z vale z∗j . Si definisce frequenza relativa congiunta pvz(v∗i , z
∗j ) la
frequenza assoluta congiunta, normalizzata per il numero totale di pattern l.
E possibile, inoltre, trovare una matrice, detta matrice di contingenza
C ∈ �k×h, che comprende al proprio interno tutti i valori di frequenze assolute
congiunte. In pratica, l’elemento ij–esimo Cij equivale alla frequenza assoluta
congiunta nvz(v∗i , z
∗j ).
32
3.2 Analisi esplorativa univariata
Abbiamo visto nel precedente paragrafo come si possano analizzare le
frequenze univariate o bivariate per le occorrenze di variabili qualitative (con
eventuale estensione al caso di feature quantitative). Ora ci occupiamo di
estrarre una descrizione di massima del nostro dataset, sulla base di indici
di posizione, varibilita ed eterogeneita. Prima, pero, un breve richiamo sulle
caratteristiche degli stimatori (in poche parole, gli indici che andremo a breve
a presentare), utili per capire alcuni concetti dei prossimi paragrafi.
3.2.1 Richiami su stimatori e loro caratteristiche
Supponiamo di considerare un generico parametro da stimare α e con-
sideriamo un suo stimatore α. A titolo di esempio, si potrebbe considerare
come parametro da stimare l’eta media di tutta la popolazione mondiale e
come stima l’eta media di un campione di N persone. Esistono due quantita
che definiscono la qualita di uno stimatore e sono:
1. la polarizzazione o bias;
2. la stabilita.
Se uno stimatore e non polarizzato (unbiased) e stabile viene detto consi-
stente. Tutti gli stimatori che presenteremo nei prossimi paragrafi sono consi-
stenti, ad eccezione di uno (la stima della varianza), per il quale presenteremo
la variante biased e consistente.
Bias di uno stimatore
Viene definito bias di uno stimatore la quantita:
b = α − E {α |α} , (3.2)
dove
E {α |α} =
∫ +∞
−∞· · ·∫ +∞
−∞α p (x1, ..., xN |α) dx1 · · · dxN (3.3)
e il valor medio condizionale della stima. Uno stimatore e detto unbiased se
vale
33
limN→+∞
b = 0, (3.4)
ovvero se, al crescere all’infinito del numero di osservazioni, il valore vero del
parametro e la sua stima tendono a coincidere asintoticamente.
Stabilita di uno stimatore
La stabilita di uno stimatore viene calcolata utilizzando la varianza esatta
dello stimatore (riparleremo nei prossimi paragrafi di varianza, ma in quel
caso faremo riferimento allo stimatore della varianza):
σ2α = E
{α2 |α}− E {α |α}2 . (3.5)
Al crescere del numero di osservazioni, ci aspettiamo che il nostro valore
stimato si avvicini in media sempre piu al valore da stimare (bias nullo), ma
anche che tale valore medio sia stabile rispetto alle oscillazioni del parametro
reale (varianza nulla). Pertanto, la seconda condizione che poniamo per la
consistenza di uno stimatore e che
limN→+∞
σ2α = 0. (3.6)
3.2.2 Indici di posizione
Il piu comune indice di posizione e la media aritmetica, definita su un set
di N osservazioni come:
x =
∑Ni=1 xi
N(3.7)
ed e calcolabile solo nel caso di variabili quantitative. Ovviamente, la media
da se ha poco significato, in quanto puo fortemente risentire di possibili valori
fuori scala. Vedremo come essa vada integrata nell’analisi da altri indici.
Solo nel caso di variabili quantitative discrete (che possono assumere un
numero finito k di valori), avendo a disposizione le distribuzioni di frequenza,
in particolare le frequenze relative pi di cui al paragrafo 3.1.1, la media puo
anche essere calcolata come:
x =
k∑i=1
pix∗i , (3.8)
34
dove x∗i rappresentano i k livelli che la variabile puo assumere.
Un secondo importante indice di posizione e la moda: essa puo essere
calcolata sia per variabili qualitative che quantitative (nel caso di variabili
continue, si rende necessaria un’apposita discretizzazione) e corrisponde al
valore (o all’intervallo) della variabile caratterizzata dalla piu alta frequenza
assoluta.
Un terzo indice e la mediana: in una sequenza ordinata di dati, la me-
diana e il punto per il quale meta dati sono maggiori di esso e meta sono
piu piccoli. In altre parole, la mediana e il punto per il quale la probabilita
che un valore caschi alla sinistra di esso o alla destra di esso e pari al 50%.
Necessitando di un ordine fra dati, le operazioni <, >, = devono poter esse-
re definite: pertanto, la mediana e calcolabile per le variabili quantitative e
qualitative ordinali.
3.2.3 Indici di variabilita
Altro indice importante e la variabilita, ovvero la dispersione di una
distribuzione. Esistono diverse tecniche per valutare la variabilita, ma tutte
sono solamente applicabili alle variabili quantitative: e necessario, infatti,
non solo essere in grado di definire un ordine tra i valori, ma anche poterne
definire una misura di distanza.
La prima consiste nel considerare il valore minimo e massimo che l’at-
tributo puo assumere: e una tecnica piuttosto elementare, ma che risente
enormemente della presenza di eventuali outliers non identificati. Viene,
quindi, poco usata.
La seconda tecnica consiste nel calcolare la varianza: attenzione, nel
paragrafo 3.2.1 abbiamo parlato di varianza di uno stimatore, qui stiamo
parlando di stima della varianza, ovvero cercare di valutare la varianza della
popolazione utilizzando un campione limitato. La varianza viene calcolata
come:
σ2 =1
N
∑(xi − x)2, (3.9)
dove x e la media. Spesso, dato che l’Eq. (3.9) rappresenta uno stimatore
della varianza della popolazione, si utilizza s2 invece di σ2.
Sfortunatamente, si puo facilmente dimostrare che lo stimatore di Eq.
(3.9) e biased. Uno stimatore unbiased e invece il seguente:
35
σ2 =1
N − 1
∑(xi − x)2. (3.10)
In alternativa alla varianza, si puo utilizzare la deviazione standard σ,
che e semplicemente la radice quadrata della varianza.
Altro indice e rappresentato dal coefficiente di variazione (CV ), calcola-
bile quando la media non e nulla:
CV =σ
|x| . (3.11)
In alternativa agli indici di variabilita fin qui presentati, e talvolta uti-
lizzata l’analisi dei quartili : un quartile e ognuno dei tre punti che divide
un dataset in aree al 25% di probabilita. In particolare, il secondo quartile
equivale alla mediana. I tre quartili vengono definiti come Qi, con i = 1, 2, 3.
Un indice di variabilita e dato dall’Inter–Quartile Range (IQR):
IQR = Q3 − Q1, (3.12)
cioe dalla differenza fra il valore del terzo e del primo quartile. E inoltre
possibile calcolare gli upper bound e lower bound del nostro dataset, definiti
come T1 e T2:
T1 = max(minimo valore osservato, Q1 − 1.5 · IQR) (3.13)
T2 = min(massimo valore osservato, Q3 + 1.5 · IQR). (3.14)
A partire dai quartili e dai bound, e possibile tracciare i cosiddetti box-
plot, che identificano graficamente le quantita descritte in precedenza. Fig.
3.1 mostra un esempio di boxplot, in cui vengono anche segnalati eventuali
outliers, calcolati semplicemente (ma, spesso, efficacemente) come tutti quei
valori assunti dalla nostra variabile piu piccoli (piu grandi) di T1 (T2).
3.2.4 Indici di eterogeneita
Gli indici fin qui analizzati sono utili quasi esclusivamente in caso di
variabili quantitative. Comunque, risulta utile, in molti casi, avere anche
misure in grado di descrivere feature di tipo qualitativo, siano esse nominali
o ordinali. L’indice piu comune per gli attributi qualitativi e l’eterogeneita.
36
Figura 3.1: Esempio di boxplot.
Consideriamo una variabile qualitativa x, che puo assumere k distinti
livelli. Supponiamo di aver calcolato le frequenze relative pi per ogni livello,
come mostrato nel paragrafo 3.1.1. Una definizione generale di eterogeneita
puo essere la seguente:
• si ha eterogeneita minima (si parla anche, in questo caso, di omoge-
neita) quando non abbiamo variazioni nei livelli delle feature, ovvero
una certa pi = 1 e vale pj = 0, ∀j �= i;
• viceversa, si ha eterogeneita massima quando le osservazioni si distri-
buiscono uniformemente su tutti i livelli, ovvero pi = 1/k, ∀i.
Esistono due indici molto comuni di eterogeneita. Il primo e il cosiddetto
Gini index :
G = 1 −k∑
i=1
p2i , (3.15)
per il quale e facile mostrare come, se siamo in condizioni di omogeneita, si
ha G = 0, mentre in condizioni di massima eterogeneita si ha G = 1 − 1k.
Dato che spesso puo essere utile normalizzare i valori degli indici affinche
siano compresi in [0, 1], si puo definire il Gini index normalizzato:
G′ =G
(k − 1)/k. (3.16)
Altro indice piuttosto comune e l’entropia, definita come:
E = −k∑
i=1
pi log pi, (3.17)
37
che vale 0 in caso di omogeneita e log k in caso di massima eterogeneita. An-
che in questo caso, e possibile definire l’entropia normalizzata nell’intervallo
[0, 1]:
E ′ =E
log k. (3.18)
3.3 Analisi esplorativa bivariata e multivaria-
ta
Analogamente a quanto visto in precedenza per le distribuzioni di fre-
quenza, e ovviamente possibile effettuare analisi incrociate sulle caratteri-
stiche dei nostri dati anche dal punto di vista del calcolo di indici. Dato
che questo tipo di analisi e tutt’altro che banale, ne daremo solo alcuni brevi
cenni, rimandando poi gli interessati ad ulteriori approfondimenti su appositi
testi.
Per quanto riguarda l’analisi bivariata, normalmente un buon metodo
per trovare eventuali relazioni fra feature consiste nell’utilizzare l’approccio
grafico. A tal proposito, molto utilizzato e lo strumento della scatterplot
matrix, in cui gli attributi vengono messi in relazione a coppie. Ogni cella
della matrice e detta scatterplot diagram. Un esempio di scatterplot matrix
e riportato in Fig. 3.2.
Analogamente a quanto visto nel precedente paragrafo, sarebbe possibile
definire moltissimi indici anche per l’analisi bivariata: per brevita citiamo,
in questa sede, solo l’indice di concordanza, ovvero la tendenza ad osservare
alti (bassi) valori di un attributo in accordo con alti (bassi) valori di un’altra
feature. In questo senso, la misura piu utilizzata e la covarianza, definita
come:
Cov(x, y) =1
N
N∑i=1
(xi − x) (yi − y) . (3.19)
E immediato notare che Cov(x, x) = σ2. Ovviamente, analogamente a quan-
to visto nel paragrafo 3.1.2, e possibile costruire una matrice di varianza–
covarianza, simile alla matrice di contingenza. In alternativa alla covarianza,
e possibile utilizzare la correlazione (lineare):
38
Figura 3.2: Esempio di scatterplot matrix.
r(x, y) =Cov(x, y)
σxσy
, (3.20)
dove σx e σy rappresentano le deviazioni standard delle due variabili. La
correlazione lineare ha le seguenti proprieta:
• r(x, y) = 1 quando tutti i punti nello scatterplot diagram sono posi-
zionati su una retta a pendenza positiva, e r(x, y) = −1 quando la
pendenza e negativa. Proprio per questa relazione di tipo lineare, r
viene chiamata correlazione lineare;
39
Feature Descrizione Tipo
outlook Condizioni del meteo Qualitativa nominale
temperature Temperatura atmosferica Quantitativa continua
humidity Umidita atmosferica Quantitativa continua
windy Situazione del vento Qualitativa nominale
play (Target) Giocare o meno a golf Qualitativa nominale
Tabella 3.3: Il dataset weather.
• se r(x, y) = 0, le due variabili non sono assolutamente legate da alcuna
relazione lineare, e si dicono scorrelate;
• in generale, −1 ≤ r(x, y) ≤ 1.
Si potrebbero ora approfondire le analisi di tipo multivariato, ma risul-
tano piuttosto complesse, in quanto e forte in questi casi la distinzione fra i
vari tipi di attributo. Quindi, rimandiamo gli interessati ad approfondimenti
su appositi testi.
3.4 Esempi di analisi con WEKA
Analizziamo un dataset piuttosto elementare utilizzando WEKA. In par-
ticolare, analizziamo in questo paragrafo il dataset chiamato weather, e ri-
ferito ad una collezione di osservazioni riferite al meteo (sereno, nuvoloso o
piovoso), temperatura, umidita e situazione del vento (presente o assente).
La classe e costituita da una variabile binaria riferita alla possibilita o meno
di giocare a golf, sulla base delle condizioni climatiche. Le feature e il target
di questo dataset sono ricapitolati in Tab. 3.3.
Lanciamo quindi WEKA ed avviamo l’explorer. Sull’interfaccia, clic-
chiamo su “Open file...” e selezioniamo, dalla cartella “Data”, il file “wea-
ther.arff”. Dovrebbe apparire una finestra simile a quanto mostrato in Fig.
3.3. Interpretiamo un po’ tutte le informazioni che ci vengono fornite.
In alto troviamo una serie di tasti, i primi per caricare dataset, men-
tre gli ultimi due servono per editare (sfruttando una GUI) e salvare il no-
stro dataset (per esempio, per verificare eventuali missing, completare i dati,
correggere valori palesemente sbagliati e via dicendo).
40
Figura 3.3: Esempio dell’interfaccia explorer di WEKA.
Scendendo, troviamo la possibilita di scegliere dei filtri da appicare ai
dati. Cliccando sul pulsante di scelta, si apre una box ricca di filtri, sia
supervisionati (tengono conto del target) che non supervisionati (viceversa).
A loro volta, i metodi sono divisi in metodi che agiscono sugli attributi o
sulle singole istanze. Lasciando poi alla vostra curiosita maggiori dettagli
su molti di questi filtri, da usare sempre e comunque con un obiettivo ben
fissato, supponiamo di scegliere fra gli unsupervised che agiscono sulle singole
osservazioni (istances) il Randomize, e vediamo di cosa si occupa. Una volta
scelto, clicchiamo sul nome del filtro e si apre una finestra come quella di
Fig. 3.4: ci viene fornita una breve spiegazione del filtro (semplicemente,
randomizza l’ordine dei pattern all’interno del dataset, azione utile quando
vengono usate tecniche per la stima delle performance di un metodo nei
casi di dataset ordinati rispetto al target), con la possibilita di saperne di
piu (pulsante “More”); quindi, ci vengono proposte le possibili opzioni. In
questo caso, possiamo solo modificare il seed dell’algoritmo di random.
Altro filtro molto usato e la normalizzazione (normalize), che troviamo
tra gli unsupervised sia per attributi che per singole istanze. La differenza
sta nel fatto che il primo normalizza tutta la matrice dati nell’intervallo [0, 1],
mentre il secondo normalizza ogni singolo pattern affinche la sua norma p sia
41
Figura 3.4: Esempio di box con dettagli per un filtro.
uguale ad un certo valore:
‖xi‖p = s, ∀i = 1, .., n, (3.21)
dove p e il valore desiderato s sono assegnati dall’utente.
Torniamo a WEKA explorer. Ci vengono fornite, di seguito, alcune infor-
mazioni sul dataset: nome, numero di pattern e di attributi (target incluso).
Seguono l’elenco degli attributi e la possibilita di rimuoverne uno o piu dal-
l’elenco. A destra, troviamo, per l’attributo evidenziato, le caratteristiche di
distribuzione di frequenza o di indici statistici a seconda che si tratti, rispet-
tivamente, di una feature qualitativa o quantitativa. Piu in basso, troviamo
la possibilita di scegliere un attributo come classe e, a seguire, l’istogramma
rappresentativo delle distribuzioni viene rappresentato, utilizzando piu colori
per rappresentare i pattern afferenti alle diverse classi. Nel caso di variabili
continue, il range viene suddiviso in un numero adeguato di intervalli.
Agendo su queste opzioni grafiche e sui filtri, un’analisi esplorativa di base
dei dati puo essere facilmente eseguita. Non solo: agendo sul tab “Visualize”
in alto, viene mostrata la scatterplot matrix, con la possibilita di visualizzare
i singoli scatterplot diagram cliccando sulle celle della matrice: un esempio
e mostrato in Fig. 3.5.
42
Figura 3.5: Esempio di scatterplot matrix e scatterplot diagram.
3.5 Riduzione di dimensionalita
Abbiamo gia parlato in fase di introduzione di riduzione di dimensionalita
e dei possibili pro e contro di questo approccio. Premettendo che esistono mi-
gliaia di tecniche per selezionare un subset di variabili, noi ci concentreremo
su uno dei piu utilizzati: la Principal Component Analysis (PCA) [13, 17].
Vedremo piu avanti che non sempre la PCA rappresenta la soluzione ottima
per la feature selection, ma essa rimane una delle tecniche piu diffuse.
La PCA consta di alcuni passaggi:
1. calcolo della matrice di covarianza, che definiamo C ∈ �m×m, dove m
e il numero di feature;
2. calcolo degli autovettori e autovalori di C e diagonalizzazione di C. Vie-
ne trovata una matrice diagonale D ∈ �m×m, i cui elementi di,i = λi,
ovvero sulla diagonale troviamo gli autovalori precedentemente calco-
lati;
3. gli autovalori e i corrispondenti autovettori vengono ordinati in maniera
decrescente;
43
4. viene calcolata l’energia cumulativa totale di tutti gli autovettori come
g =m∑
i=1
di,i; (3.22)
5. viene stabilita una soglia percentuale gth sull’energia cumulativa totale
g;
6. vengono mantenuti solo gli mPCA autovettori e autovalori che permet-
tono di ottenere un’energia cumulativa parziale gp ≥ gth.
Tutto cio cosa significa? La parte piu difficile di tutta la PCA e esat-
tamente questa: interpretare i risultati. In pratica, il calcolo degli autovet-
tori implica che noi andiamo ad effettuare nient’altro che una combinazione
lineare delle nostre feature, ottenendo mPCA nuove feature. L’operazione
di sogliatura significa, semplicemente, tagliare quelle componenti che meno
influiscono sulla descrizione dello spazio degli ingressi.
Ovviamente, se il nostro scopo e, in aggiunta alla riduzione della dimen-
sionalita, mantenere anche l’interpretabilita degli attributi, la PCA non e
di certo la via piu adatta da seguire. Ciononostante, e possibile effettua-
re, sfruttando le proprieta della cosiddetta Singular Value Decomposition
(SVD), la trasformazione inversa nell’ambito dello spazio originale degli at-
tributi: il problema, in questo caso, e che non possiamo permetterci di esclu-
dere alcun autovettore, quindi non effettuiamo di fatto alcuna riduzione di
dimensionalita!
3.6 Esempi di riduzione di dimensionalita u-
tilizzando WEKA
Proviamo ora ad applicare la PCA in WEKA. Prima di tutto, lanciato
explorer e caricato il dataset weather, spostiamoci sul tab “Select attributes”
e selezioniamo dal menu la PCA (“PrincipalComponents”). Lasciamo intatte
le opzioni di default, utilizziamo il ranker di WEKA (classifica le variabili
usando indici basati sull’entropia) e forziamo WEKA a usare tutto il training
set (lasciamo per ora perdere la Cross Validation, di cui parleremo piu avanti
in queste dispense). Selezionata la classe (“play”), lanciamo l’esecuzione
della PCA.
44
L’output di WEKA conterra, in ordine: un riepilogo del dataset e dei me-
todi selezionati; la matrice di correlazione (usata in alternativa alla matrice
di covarianza); gli autovalori, la porzione di energia corrispondente, l’energia
cumulativa totale fino a quell’autovalore e il corrispondente autovettore; la
matrice degli autovettori; il ranking delle variabili (in questo caso, le combi-
nazioni lineari calcolate con la PCA), ordinate dal ranker di WEKA. Notiamo
che, avendo una variabile nominale qualitativa (il meteo) che puo assumere
3 possibili livelli, WEKA effettua la binarizzazione; la situazione del vento e
anch’essa qualitativa, ma binaria e non necessita di ulteriore binarizzazione.
Alla fine, abbiamo 6 attributi da considerare. Notiamo che compaiono solo 5
autovalori, il che equivale a dire che il sesto autovalore e nullo; questo fatto
e confermato anche dall’energia cumulativa, che raggiunge il 100% con solo i
primi 5 autovalori.
Passiamo ora a capire meglio le opzioni della PCA. Possiamo settare:
• il massimo numero di attributi che vogliamo visualizzare nella combi-
nazione lineare (per semplicita di lettura);
• se vogliamo normalizzare i dati fra [0, 1], qualora non l’avessimo gia
fatto;
• un flag per trasformare nuovamente le feature della PCA nello spazio
originario attraverso SVD;
• la percentuale di energia cumulativa che vogliamo garantire.
Analizzando il ranking ottenuto in precedenza:
Ranked attributes:
0.675990846445273472 1 0.578temperature...
0.411301353536642624 2 -0.68outlook=overcast...
0.195956514975330624 3 0.567outlook=sunny...
0.063841150150769192 4 0.738windy...
0.000000000000000111 5 0.748temperature...
notiamo che la quinta componente della PCA ha un ranking davvero basso, e
stesso dicasi per la quarta. Potrebbe essere, quindi, una buona idea abbassare
la soglia per l’energia cumulativa: portiamolo al 90%, ad esempio, valore
piuttosto tipico. Prima di lanciare la simulazione, diamo un’occhiata anche
alle opzioni del ranker:
45
• possiamo scegliere se fare effettuare il ranking o no;
• possiamo settare il numero massimo di feature da mantenere;
• possiamo selezionare un subset iniziale di attributi;
• possiamo stabilire una soglia per il valore dell’entropia sotto la quale
la variabile viene esclusa dal dataset.
Lasciamo le impostazioni di default, e lanciamo la PCA. Come previsto,
otteniamo solo 4 componenti. Possiamo continuare a fare analisi di questo
tipo, ma adesso vogliamo effettuare una verifica: la sesta componente e dav-
vero nulla? Settiamo la soglia di energia al 100%, ovvero includiamo tutto.
In effetti, il sesto autovettore e nullo:
eigenvalue proportion cumulative
1.94405 0.32401 0.32401 0.578temperature...
1.58814 0.26469 0.5887 -0.68outlook=overcast...
1.29207 0.21534 0.80404 0.567outlook=sunny...
0.79269 0.13212 0.93616 0.738windy...
0.38305 0.06384 1 0.748temperature...
0 0 1 -0.588outlook=rainy...
ma possiamo notare che, curiosamente, dal punto di vista entropico ha la
stessa importanza del quinto autovettore:
Ranked attributes:
0.675990846445273472 1 0.578temperature...
0.411301353536642624 2 -0.68outlook=overcast...
0.195956514975330624 3 0.567outlook=sunny...
0.063841150150769192 4 0.738windy...
0.000000000000000111 6 -0.588outlook=rainy...
0.000000000000000111 5 0.748temperature...
L’ultima prova che vogliamo effettuare riguarda la possibilita di effet-
tuare il mapping inverso attraverso SVD nello spazio originale. Settiamo le
apposite opzioni e lanciamo la SVD. L’output e il seguente:
46
PC space transformed back to original space.
(Note: can’t evaluate attributes in the original space)
Ranked attributes:
1 3 outlook=rainy
1 1 outlook=sunny
1 2 outlook=overcast
1 6 windy
1 4 temperature
1 5 humidity
La nota, sebbene sembri allarmante, in verita fornisce un’informazione
alquanto intuitiva: la PCA non puo ottenere esattamente lo spazio di par-
tenza, semplicemente perche abbiamo binarizzato la matrice (per quanto la
matrice non binarizzata potrebbe essere facilmente ricavata). In questo ca-
so, non possiamo tagliare alcun autovalore ne autovettore, quindi l’eventuale
riduzione di dimensionalita e affidata per intero al ranker (che, in questo ca-
so, non riesce a fare molto, essendo anche il dataset usato molto semplice e
piccolo).
47
Capitolo 4
Classificazione
Addentriamoci ora nel problema della classificazione di pattern. In que-
sto capitolo supporremo di utilizzare sempre un dataset X, per il quale un
attributo e utilizzato come target. Ad ogni valore del target corrisponde una
classe. Tornando all’esempio weather considerato nei paragrafi 3.4 e 3.6, il
target e la variabile play, ovvero la decisione di giocare a golf o meno.
I problemi di classificazione si possono dividere in due sottocategorie,
come gia avevamo visto nel paragrafo 1.2:
• si parla di classificazione binaria quando il target puo assumere sola-
mente due valori. Un esempio e il gia citato weather : le due classi
corrispondono alla decisione di giocare o no a golf. Normalmente, i
target sono del tipo yi ∈ {0, 1} oppure yi ∈ {−1, 1};
• si parla di classificazione multiclasse quando il target puo assumere
un numero finito di valori interi numerici, ovvero yi ∈ S ⊂ ℵ, dove ℵrappresenta l’insieme dei numeri naturali non negativi. Un esempio e il
dataset iris, sempre incluso tra gli esempi di WEKA, in cui tre tipi di
fiore vengono distinti sulla base delle caratteristiche di petalo e sepalo:
in questo caso, yi ∈ {1, 2, 3}, dove ogni classe corrisponde ad un preciso
fiore.
Alcuni algoritmi nascono nell’ottica della classificazione binaria: inizie-
remo con l’analisi per questo problema e mostreremo, quindi, le tecniche per
la generalizzazione al problema multiclasse.
48
4.1 Zero Rules
4.1.1 Apprendimento
Il classificatore Zero Rules (0–R) e davvero elementare: la classe viene
scelta sulla base della moda. Cio significa che assegneremo ogni pattern a
run–time alla classe piu ricorrente del nostro training set (in caso di parita, la
scelta avviene una volta per tutte randomicamente). Ovviamente, non e un
metodo particolarmente furbo ne utile, e spesso viene utilizzato nella pratica
solo per trovare le frequenze relative e assolute delle varie classi.
Supponendo di avere a disposizione un dataset X con 15 pattern e 3
classi, e ipotizzando di avere 7 pattern afferenti alla classe 2 e 4 pattern
ciascuno per le classi 1 e 3, sceglieremo la classe 2 in quanto moda del nostro
dataset.
4.1.2 Fase in avanti
La fase feedforward a run–time di 0–R consistera semplicemente nell’as-
segnare la classe piu frequente del training set ad ogni nuovo pattern che
arrivi in ingresso al nostro sistema.
4.1.3 Estensione al caso multiclasse
L’algoritmo Zero Rules si adatta gia nella sua forma originaria a problemi
binari e multiclasse.
4.1.4 Esempio di analisi in WEKA
Torniamo a considerare il dataset weather. Lanciamo explorer di WEKA
e carichiamo il dataset. Ora, spostiamoci sul tab “Classify” in alto e selezio-
niamo come metodo di classificazione “ZeroR” nella sottocategoria “Rules”.
Aprendo la finestra delle opzioni, notiamo subito che l’unica opzione a dispo-
sizione si riferisce ad eventuali output di debug: settiamo a true. Tornando
ad explorer, nell’area “Test options” settiamo l’uso dell’intero training set
(le altre opzioni verranno presentate piu avanti). Clicchiamo poi su “More
options” e abilitiamo “Output predictions”. Scelta la classe (play, nel nostro
caso), lanciamo l’analisi.
A parte un po’ di output di riepilogo, ci viene precisato che:
49
ZeroR predicts class value: yes
essendo yes la classe piu ricorrente del nostro dataset. Passando ai risultati
successivi, analizziamo le voci che ci vengono fornite.
Predictions on training set
Viene presentato un riepilogo del comportamento del nostro classificatore
sul training set. Abbiamo a disposizione le seguenti voci:
• numero del pattern;
• valore reale della classe;
• valore ottenuto dal classificatore;
• un flag di errore corrispondente ai pattern per i quali sbagliamo la
previsione;
• la probabilita di indovinare la previsione. Tale calcolo coinvogle il pat-
tern, il training set ed il particolare classificatore che usiamo. Il valore
piu alto fra quelli a disposizione e contraddistinto da ‘*’.
(In)Correctly Classified Instances
Equivale al numero di classificazioni corrette o errate. A seguire, tro-
viamo le percentuali relative al numero totale di pattern: nel nostro caso,
sbagliamo circa nel 36% dei casi.
Kappa statistic
La statistica Kappa [7] (anche nota come Kappa di Cohen o semplicemen-
te Kappa) e basato su considerazioni statistiche e sull’uso di cosiddetti rater,
cioe valutatori. Rappresenta un metodo abbastanza rapido per valutare la
robustezza di un algoritmo. L’indice K viene calcolato come
K =P (A) − P (E)
1 − P (E), (4.1)
dove P (A) rappresenta l’accuratezza, ovvero la percentuale che il nostro pre-
dittore azzecchi, e P (E) e la probabilita che il classificatore indovini per pura
coincidenza:
50
P (E) =nc∑i=1
pi · qi, (4.2)
dove nc rappresenta il numero di classi, pi e la frequenza relativa di ogni classe
nel training set e qi e la frequenza relativa dell’output del nostro classificatore.
Vale K ∈ (−∞, 1]:
• K < 0 e indice di un classificatore che sbaglia volutamente;
• K = 0 rappresenta un classificatore che, quando indovina, lo fa per
puro caso;
• K = 1 e indice di massima robustezza del predittore.
Nel caso in esame, il nostro classificatore 0–R e caratterizzato da Kappa
nulla, il che mostra la scarsa affidabilita di 0–R. Controlliamo il risultato. Le
quantita che caratterizzano il nostro 0–R sono:
• P (A) ≈ 64.29% e l’accuratezza;
• p1 ≈ 64.29%, p2 ≈ 35.71%, q1 = 100% e q2 = 0%. Pertanto, P (E) ≈64.29%.
Ne risulta, appunto, K = 0.
Mean absolute error
Rappresenta l’errore medio assoluto (MAE), quantita che nei problemi
di classificazione ha poca importanza. Comunque sia, esso e definito in que-
sto caso come la distanza media tra la probabilita di classificazione corretta
e il target originario del dataset. In pratica, fornisce una misura comples-
siva del comportamento del classificatore relativa al particolare dataset che
utilizziamo.
Il MAE ha, invece, enorme importanza nei problemi di regressione, che
affronteremo a breve, in quanto in quei casi rappresenta la differenza media
tra l’output del nostro sistema e quello originario del dataset.
51
Root mean squared error
Per l’errore quadratico medio (RMSE) valgono molte delle considerazioni
fatte in precedenza per il MAE: infatti, il RMSE e calcolato (sia per regres-
sione che per classificazione) come il MAE, tranne che ogni volta calcoliamo
il quadrato della differenza fra output (o probabilita) e valore originario.
Relative absolute error e Root relative squared error
Queste misure sono ottenute come rapporto, rispettivamente, fra MAE e
RMSE e i valori ottenuti col worst case, ovvero con un classificatore 0–R. Dato
che in questo caso usiamo un classificatore 0–R, non abbiamo miglioramenti
e l’errore relativo e pari al 100%.
Detailed Accuracy By Class e Confusion Matrix
Analizziamo ora i dati relativi alla tabella di accuratezza della previsione.
Otteniamo un output di questo tipo:
TP Rate FP Rate Precision Recall F-Measure Class
1 1 0.643 1 0.783 yes
0 0 0 0 0 no
Prima di addentrarci nella spiegazione dei termini riportati, consideriamo
la matrice di confusione:
a b <-- classified as
9 0 | a = yes
5 0 | b = no
La matrice di confusione (CM) va analizzata nel seguente modo: nelle
colonne, troviamo le classificazioni ottenute col metodo selezionato; nelle
righe, il numero di dati afferenti alle due classi nel training set. Spieghiamoci
meglio: nel nostro caso, abbiamo 9 dati, originalmente appartenenti alla
classe “yes”, che sono stati classificati come “yes”; abbiamo inoltre 5 dati
che nel training set appatrtenevano alla classe “no” (seconda riga), ma che
sono comunque stati classificati come “yes”. In Eq. (4.3), riportiamo un
esempio di confusion matrix CM con k classi, nel quale: Cii indica le caselle
contenenti il numero di dati della classe i correttamente classificati; Cij indica
52
il numero di dati appartenenti ad una classe i, ma erroneamente attribuiti
dal metodo alla classe j.
CM =
⎡⎢⎢⎢⎢⎣C11 C12 · · · C1k
C21 C22 · · · C2k
... · · · . . ....
Ck1 Ck2 · · · Ckk
⎤⎥⎥⎥⎥⎦ . (4.3)
Torniamo ora all’accuratezza per classe. Definita la CM, Analizziamo
voce per voce:
• iniziando dal fondo, “Class” indica la classe a cui i precedenti coeffi-
cienti sono riferiti: la prima riga si riferisce ai dati classificati come
classe “yes”, la seconda riga e riferita ai dati classificati come “no”;
• TP rate indica il True Positives rate, ovvero la percentuale dei dati
appartenenti alla classe c, i quali sono stati effettivamente classificati
in modo corretto. Nel nostro caso, il 100% dei dati afferenti alla classe
“yes” sono stati classificati correttamente, mentre nessun pattern e
stato classificato come “no”;
• FP rate indica il False Positives rate, ovvero la percentuale dei dati
appartenenti alla classe c, i quali sono stati classificati in modo errato.
Nel nostro caso, qualsiasi dato non afferente a “yes”, e stato comunque
classificato come “yes”, quindi il FP rate di questa classe e il 100%.
Viceversa, nessun pattern e stato classificato come “no”, quindi anche
il FP rate di questa classe e 0%;
• Precision indica la percentuale di dati, classificati come appartenenti
alla classe c, correttamente classificati in quella classe. Nel nostro caso,
il 100% dei dati “yes” sono stati correttamente classificati, mentre lo
0% dei “no” e stato attribuito a tale classe dallo 0–R;
• Recall e la parte di classe che e stata correttamente “scoperta”: coincide
quindi con il TP rate;
• la F–measure unisce Precision e Recall in un unico indice.
In termini formali, si puo scrivere (i pedici c si riferiscono ad una generica
classe), riferendoci alla notazione di Eq. (4.3):
53
TPc =Ccc∑ki=1 Cci
, (4.4)
FPc =
∑kj=1 Ccj∑ki=1 Cci
, ∀ j �= c, (4.5)
Precc =Ccc∑ki=1 Cic
, (4.6)
Recc = TPc, (4.7)
Fmc =2 · Precc · Recc
Precc + Recc. (4.8)
4.2 Naive Bayesian Classifier
Terminata la rassegna sul poco utile classificatore 0–R, passiamo a qual-
che metodo piu complesso ma anche decisamente piu efficace. Iniziamo la
rassegna con il Naive Bayesian Classifier, anche noto come NBC.
4.2.1 Apprendimento
L’idea di base di NBC consiste nel classificare un dato sulla base del da-
to stesso, ovvero della probabilita di classe dato il pattern p (C = c |X = x),
dove C indica una variabile random per la classe, X un vettore di varia-
bili random per gli attributi, c una particolare classe e x una particolare
osservazione. NBC si basa su due ipotesi semplificative:
1. tutte le feature sono indipendenti fra loro, data una classe;
2. non esistono attributi nascosti (e non presenti nel dataset) che influen-
zino in qualche modo il processo decisionale sulla classe.
Dato che spesso, nella realta, queste due ipotesi sono tutt’altro che stretta-
mente rispettate, le prestazioni del classificatore talvolta peggiorano.
Proseguiamo con l’analisi. Il teorema di Bayes ci dice che, dato un nuovo
pattern da classificare x, possiamo scegliere la classe sulla base delle seguenti
probabilita condizionali:
p (C = ci |X = x) =p(C = ci)p (X = x |C = ci )
p (X = x), ∀ i, (4.9)
54
scegliendo quindi la classe ci a probabilita maggiore. In questo caso, p(C =
ci) rappresenta la probabilita a priori di classe, mentre
p (X = x |C = ci ) = p(∧
j Xj = xj |C = ci
)=
=∏
j p (Xj = xj |C = ci ) ,(4.10)
avendo supposto indipendenti le feature data la classe. Inoltre, il termine
p (X = x) viene spesso trascurato, essendo soltanto un fattore di normaliz-
zazione.
Il termine di Eq. (4.10) e facile da calcolare per variabili non continue;
nel caso di attributi continui, si puo ipotizzare che la distribuzione di tali
valori sia gaussiana, ottenendo
p (Xj = xj |C = ci ) =1√2πσ2
j
exp
(−(xj − xj)
2
2σ2j
), (4.11)
con xj e σ2j che rappresentano media e varianza dell’attributo xj , calcolate
sui pattern del training set. Di fatto, l’apprendimento si esaurisce nel calcolo
di media e varianza sul dataset usato per l’apprendimento. Una nota: in
alternativa all’Eq. (4.11), e possibile utilizzare un mapping non–lineare dei
dati attraverso funzioni kernel (che riprenderemo piu avanti), le quali compli-
cano la trattazione e non sono particolarmente didattiche al momento. Per
chi fosse interessato a maggiori dettagli, si veda [12].
4.2.2 Fase in avanti
La fase feedforward del NBC e stata gia definita all’interno del paragrafo
sull’apprendimento: all’arrivo di un nuovo pattern, si utilizza l’Eq. (4.9) e si
sceglie la classe con probabilita condizionale piu alta.
4.2.3 Estensione al caso multiclasse
Come risulta chiaro dalla trattazione e, in particolare, dall’Eq. (4.9),
NBC e nativamente multiclasse: e sufficiente iterare il calcolo della probabi-
lita condizionale di classe su tutte i valori che il target puo assumere.
55
4.2.4 Esempio di analisi in WEKA
Utilizziamo il nostro solito dataset, weather, e vediamo come si comporta
con NBC. Innanzitutto, da WEKA explorer, selezioniamo il classificatore
“NaiveBayes” dalla sottocategoria “Bayes”. Il classificatore permette tre
personalizzazioni:
1. alcuni ulteriori output di debug (si possono attivare o no);
2. passare ad un mapping non–lineare attraverso kernel dei nostri ingressi
(lo lasceremo a false in questa analisi);
3. rappresentare le variabili continue non attraverso una distribuzione nor-
male, ma attraverso una discretizzazione dell’attributo in appositi inter-
valli (di fatto, rendere la variabile discreta o, se vogliamo, qualitativa).
Anche in questo caso, lasceremo false questa opzione.
Appurandoci di effettuare il training su tutto il training set e, se vogliamo,
avendo attivato l’uscita di tipo probabilistico, lanciamo l’analisi.
In questo caso, abbiamo ben 13 classificazioni esatte su 14 pattern di trai-
ning, valori medi di errore bassi e una Kappa elevata (sopra lo 0.8). Premesso
che per un test piu accurato e necessario l’utilizzo di dati non appartenenti
al training set, i valori che ritroviamo sono decisamente incoraggianti. Anche
la CM e:
a b <-- classified as
9 0 | a = yes
1 4 | b = no
ovvero l’unico errore e un “no” che classifichiamo come “yes”. Quantomeno
abbiamo cominciato a distinguere due classi, e gia un bel passo in avanti.
4.3 Reti neurali: MultiLayer Perceptrons
4.3.1 Cenni storici: il percettrone
Prima di lanciarci nell’analisi del percettrone multistrato, e bene comin-
ciare a capire cosa sia un percettrone. Introdotto da Rosenblatt nel 1958
[21], esso rappresentava per l’epoca un’innovazione incredibile: in pratica,
56
esso consisteva in una funzione matematica in grado di “imparare” dai dati
attraverso un algoritmo di apprendimento vero e proprio. Infatti, fino ad ora,
sia 0–R sia NBC non effettuano un vero e proprio learning dai dati: il primo
fa un semplice conto sulla frequenza, il secondo al massimo calcola media e
varianza per fittare una gaussiana.
Il percettrone e un classificatore binario che mappa i suoi ingressi x ∈ �m
in un valore scalare y = f(x) ∈ �, calcolato come
y = f(x) = χ (w · x + b) , (4.12)
dove w e un vettore di pesi da applicare agli ingressi, b e detto bias ed e
un termine costante che non dipende dagli ingressi, e χ(z) e la funzione di
attivazione. Le scelte piu comuni per χ(z) sono:
χ(z) = Θ(z) (4.13)
χ(z) = z Θ(z) (4.14)
χ(z) = tanh(z) (4.15)
χ(z) =1
1 + e−z(4.16)
χ(z) = z, (4.17)
dove Θ(z) e la cosiddetta funzione Heaviside:
Θ(z) =
⎧⎪⎨⎪⎩0 se z < 012
se z = 0
1 se z > 0
. (4.18)
Non e raro vedere riformulata l’Eq. (4.12) come
y = f(x) = χ (w · x) , (4.19)
esattamente equivalente all’Eq. (4.12), ma nella quale abbiamo aggiunto
al vettore dei pesi il termine del bias e al vettore degli ingressi un termine
costante a 1. Uno schema grafico del percettrone e presentato in Fig. 4.1.
L’algoritmo di apprendimento e iterativo di tipo error backpropagation
(BP), ovvero la differenza tra l’uscita reale e quella ottenuta dal percettrone
ad ogni passo viene usata come feedback per adattare i pesi. Sfortunata-
mente, il percettrone riusciva a riconoscere dopo l’addestramento solamente
57
Figura 4.1: Schema grafico di un percettrone.
funzioni linearmente separabili, ovvero senza sovrapposizione fra le classi (le
Figg. 4.2 e 4.3 mostrano due esempi di dataset linearmente e non linear-
mente separabili): in particolare, Minsky e Papert [16] mostrarono che il
percettrone non era in grado di apprendere nemmeno l’elementare funzione
logica XOR. Questo perche, come mostrato in Fig. 4.4, lo XOR non e un
problema linearmente separabile (i simboli ‘x’ mostrano le uscite a 1 e i ‘o’
rappresentano gli output a 0).
−8 −6 −4 −2 0 2 4 6 8−8
−6
−4
−2
0
2
4
6
8
Figura 4.2: Esempio di due classi di dati linearmente separabili.
Dopo, quindi, un iniziale straordinario successo, il percettrone rimase
58
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Figura 4.3: Esempio di due classi di dati non linearmente separabili.
−0.5 0 0.5 1 1.5−0.5
0
0.5
1
1.5
Figura 4.4: Rappresentazione grafica della funzione logica XOR.
59
quasi inutilizzato per una decina d’anni, fino a quando non vennero sviluppate
le cosiddette reti multistrato, cioe le MLP.
4.3.2 Architettura di un MLP
La struttura generale di un MLP e costituita da tre strati di neuroni:
1. il primo strato viene detto input layer ed e in contatto diretto con i
dati di ingresso;
2. lo strato intermedio viene detto hidden layer e non ha contatti diretti
con l’esterno, in quanto riceve i dati dall’input layer e li invia allo strato
di neuroni di uscita;
3. l’ultimo livello e l’output layer, il quale riceve i dati dai neuroni dello
strato intermedio e si interfaccia con l’uscita.
Dato che, spesso, per la rappresentazione del MLP si utilizzano grafi, si par-
la di topologia di una rete, in alternativa al piu classico termine architettura
della rete. Un esempio di MLP e presentato in Fig. 4.5. Talvolta, lo strato
hidden e assente e i layer di ingresso ed uscita coincidono: si parla in quel
caso di Single Layer Perceptron, ma non analizzeremo questo tipo di rete.
Il layer hidden puo, inoltre, contenere diversi layers al proprio interno. Il
MLP rappresenta il primo esempio di Artificial Neural Network o piu sem-
plicemente Rete Neurale (NN) che abbia avuto davvero successo, anche dal
punto di vista pratico.
Iniziamo a considerare l’architettura di un MLP: supponiamo che esso
contenga, al proprio interno, n neuroni nell’input, h nell’hidden e p neuroni
nell’output layer. I pesi wik, con i = 1, ..., n e k = 1, ..., h, permettono
l’interfacciamento fra i neuroni di input e quelli di hidden; i pesi zkj, con k =
1, ..., h e j = 1, ..., p, connettono i neuroni di hidden con quelli di output. Per
quanto riguarda la determinazione del numero di neuroni e strati per l’hidden
layer, non esiste un metodo preciso in letteratura, ma di solito si procede
ad un confronto fra architetture per scegliere quella ottimale. I neuroni di
hidden, quindi, ricevono informazione dai neuroni di input attraverso i pesi w,
e producono l’uscita hk = f(x, wk), dove f(·) e la funzione di attivazione del
neurone. I neuroni di output, a loro volta, ricevono i dati dall’hidden layer,
60
Figura 4.5: Esempio di architettura di un MLP
vi applicano gli opportuni pesi z e quindi producono l’output yj = g(h, zj).
Unendo le due funzioni, l’uscita del j–esimo neurone e quindi:
yj = g
(∑k
hkzkj
)= g
(∑k
zkjf
(∑i
xiwik
)). (4.20)
Questa equazione mostra come il mapping degli ingressi in un MLP sia
altamente non lineare. E, pero, necessario trovare i pesi che caratterizzano
la rete. Possiamo identificare tre tipi di MLP:
• MLP con pesi fissati: di fatto, non contemplano una fase di appren-
dimento, ma i pesi vengono determinati sulla base di informazioni a
priori. Non ci occuperemo di questo tipo di reti, in quanto davvero
poco usate;
• Supervised learning MLP: nel training set abbiamo definito un target
e, quindi, e possibile definire una funzione di errore rispetto all’output
ottimo;
• Unsupervised learning MLP: anche note come Self Organizing Maps o
Mappe di Kohonen, dal nome di chi le ha introdotte, non prevedono la
definizione di un target nel training set. Sono abbastanza usate, ma
per motivi di tempo non ce ne occuperemo. Per chi fosse interessato,
[15] puo risultare utile.
61
Come anticipato nelle precedenti righe, ci concentreremo in queste di-
spense solo sui Supervised learning MLP, per i quali analizziamo l’algoritmo
per l’apprendimento.
4.3.3 Apprendimento
L’algoritmo di learning in assoluto piu usato e la gia citata backpropa-
gation (BP). Iniziamo a definire la funzione errore per il j–esimo nodo; per
esempio, possiamo scegliere:
ej = dj − yj, (4.21)
nella quale dj rappresenta il target voluto e yj l’uscita della nostra rete.
Possiamo definire la funzione energia, che nel nostro caso risulta essere:
E =1
2
∑j
e2j . (4.22)
Attraverso l’errore, e quindi attraverso yj, la funzione energia dipende
dai nostri pattern di training in maniera altamente non lineare, come appare
chiaro dall’Eq. (4.20). Al fine di trovare i pesi ottimi, quindi, siamo costretti
a ricorrere ad un algoritmo di tipo iterativo, appunto come la BP, col pericolo
peraltro di ritrovarci bloccati in qualche minimo locale.
Supponiamo di inizializzare i pesi della rete con valori random, trovando
w(0). Definiamo l’errore allo step s come e(s)j . Dalla teoria dei differenziali,
si puo dimostrare che il passo di aggiornamento per i pesi e
Δw(s)ji = ηδ
(s)j y
(s)i , (4.23)
nella quale δ(s)j e
δ(s)j = −∂E(s)
∂υ(s)j
(4.24)
dove υ(s)j e l’output del neurone j allo step s, e η ∈ [0, 1] e il cosiddetto
learning rate, che e un parametro da fissare prima di iniziare l’apprendimento.
Proprio per questo motivo, piu che un vero e proprio parametro, e considerato
un iperparametro, ovvero una quantita da stabilire come trial and error e
che determina il comportamento globale dell’algoritmo. Se troppo piccolo,
l’algoritmo converge molto lentamente; se troppo grande, l’algoritmo inizia
62
ad oscillare, divenendo instabile. Normalmente, 0.2 < η < 0.8 in molte
applicazioni pratiche.
Il valore di δ(s)j puo essere calcolato in maniera differente a seconda che
il j–esimo neurone faccia parte dell’output o dell’hidden layer. Se j e un
neurone di output, e facile dimostrare che vale:
δ(s)j = e
(s)j χ′
(υ
(s)j
), (4.25)
con χ′(υ
(s)j
)che rappresenta la derivata prima della funzione attivazione.
Se, invece, ci occupiamo di un neurone dell’hidden layer, otteniamo:
δ(s)j = χ′
(υ
(s)j
)∑k
δ(s)k w
(s)kj . (4.26)
Dato che la precedente formula dipende da wkj, essa e anche dipendente dalle
variazioni dei pesi nel nodo k. In questo appare chiaro il significato della BP.
A volte, puo aiutare la convergenza l’aggiunta di un altro termine al-
l’Eq. (4.23), ovvero del cosiddetto momento m ∈ [0, 1]: sfortunatamente,
anch’esso e un iperparametro ed e estremamente difficile settarne il valore
ottimo, quantomeno a priori. Anche per il momento valgono le considerazio-
ni fatte per η, ovvero normalmente 0.2 < m < 0.8. L’Eq. (4.23) risulta cosı
modificata:
Δw(s)ji = ηδ
(s)j y
(s)i + mΔw
(s−1)ji . (4.27)
Un altra difficolta consta nel criterio di stop da utilizzare per bloccare
l’algoritmo. I metodi piu utilizzati sono:
• stabilire un numero massimo di iterazioni;
• fissare un tempo massimo di esecuzione;
• fermare l’algoritmo se l’errore scende sotto una soglia predeterminata;
• stop se il valore dell’errore per un certo numero di step non scende oltre
un valore prefissato;
• utilizzare come parametro l’errore su un validation set (ne discuteremo
nel paragrafo 4.3.6).
63
4.3.4 Fase in avanti
Una volta trovati e salvati i pesi, la fase in avanti e semplicemente realiz-
zata attraverso l’Eq. (4.20), nella quale vengono applicati i pesi trovati con
la BP.
4.3.5 Estensione al caso multiclasse
L’estensione al caso multiclasse e particolarmente semplice: e sufficiente
inserire tanti neuroni nello strato di output quante sono le classi del nostro
problema. Per esempio, un problema di classificazione binaria avra due neu-
roni di uscita, un problema multiclasse con 5 classi avra 5 neuroni di uscita.
Qualora piu di un neurone di uscita sia attivato, il neurone con output analo-
gico maggiore vince e la classe viene assegnata di conseguenza: questa viene
anche detta tecnica Winner–Take–All (WTA).
4.3.6 Esempio di analisi in WEKA (I)
Consideriamo nuovamente il dataset weather. Da WEKA explorer, sele-
zioniamo il classificatore “MultiLayerPerceptron”, che possiamo trovare nel-
la sottocategoria “functions”. WEKA utilizza solo funzioni di attivazione
di tipo sigmoidale, come da Eq. (4.16). Analizziamo le opzioni a nostra
disposizione:
• “GUI” permette di utilizzare un’interfaccia grafica per visualizzare la
rete creata. Se settato a false, attiviamolo;
• “autobuild”, se attivato, consente a WEKA di modificare i neuroni di
hidden in maniera automatica. Spesso utile, conviene mantenere su
true l’opzione;
• “debug” e la solita opzione per eventuali output di debug;
• “decay” consente a WEKA di abbassare iterativamente il learning rate
nel caso di reset della rete (vedi sotto). Settiamolo in queste prove a
false;
• “hiddenLayers” rappresenta il numero di neuroni hidden. Esistono
alcune wildcards per questo valore:
64
– a = #attributi+#classi2
;
– i = #attributi;
– o = #classi;
– t = 2 · a;
• “learningRate” e “momentum” sono le quantita η e m di cui abbiamo
parlato nel paragrafo 4.3.3. In queste prove, li lasceremo pari ai valori
di default, cioe η = 0.3 e m = 0.2;
• “nominalToBinary” e utilizzato per binarizzare la matrice dei dati nel
caso di variabili qualitative (per noi, true);
• “normalizeAttributes” viene utilizzato per normalizzare le feature tra
[−1, 1]. Anche in questo caso setteremo true;
• “normalizeNumericClasses” normalizza i valori numerici dei target tra
[−1, 1] (true);
• “randomSeed” e il seed per l’algoritmo di random per la selezione del
punto di partenza e per lo shuffling dei dati (settiamo seed pari a 16,
un numero casuale ma che ci permette analisi consistenti);
• “reset” consente all’algoritmo di resettare la rete nel caso durante l’ese-
cuzione il valore delle uscite tenda a divergere rispetto al target voluto.
Settiamolo a false;
• “trainingTime” fissa il criterio di stop sul numero massimo di iterazioni
da eseguire. Settiamolo a 1000;
• “validationSetSize” e “validationThreshold” vengono utilizzati come
criterio di stop in alternativa al numero di iterazioni. Il primo va-
lore, se diverso da 0, fissa percentualmente il numero di pattern del
training set che non verranno utilizzati per trovare i pesi. Una volta
trovati i pesi coi restanti pattern, la rete verra testata sul validation
set e verra trovato un errore. Tale errore scendera per un certo nu-
mero di iterazioni, poi la rete tendera ad overfittare (in generale) e
l’errore tendera a salire: “validationThreshold” fissa dopo quante ite-
razioni consecutive con peggioramento dell’errore dobbiamo fermarci.
65
Per il momento, manteniamo disattivato tale criterio di stop, fissando
“validationSetSize” a 0.
Figura 4.6: Esempio di GUI di WEKA per le reti neurali MLP.
Passate in rassegna le opzioni, lanciamo la nostra analisi. Si aprira in
automatico una finestra come quella di Fig. 4.6. Notiamo che l’input layer
e rappresentato direttamente con nodi aventi il nome degli attributi (le va-
riabili qualitative sono state binarizzate); avendo settato ad a il valore degli
hidden layers, abbiamo a = (6 + 2)/2 = 4 neuroni di hidden. Mediante ap-
posito pulsante, lanciamo l’analisi. Una volta terminata, chiudiamo la GUI e
accettiamo il modello cosı trovato. Torneremo ora ad explorer, che ci mostra
i pesi e i bias dei neuroni e le caratteristiche statistiche del classificatore.
Notiamo che non commettiamo errori, i valori di MAE e RMSE sono
molto bassi, tanto da apportare il 95% circa di miglioramento in termini di
errore rispetto a 0–R. Anche la Kappa e massima, essendo pari a 1.
4.3.7 Esempio di analisi in WEKA (II)
Manteniamo le stesse opzioni, ma cambiamo dataset e complichiamo un
po’ la vita al MLP. Scegliamo come dataset iris, composto da 150 pattern,
4 feature (riguardanti le dimensioni di sepalo e petalo) e un target (3 classi
per 3 tipi differenti di fiori).
66
Proviamo a lanciare l’analisi con NBC e vediamo come si comporta. Il
classificatore bayesiano commette 6 errori, pari al 4%, ha un’ottima Kappa
(0.94) e si comporta egregiamente in termini di MAE e RMSE (in questo
caso, miglioriamo pero “solo” del 70% rispetto allo 0–R). Proviamo con il
MLP. Questa volta, commettiamo solo 2 errori (1.33%), la Kappa e anche
migliore (0.98) e il miglioramento percentuale del RMSE e circa pari all’82%.
Proviamo ad utilizzare ora una nuova opzione, finora mai utilizzata. In
WEKA explorer, nell’area “Test options”, settiamo di splittare il dataset a
nostra disposizione in un training set, composto dal 67% dei dati (100 pat-
tern), e un validation set, sul quale confronteremo le performance di NBC
e MLP. Lanciamo le analisi con i due classificatori. Questa volta confronte-
remo solo l’errore sul validation set. NBC commette 2 errori (4%), contro
un solo errore (2%) del MLP, che quindi, utilizzando questo criterio, sembra
avere una migliore performance.
4.3.8 Validation set e test set
Quando abbiamo introdotto nel paragrafo 1.2 i termini dataset e training
set, abbiamo anticipato che ci saremmo occupati solo piu avanti di validation
e test set.
Il validation set e un insieme di dati, indipendenti da quelli del training
set, che possono essere utilizzati per stimare le performance di un modello,
trovato usando solo il training set. Nel caso precedente, abbiamo effettua-
to l’apprendimento su 100 dati e poi abbiamo verificato le performance sui
restanti 50, costituenti appunto il validation set. L’utilizzo di un validation
set si rende necessario quando vogliamo confrontare diversi metodi statisti-
ci (ad esempio, NBC e MLP) oppure verificare le performance al variare di
parametri e/o iperparametri. Ad esempio, potremmo verificare su iris come
cambiano le performance portando momento e learning rate entrambi a 0.8:
l’errore in termini percentuli resta uguale, ma con i due iperparametri settati
a valori piu alti sale leggermente il RMSE.
Il test set, infine, e un terzo set di dati, indipendente da validation e
training set, che viene utilizzato alla fine solo dopo aver scelto il model-
lo definitivo, come banco di prova prima dell’implementazione della fase in
avanti. Il test set viene utilizzato, quindi, solo su un metodo statistico, quello
prescelto utilizzando (per esempio) il validation set.
67
Occorre prestare molta attenzione, perche spesso in rete, in letteratura e
anche in WEKA si fa molta confusione: la nomenclatura presentata in questo
paragrafo va tenuta come riferimento all’interno di questo insegnamento.
4.4 Support Vector Machines
4.4.1 Il problema del classificatore a massimo margine
Abbiamo analizzato nel precedente paragrafo pregi e difetti dei MLP: a
fronte di una classificazione efficace, l’apprendimento tramite BP e alquanto
problematico, a partire dal fatto che il problema da risolvere non e convesso
e puo presentare miriadi di minimi locali.
Mentre molti studiosi tra Stati Uniti ed Europa dibattevano negli anni
’60 e ’70 su percettrone, XOR e MLP, in Unione Sovietica due matematici,
Vapnik e Chervonenkis, svilupparono una teoria, detta Statistical Learning
Theory (SLT ), che avrebbe trovato definitiva applicazione solo nella seconda
meta degli anni ’90 e che avrebbe rivoluzionato il mondo delle reti neura-
li. L’idea si basa su due concetti fondamentali, che gia in parte abbiamo
analizzato:
1. un classificatore dev’essere sufficientemente complesso da riuscire a clas-
sificare efficacemente set di dati anche particolarmente mal posizionati;
2. tale classificatore non deve essere, pero, troppo complicato, altrimenti
si subirebbero gli effetti dell’overfitting.
Dal bilanciamento dei punti 1 e 2 otteniamo il classificatore ottimo, che
si puo dimostrare essere il cosiddetto classificatore a massimo margine. Il
concetto piu innovativo della teoria di Vapnik consta proprio nella definizione
del concetto di margine, ovvero di distanza fra i punti di due classi (per ora,
poniamoci nel caso biclasse) piu vicini fra loro. L’illustrazione grafica di Fig.
4.7 dovrebbe chiarire costa intendiamo per margine: abbiamo preso due set
di dati di due classi linearmente separabili e abbiamo tratteggiato i limiti del
margine massimo.
Nacque cosı la Support Vector Machine (SVM ): spiegheremo meglio a
tempo debito il significato di questo nome. L’iniziale scarso successo della
SVM e dovuto a diversi fattori: innanzitutto, la teoria e stata sviluppata in
68
−6 −4 −2 0 2 4 6−10
−8
−6
−4
−2
0
2
4
6
8
Figura 4.7: Esempio di dataset linearmente separabile. Tratteggiati, abbiamo
rappresentato i limiti del massimo margine ottenibile.
piena Guerra Fredda nell’URSS, quindi non e stata volutamente divulgata “al
di qua di Trieste”, per dirla con Churchill; in secondo luogo, la SVM presen-
tava non pochi problemi pratici. Per realizzare, infatti, l’obiettivo di evitare
l’overfitting, era stata sviluppata una teoria, detta di Vapnik–Chervonenkis
o VC Theory, che permetteva di calcolare il grado di complessita di una fami-
glia 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 inizio a
lavorare negli USA presso il laboratorio di ricerca della AT&T e, grazie al fon-
damentale aiuto di Corinna Cortes, nacque la SVM cosı come la conosciamo
oggi [23, 8].
Consideriamo un dataset {(x1, y1), ...., (xl, yl)}, dove xi ∈ �m e yi =
±1. La formulazione originaria di SVM (pre–Cortes, potremmo dire) e la
seguente:
minw,b
1
2‖w‖2 (4.28)
yi (w · x + b) ≥ 1 ∀i ∈ [1, . . . , l] (4.29)
69
dove w e un vettore di pesi, b e il bias e il piano (o, a piu dimensioni,
l’iperpiano) separatore tra le due classi e descritto dall’equazione
w · x + b = 0, (4.30)
analogamente a quanto visto per il percettrone. Si puo dimostrare che il mar-
gine e pari a 1/‖w‖2, quindi andiamo a massimizzarlo attraverso il problema
di minimo vincolato (4.28).
Il problema, in molti casi pratici, consisteva nel fatto che il vincolo (4.29)
era tutt’altro che facile da rispettare, perche prevedeva che non vi fosse so-
vrapposizione fra classi. L’idea fondamentale in questo senso e stata l’intro-
duzione di variabili di slack ξi ≥ 0, che permettessero ad alcuni dati di violare
il vincolo. La formulazione, detto problema primale di SVM, e la seguente:
minw,b,ξ
1
2‖w‖2 + CeT ξ (4.31)
yi (w · x + b) ≥ 1 − ξi ∀i ∈ [1, . . . , l] (4.32)
ξi ≥ 0 ∀i ∈ [1, . . . , l] (4.33)
con ei = 1, ∀i, e eT ξ che rappresenta quindi la somma degli errori che com-
mettiamo nella classificazione del training set. C e un iperparametro che
bilancia la componente di massimizzazione del margine (tendenza all’under-
fitting) e quella di minimizzazione dell’errore (tendenza all’overfitting).
L’analisi sarebbe, quindi, completa, se non fosse per il fatto che il proble-
ma (4.31) e tutt’altro che banale da risolvere. Fortunatamente, utilizzando la
tecnica dei moltiplicatori di Lagrange, introducendo l moltiplicatori αi (uno
per pattern), si ottiene il cosiddetto problema duale di SVM :
minα
1
2αT Qα + rT α (4.34)
0 ≤ αi ≤ C ∀i ∈ [1, . . . , l] (4.35)
yT α = 0 (4.36)
dove ri = −1, ∀i, e Q = {qij} ∈ �l×l e una matrice simmetrica semidefinita
positiva:
qij = yiyjK(xi, xj), (4.37)
70
Kernel Funzione
Lineare K(xi, xj) = xi · xj
Polinomiale K(xi, xj) = (xi · xj + 1)p
Gaussiano K(xi, xj) = exp(−γ ‖xi − xj‖2
2
)Tabella 4.1: Funzioni kernel piu comuni.
nella quale K(xi, xj) e detta funzione kernel ed effettua un mapping non
lineare degli ingressi in uno spazio (in generale) a maggiore dimensionalita,
dove la classificazione dovrebbe essere piu semplice. In poche parole, la
SVM classifica i dati mediante un separatore lineare, esattamente come il
nostro buon vecchio percettrone, ma in uno spazio in cui tale classificazione
e piu semplice; in tale spazio i dati vengono mappati attraverso i kernel. Le
funzioni kernel piu comuni sono quelle presentate in Tab. 4.1: nel caso di
kernel gaussiano e polinomiale, possiamo notare l’introduzione di un ulteriore
iperparametro oltre a C, rispettivamente γ e p, che regolano l’ampiezza della
gaussiana e il grado del polinomio classificatore.
Torniamo al problema (4.34): il grande successo di SVM e dovuto al fatto
che il problema duale e un cosiddetto Constrained Convex Quadratic Problem
(CCQP), ovvero, essendo convesso, esso ha una sola soluzione ottima e non
presenta minimi locali. Rispetto ai MLP questo e un vantaggio enorme: se
anche in SVM abbiamo uno (o piu) iperparametro(/i) da settare, essi non
determinano la possibilita di trovare o meno una soluzione, solo stabiliranno
una maggiore o minore qualita di tale soluzione.
4.4.2 Apprendimento
La fase di training di SVM consta nel risolvere il problema duale e tro-
vare i moltiplicatori di Lagrange ottimi α e il bias b che, per quanto non
appaia in forma esplicita in (4.34), ci e necessario poi per la fase in avan-
ti. Per risolvere il problema duale sono state sviluppate moltissime tecniche,
ma la piu usata e la cosiddetta Sequential Minimal Optimization (SMO): il
CCQP viene decomposto in tanti problemi elementari, in cui viene trovata
la soluzione per due pattern per volta. E necessario trovare la soluzione per
due pattern semplicemente a causa della presenza del vincolo di uguaglianza
71
di Eq. (4.36), per il quale ad ogni “spostamento” di un αi deve corrispondere
un’altra modifica di un altro parametro.
SMO si ferma (in quanto ha trovato la soluzione ottima) nel momento
in cui sono rispettati tutti i vincoli di ottimalita (a meno di una prefissata
precisione di macchina), detti condizioni di Karush–Kuhn–Tucker o KKT.
Per semplicita e brevita, non presentiamo in questo testo le KKT, per le
quali e necessario esplicitare il passaggio da problema primale a duale: per
chi fosse interessato, consigliamo [6]. Le KKT, oltre a fornire la soluzione
ottima α, consentono anche di calcolare il bias, considerando che l’iperpiano
separatore normalmente (anche se, in teoria, non sarebbe obbligatorio) viene
posto a meta del margine. Ad esempio, recuperando l’esempio di Fig. 4.7, il
piano separatore e quello di Fig. 4.8.
−6 −4 −2 0 2 4 6−10
−8
−6
−4
−2
0
2
4
6
8
Figura 4.8: Esempio di piano separatore: tratteggiati, i limiti del margine;
con tratto breve–lungo, il piano separatore.
Una nota conclusiva: dato che la matrice Q ∈ �l×l, la SVM soffre grandi
dimensioni non in termini di numero di feature, bensı in termini di numero
di pattern. Per questo, spesso, una feature selection applicata prima di SVM
spesso non risolve alcun problema e, anzi, talvolta peggiora la qualita della
classificazione.
72
4.4.3 Fase in avanti
La fase in avanti consiste nel verificare il segno della funzione che descrive
il piano separatore. In termini di problema primale, supponendo target del
tipo yi = ±1, la classificazione di un nuovo pattern x avviene tramite:
y = ϑ (w · x + b) , (4.38)
dove la funzione ϑ(·) e definita come:
ϑ(z) =
⎧⎪⎨⎪⎩+1 se z > 0
−1 se z < 0
random(±1) se z = 0
. (4.39)
Sfortunatamente, risolvendo il problema duale non possiamo conoscere
esplicitamente i pesi w. Si puo dimostrare che la forma nel duale per la
funzione di classificazione e la seguente:
y = ϑ
(l∑
i=1
yiαiK (x, xi) + b
), (4.40)
per la quale conosciamo ogni termine. In pratica, i coefficienti αi pesano
quanto ogni dato del training set sia di supporto alla decisione finale, ovvero
al calcolo del target stimato y, come appare evidente dall’Eq. (4.40): da qui,
il nome Support Vector Machine, ovvero macchina a supporto vettoriale.
4.4.4 Estensione al caso multiclasse
Al contrario dei metodi fin qui analizzati, l’estensione al caso multiclasse
per SVM non e banale. Tralasciando moltissime tecniche, seppur interessanti,
le piu comunemente utilizzate sono la One Vs. All (OVA) e la All Vs. All
(AVA).
La tecnica OVA prevede che vengano istruite tante SVM in maniera tale
che ognuna delle classi venga distinta dalle altre mediante un problema bina-
rio. In pratica, supponendo di avere k classi, dovremo istruire k SVM (classe
1 vs. le altre, classe 2 vs. le altre,...) e attribuiremo un nuovo pattern alla
classe risultante dalle classificazioni binarie o, in caso di incertezza, alla clas-
se con output analogico piu alto. Per output analogico di SVM intendiamo
il valore
73
f(x) =
l∑i=1
yiαiK (x, xi) + b (4.41)
che passiamo alla funzione ϑ(·).La tecnica AVA, invece, crea tante SVM binarie in modo tale che ogni
classe venga distinta contro ognuna delle altre classi. Supponendo di avere,
quindi, 3 classi avremo: 1 vs. 2, 1 vs. 3 e 2 vs. 3, per un totale di 3
classificatori. Il problema consta nel fatto che, al crescere del numero di
classi, il numero di classificatori necessari esplode, essendo pari a k(k− 1)/2.
Tuttavia, AVA talvolta offre performance migliori rispetto a OVA ed e quindi
un’opzione valida se k e piccolo. E la tecnica utilizzata per la classificazione
multiclasse da WEKA.
Un’altra tecnica e l’Augmented Binary [2], che prevede la modifica del
dataset di training in modo tale da trasformarlo in un problema binario
risolvibile con una sola SVM (a fronte, pero, di un aumento di dimensionalita
sia in termini di pattern che di feature): non approfondiremo, pero, questa
tecnica.
4.4.5 SVM e la probabilita
Facciamo un passo indietro e torniamo ai problemi binari. Spesso, una
uscita di tipo digitale ±1 puo non essere sufficiente. Supponiamo di consi-
derare il caso di una SVM utilizzata per identificare se un paziente in un
ospedale e malato o no: se voi foste il paziente, vi basterebbe un’uscita di-
gitale o vorreste anche conoscere la probabilita di tale uscita, ovvero (in un
certo senso) il grado di sicurezza di tale output? Decisamente, un’uscita di
tipo probabilistico e spesso necessaria.
Una tecnica per “convertire” l’output analogico di SVM di Eq. (4.41) in
un valore di tipo probabilistico e stata proposta da Platt [18]: la probabilita
di errore pe di classificazione per un pattern verra fornita attraverso l’utilizzo
di una sigmoide
pe(x) =1
1 + eAf(x)+B, (4.42)
dove A e B sono due parametri che vengono fissati risolvendo un problema
di Maximum Likelihood. Non approfondiremo oltre questo argomento.
74
4.4.6 Esempio di analisi in WEKA
Lanciato WEKA explorer, carichiamo il dataset weather, tanto per ini-
ziare, e quindi spostiamoci sui tool di classificazione. Vogliamo iniziare con
un kernel lineare. Nella sottocategoria “functions” troviamo la SVM sotto le
mentite spoglie del nome SMO (SVM e un marchio registrato). Analizziamo
le principali opzioni:
• “buildLogisticModel” consente di ottenere l’uscita in termini proba-
bilistici, utilizzando il metodo di Platt del paragrafo 4.4.5. Per ora,
settiamolo a false;
• “c” e il valore dell’iperparametro C. Settiamolo a 1;
• “cacheSize” e la dimensione della cache per la memorizzazione della
matrice Q;
• “debug” rappresenta eventuali output di debug;
• “epsilon” rappresenta lo zero di macchina per la rappresentazione di
coefficienti, bias, ecc. Conviene lasciarlo invariato;
• “exponent” e l’esponente p del kernel polinomiale. Settiamolo a p = 1;
• “featureSpaceNormalization” permette di effettuare la normalizzazione
dei dati nello spazio non lineare descritto attraverso le funzioni kernel.
Per ora, lasciamolo a false;
• “filterType” permette di applicare filtri ai dati. Settiamolo sulla nor-
malizzazione del training set;
• “gamma” e il valore di γ per il kernel gaussiano. Settiamo γ = 1;
• “lowOrderTerms” include o meno il termine ‘+1’ nel kernel polinomiale.
Per le definizioni di Tab. 4.1, setteremo questo parametro a false se
usiamo un kernel lineare e a true se il grado del polinomio p e piu
grande di 1. Per ora lasciamolo a false;
• “numFolds” permette di utilizzare la cross validation (la analizzeremo
nei prossimi capitoli) per cercare i valori di A e B per la sigmoide della
probabilita. Settiamo il valore −1 per disattivare l’opzione;
75
• “randomSeed” e il seed della funzione random per mescolare i dati
prima dell’eventuale cross validation;
• “toleranceParameter” e la tolleranza per il rispetto delle KKT. Il valore
di default 10−3 e un buon valore;
• “useRBF” e un flag per utilizzare il kernel gaussiano (per ora, false).
Lanciamo l’analisi su tutto il training set. Notiamo che commettiamo
2 errori, l’errore medio e abbastanza elevato e la Kappa e buona ma non
eccezionale (0.68). Notiamo un peggioramento rispetto al MLP: questo per-
che il MLP e nativamente non lineare, mentre noi abbiamo applicato una
classificazione lineare.
Settiamo “useRBF” a true e lasciamo invariati gli altri parametri: no-
tiamo che l’errore si annulla del tutto e abbiamo una Kappa massima. Di
fatto, abbiamo il nostro classificatore ideale.
Mettiamo alla prova ora SVM con iris, e torniamo ad un kernel lineare.
WEKA utilizza il metodo AVA per gestire il problema multiclasse. Utilizzia-
mo l’intero training set, per il momento. Commettiamo 5 errori, e la Kappa
e l’errore medio si pongono a meta tra MLP e NBC. Questa volta, anche con
un kernel gaussiano le cose non vanno meglio: sembrerebbe quindi il MLP
l’ottimo per iris. Lasciamo C = 1, ma settiamo γ = 100: otteniamo 0 errori
e nuovamente il classificatore ottimo che cercavamo. E stato sufficiente agire
un po’ sugli iperparametri per trovare una soluzione molto buona.
Con l’ultima configurazione usata, lanciamo l’analisi su 100 pattern di
training e vediamo come si comporta la SVM sui 50 rimanenti di valida-
tion. Commettiamo 3 errori, quindi avremmo la peggiore performance fra i
3 metodi. Settando γ = 10, pero, si possono ottenere 2 soli errori.
Abbiamo brevemente visto, in questo paragrafo, la grande potenza di
SVM, con tutte le opzioni di cui dispone, ma anche il suo piu grande limite:
la necessita molto forte di un tuning particolareggiato degli iperparametri.
4.4.7 SVM per feature selection
Algoritmo
Abbiamo analizzato nel paragrafo 3.5 la PCA e il suo utilizzo per la
selezione di feature. Purtroppo, la PCA utilizza come input il dataset che
76
forniamo e rielabora le feature al fine di creare nuove variabili attraverso le
proiezioni, ottenute mediante gli autovettori: questo significa che e possibile
trovare un ranking di feature, ma riferito agli attributi nello spazio della PCA
(in cui poi saremmo costretti a lavorare), come mostrato anche negli esempi
del paragrafo 3.6. Non solo: la PCA e un metodo unsupervised, quindi
non tiene conto della classe di appartenenza dei pattern. Semplicemente,
seleziona gli autovettori che forniscono un contributo di energia maggiore al
dataset, ma tali componenti potrebbero non favorire la classificazione (ad
esempio), ma addirittura renderla piu complessa.
Se ci occupiamo di problemi di classificazione, il nostro desiderio po-
trebbe essere quello, invece, di utilizzare una tecnica in grado di estrarre le
componenti, che ci permettono di classificare meglio le nostre osservazioni, e
di eliminare gli attributi “dannosi” per i nostri scopi. E possibile, quindi, uti-
lizzare una SVM come algoritmo per effettuare la feature selection, cercando
di estrarre le componenti che piu ci aiutano a creare un classificatore efficace.
La tecnica che andiamo a presentare venne proposta nel 2002 [11] e, dato un
set X con m feature, viene inizializzato creando due insiemi di indici, r e s,
rappresentanti rispettivamente gli attributi per i quali e gia stato effettuato
ranking e le variabili ancora da ordinare. Al primo step, s contiene tutti gli
attributi del dataset originario. L’algoritmo procede, quindi, iterativamente
fino a quando s ≡ ∅, seguendo alcuni semplici passi:
1. si crea un subset Xi di X, il quale include solo le feature contenute nel
set di indici s;
2. si risolve la SVM, vincolata ad essere una SVM lineare, e viene
calcolato il vettore α;
3. per ogni feature, si calcolano i pesi del primale wj, j = 1, ..., ‖s‖0, dove
la norma–0 rappresenta la cardinalita dell’insieme (i.e., il numero di
elementi che compongono il set);
4. si calcola il coefficiente di ranking come cj = w2j , in modo che l’impor-
tanza di una variabile sia calcolata sulla base del suo contributo nel
calcolo del margine;
5. si trova la feature j∗ = arg min c;
77
6. si elimina la feature j∗ dal set s e la si inserisce in testa al vettore r. In
questo modo, l’ultima variabile, eliminata nel processo iterativo, risulta
essere la prima (la piu informativa) nel vettore r.
Ovviamente, e immediata la generalizzazione al caso in cui si vogliano elimi-
nare piu di una feature per step nel processo iterativo.
Non ci rimane che capire come possano essere calcolati i pesi w2j per le
varie feature e il perche del vincolo ad avere una SVM lineare. Ancora una
volta, come gia per il bias, ci vengono in aiuto le KKT, per le quali otteniamo
che e possibile calcolare i pesi del primale come:
w =
l∑i=1
yiαiφ(xi), (4.43)
dove φ(x) e una funzione tale per cui un kernel puo essere definito come:
K(xi, xj) = φ(xi) · φ(xj). (4.44)
Avevamo detto che il kernel effettua un mapping non lineare ed implicito
dei dati, attraverso funzioni piu o meno complesse; di fatto, un kernel e
un prodotto scalare tra due funzioni φ(·), le quali effettuano, in maniera
questa volta esplicita, tale mapping sui singoli dati. Se, nel caso lineare, vale
φ(x) = x, sfortunatamente per molti altri kernel (ad esempio, il gaussiano)
non e possibile calcolare le φ(·), ma solo K(xi, xj). Ecco, quindi, il motivo
per il quale e necessario utilizzare una SVM lineare: almeno, conosciamo la
φ(·) ed e possibile procedere con il ranking.
L’estensione alla SVM non–lineare e comunque abbastanza semplice, an-
che se dispendiosa (in termini di risorse). Il coefficiente di ranking puo essere
definito come:
cd =1
2
∑i
∑j
αiαjqij − 1
2
∑i�=d
∑j �=d
αiαjqij, (4.45)
ovvero calcoliamo, in termini di peso nel margine e per ogni feature di s, l’in-
fluenza di ogni feature. Per il resto, l’algoritmo e identico a quello presentato
in precedenza.
78
Esempio di applicazione in WEKA
Lanciato WEKA explorer, dopo aver scelto il dataset weather ed esser-
ci spostati nel tab per la selezione degli attributi, optiamo per l’algoritmo
“SVMAttributeEval” e analizziamone le opzioni:
• “attsToEliminatePErIteration” rappresenta il numero di attributi da
eliminare per ogni step;
• “complexityParameter” e il C di SVM lineare. Sfortunatamente, WE-
KA non dispone di un’estensione al caso non–lineare;
• “epsilonParameter” ha lo stesso significato visto nel caso di SVM;
• “filterType” permette di applicare filtri al training set;
• “percentThreshold” indica la percentuale di feature sotto la quale si
passa da un’eliminazione percentuale ad una costante delle feature.
Spieghiamoci meglio. In alternativa ad eliminare un certo numero (fis-
sato) di feature per step, e possibile definire una percentuale sul totale
di attributi da estrarre; quando si scende sotto una certa soglia, si pas-
sa da un’eliminazione di variabili percentuale ad una costante per ogni
step. Settiamo a 0 questa opzione, in modo che essa venga disattivata;
• “percentToEliminatePerIteration” si riferisce alla percentuale di feature
da eliminare per step. Anche in questo caso, disattiviamo l’opzione,
settandola a 0;
• “toleranceParameter” e la tolleranza per SMO: 10−3 e normalmente un
valore accettabile.
Settato C = 1, lanciamo l’analisi e otteniamo un errore: tutte le variabili
devono essere quantitative o binarizzate. L’algoritmo non applica l’apposito
filtro in automatico: dobbiamo quindi spostarci nel tab di preprocessing e
applicare il filtro apposito per trasformare variabili nominali in binarie. Ap-
plicato il filtro, torniamo alla SVM per feature selection e lanciamo l’analisi.
Otteniamo la seguente “classifica”:
Ranked attributes:
6 6 windy
79
5 2 outlook=overcast
4 1 outlook=sunny
3 5 humidity
2 4 temperature
1 3 outlook=rainy
Verifichiamo ora la stabilita di tale ranking anche al variare di C. Set-
tiamo, quindi, C = 100 e lanciamo nuovamente l’analisi. Otteniamo:
Ranked attributes:
6 5 humidity
5 2 outlook=overcast
4 4 temperature
3 6 windy
2 1 outlook=sunny
1 3 outlook=rainy
Notiamo che il ranking e stato profondamente modificato: in questo caso,
sarebbe quindi necessario un doppio lavoro di ricerca di iperparametro per la
classificazione e per la feature selection. Comunque, in molti casi reali, dove
i dataset sono caratterizzati da un maggior numero di pattern, le indicazioni
del ranking sono spesso piu stabili.
4.5 Decision Trees
4.5.1 La nascita degli alberi di decisione
Abbiamo analizzato fino a questo punto molti metodi per la classifica-
zione. Sfortunatamente, queste tecniche forniscono come output un modello,
al quale viene dato in pasto un nuovo pattern e che restituisce il target sti-
mato dopo elaborazioni piu o meno complesse sulle feature che compongono
l’istanza stessa. Nasce quindi il problema dell’interpretabilita del classifi-
catore: avere un modello che classifichi stupendamente, ma che non sia in
grado di spiegarci (almeno in termini comprensibili) il fenomeno sottostante,
spesso non ci basta. Nei casi in cui abbiamo bisogno di regole interpretabili,
le quali portano poi alla classificazione di un pattern, dobbiamo ricorrere agli
alberi di decisione (decision trees, DT ).
80
Introdotti dall’australiano Quinlan [20], hanno avuto un ottimo successo
ed hanno subito diverse evoluzioni. La prima versione del software implemen-
tante i DT fu ID3, negli anni ’80: in ID3 si potevano utilizzare solo variabili
di tipo qualitativo, l’albero era solo binario (2 sotto–alberi per nodo al mas-
simo) e l’algoritmo di apprendimento era piuttosto lento. Ciononostante, la
distribuzione gratuita del software1 (realizzato in C++) favorı la diffusione
di ID3.
Agli inizi degli anni ’90 nacque poi C4.5: evoluzione di ID3 (in verita, di
una versione intermedia fra i due freeware, ovvero M5), era in grado di gestire
i missing e le variabili continue (solo con split di tipo binario, dopo sara tutto
piu chiaro). Inoltre, veniva introdotto un nuovo algoritmo di apprendimento,
piu rapido, e la fase di pruning (che ci riserviamo di analizzare nei prossimi
paragrafi), che favorisce la generalizzazione del modello trovato. C4.5 ha
subito, nel corso degli anni, svariate migliorie, che hanno portato alla nascita
di una nuova versione del software per DT: Quinlan ha voluto mantenere il
nome C4.5, ma qualcuno ha ridefinito questa ulteriore release come C4.5+
o, piu comunemente, C4.8 (in quanto si trattava dell’ottava release di C4.5).
Anche C4.5 (o C4.8 che dir vogliate) e disponibile free in rete sulla homepage
di Quinlan. Tra le novita in C4.8, la possibilita di gestire split multipli su
variabili continue e alcune nuove implementazioni per favorire l’esecuzione
parallela su piu processori.
Ultima evoluzione, non piu free ma commerciale, See5/C5.0: migliora-
menti al codice hanno portato ad un algoritmo piu veloce e che necessita di
meno memoria durante l’esecuzione. Non solo: nuovi algoritmi di pruning
migliorano le caratteristiche di generalizzazione in molti casi reali.
Come detto, il vantaggio dei DT e l’output dell’apprendimento: un mo-
dello sotto forma di regole if...then...else, dove gli if sono semplicemente
condizioni sul valore degli attributi. Un esempio di DT grafico e riportato in
Fig. 4.9. Spesso, l’interpretabilita va a scapito di prestazioni e, soprattutto,
generalizzazione nei casi reali. Tutto sara piu chiaro dopo aver analizzato in
breve l’algoritmo di learning.
1http://www.rulequest.com/Personal/
81
Figura 4.9: Esempio di Decision Tree.
4.5.2 Apprendimento
Analizziamo l’algoritmo di apprendimento per C4.5 in versione origina-
le, in quanto decisamente piu semplice: solo alla fine di questo paragrafo
chiariremo le differenze e le novita di C4.8. L’apprendimento consiste di due
step:
• crezione dell’albero;
• pruning dell’albero.
Creazione dell’albero
Per capire bene l’apprendimento di un DT, dobbiamo partire col definire
alcune quantita. Al fine di comprendere meglio i parametri che andremo
a presentare, faremo degli esempi riferiti al dataset weather, presentato in
formato testuale in Tab. 4.2.
Definiamo come XG il dataset weather. Data una distribuzione di proba-
bilita di una variabile, per esempio la distribuzione relativa di un attributo,
si definisce informativita di una variabile la quantita
I(P ) = −∑
i
pi log2 pi, (4.46)
82
Meteo Temperatura Umidita Vento Giocare a golf?
sunny 85 85 FALSE no
sunny 80 90 TRUE no
overcast 83 86 FALSE yes
rainy 70 96 FALSE yes
rainy 68 80 FALSE yes
rainy 65 70 TRUE no
overcast 64 65 TRUE yes
sunny 72 95 FALSE no
sunny 69 70 FALSE yes
rainy 75 80 FALSE yes
sunny 75 70 TRUE yes
overcast 72 90 TRUE yes
overcast 81 75 FALSE yes
rainy 71 91 TRUE no
Tabella 4.2: Dataset weather.
equivalente all’entropia della variabile. L’informativita del nostro dataset, in
particolare, equivale all’informazione necessaria ad identificare una classe nel
nostro dataset. In termini matematici, vale
Info(X) = I(PX) = −k∑
i=1
pi log2 pi, (4.47)
con k che rappresenta il numero di classi. Ad esempio, nel dataset del golf
abbiamo 9 esempi appartenenti alla classe “yes” e 5 alla “no”. Pertanto,
abbiamo
Info (XG) = − 9
14log2
9
14− 5
14log2
5
14≈ 0.94. (4.48)
L’informativita e massima se le classi sono equidistribuite ed e minima se
una classe e assente.
Supponiamo per il momento di avere a disposizione solo variabili quali-
tative. Se dividiamo il nostro dataset X sulla base dei valori assunti da una
particolare variabile v, possiamo calcolare l’informativita del nostro dataset
relativamente alle partizioni che andiamo a calcolare. In pratica, vogliamo
calcolare l’informazione necessaria per identificare una classe in X, dopo che
83
un particolare valore di una variabile qualitativa e stato determinato. Ipo-
tizzando che la variabile possa assumere n valori vi, i = 1, ..., n, possiamo
definire in breve Info(v, X):
Info(v, X) =
n∑i=1
‖Xi‖0
‖X‖0
· Info (Xi) , (4.49)
nella quale Xi rappresentano i subset di X in cui un certo valore vi si mantiene
costante e la norma–0 ‖·‖0 e definita come la cardinalita di un dataset, ovvero
il numero di pattern che sono in esso contenuti. Nell’esempio del golf, per
l’attributo meteo possiamo calcolare l’informativita relativa:
Info(v, XG) =5
14·I(
2
5,3
5
)+
4
14·I(
4
4, 0
)+
5
14·I(
3
5,2
5
)≈ 0.694. (4.50)
Infine, vogliamo trovare il guadagno, in termini di informativita, nell’in-
troduzione della variabile v rispetto all’identificazione a priori di una classe.
Il guadagno viene definito come:
Gain(v, X) = Info(X) − Info(v, X). (4.51)
Nel caso del meteo, otteniamo dalle Eqq. (4.48) e (4.50)
Gain(v, XG) = 0.94 − 0.694 ≈ 0.246. (4.52)
Si potrebbe mostrare che il guadagno della variabile vento e circa 0.094,
quindi l’introduzione nell’analisi di meteo porta ad un vantaggio maggiore
rispetto all’introduzione di vento. Il guadagno sara esattamente la quantita
che guidera la creazione del nostro albero.
Talvolta, in alternativa al guadagno, si utilizza il guadagno normalizzato,
definito come:
GainRatio(v, X) =Gain(v, X)
SplitInfo(v, X), (4.53)
dove la quantita SplitInfo(v, X) e definita sulla base dell’informativita do-
vuta allo splitting del dataset in subset nei quali una variabile qualitativa
mantiene valore costante:
SplitInfo(v, X) = I
(‖X1‖0
‖X‖0
,‖X2‖0
‖X‖0
, ...,‖Xn‖0
‖X‖0
). (4.54)
84
Non ci rimane che generalizzare le quantita precedenti al caso di variabili
quantitative. Per quanto riguarda le feature discrete, se il numero di livelli
non e enorme si puo supporre tali attributi come se fossero qualitativi ordi-
nali. In caso contrario o per variabili continue, si segue questa procedura.
Si suppone che la variabile possa assumere solamente i valori presenti nel
dataset, ottenendo quindi un insieme vi, i = 1, ..., h. A questo punto, la
variabile continua dev’essere suddivisa (split) in due subset. Per trovare il
valore ottimo di split, si considerano tutti i vi e si calcolano tutti i guadagni
(eventualmente normalizzati) per i dataset splittati. Il punto di split che ga-
rantisce guadagno ottimo viene assunto come valore di riferimento, e il Gain
cosı calcolato diviene il guadagno dell’attributo, che, a quel punto, diviene
una sorta di variabile qualitativa a tutti gli effetti.
L’algoritmo di apprendimento, a questo punto, procede con chiamate
ricorsive alla funzione di creazione dell’albero (ipotizziamo di utilizzare Gain,
ma anche con il valore normalizzato non cambia assolutamente nulla), routine
che definiamo createTree e il cui schema e il seguente:
1. se il set di dati passato in ingresso contiene solo dati appartenenti ad
una stessa classe, si inserisce una foglia corrispondente a tale classe e
si ritorna il controllo al chiamante;
2. se nel set di dati non sono piu presenti feature, ma solo il target, si inse-
risce una foglia corrispondente al classe con frequenza assoluta maggiore
nel set e si ritorna il controllo al chiamante;
3. calcoliamo i Gain per tutti gli attributi;
4. sia v∗ l’attributo con Gain massimo. Tale feature puo assumere h
valori;
5. si creano gli h subset di dati contenenti ognuno un valore costante di
v∗. In essi, si elimina la feature v∗ dal set;
6. per ognuno di essi, si crea un ramo dell’albero e si lancia la funzione
createTree.
Una volta conclusa l’operazione, abbiamo generato l’albero. La principale
differenza in C4.8 sta nella possibilita di non eliminare al passo 5 la variabile
dai subset se essa e continua: questo permette split multipli sui valori delle
85
variabili continue. Questa scelta e stata talvolta criticata, ma permette di
migliorare almeno parzialmente le performance del DT in casi in cui C4.5
andava profondamente in crisi, ovvero quando il numero di feature era molto
piu alto del numero di pattern.
Notiamo che, se ci bloccassimo a questo punto, di fatto overfitteremmo
moltissimo il training set, cosa che non vogliamo. L’unica (e molto parziale)
generalizzazione e infatti contenuta nel passo 2, quando scegliamo la classe
di una foglia sulla base della classe piu frequente. Il pruning viene proprio
utilizzato per favorire la generalizzazione dell’albero.
Pruning
Letteralmente, si traduce con potare: in effetti, rami dell’albero vengono
tagliati per favorire la generalizzazione del DT. Premesso che in letteratura
esistono innumerevoli tecniche per il pruning, una semplice strategia consiste
nel stimare l’errore nel caso di eliminazione di una parte dell’albero rispetto al
mantenimento della stessa. Se l’errore stimato e sotto una certa soglia, e con-
siderato accettabile e il sotto–albero viene prunato; in caso contrario, viene
mantenuto. La stima dell’errore avviene utilizzando la formula di Laplace:
err =l − n + k − 1
l + n, (4.55)
nella quale l e il numero di pattern contenuti nel subset riferito ad un nodo,
n e il numero di pattern del subset afferenti alla classe maggioritaria c e k e
il numero totale di classi. Se err e sotto la soglia, detta fattore di confidenza,
si sostituisce il sotto–albero con una foglia corrispondente alla classe c.
4.5.3 Fase in avanti
Nella fase in avanti, si applicano semplicemente le regole, trovate durante
l’apprendimento, ad ogni nuovo pattern: l’uscita corrispondera alla foglia
individuata nel tree mediante tali regole.
4.5.4 Estensione al caso multiclasse
Come gia per NBC, MLP e 0–R, i DT sono nativamente multiclasse,
quindi non necessitano di estensioni.
86
4.5.5 Esempio di analisi in WEKA
Avviato WEKA explorer, consideriamo weather e, nel tab per la classifi-
cazione, selezioniamo i DT. In particolare, dovremo andare nella sottocatego-
ria “trees”, nella quale C4.8 (WEKA utilizza questa versione) e identificato
come J4.8 (in quanto realizzato in Java e non in C++). Le opzioni a nostra
disposizione sono:
• “binarySplits” forza split di tipo binario anche su variabili qualitati-
ve. Permette, di fatto, il ritorno a ID3. A noi interessa C4.8, quindi
manterremo a false questa opzione;
• “confidenceFactor” e il fattore di confidenza per il pruning: piu basso
e, piu l’albero viene prunato. Valori tra 0.15 e 0.30 di solito sono i piu
gettonati. Noi per ora settiamo 0.25;
• “debug” sono le solite stampe di debug;
• “minNumObj” permette di settare il numero minimo di istanze prima
di fissare una foglia nell’albero. Normalmente, si setta a 2;
• “numFolds” e il numero di fold per una tecnica di pruning efficace ma
complessa, la reduced error pruning, che non abbiamo analizzato;
• “reducedErrorPruning” e la citata tecnica. Settiamo a false;
• “saveInstanceData” permette di salvare i dati di training nella visua-
lizzazione dell’albero;
• “seed” e il seed per l’algoritmo di random per la reduced error pruning;
• “subtreeRaising” permette all’algoritmo di pruning di valutare la modi-
fica dei sotto–alberi al fine di migliorare le performance. Normalmente,
e settato a true;
• “unpruned” e utilizzato per disattivare il pruning (false);
• “useLaplace” permette di usare l’indice di Laplace per il pruning. Da-
to che spesso e un indice troppo conservativo, talvolta si disattiva
l’opzione. Anche noi, in effetti, la setteremo a false.
87
Lanciamo l’analisi e otteniamo ottimi risultati, paragonabili a quelli che
solo una SVM non lineare era riuscita a raggiungere. Anche scegliendo come
dataset iris, i risultati sono ottimi: solamente 3 errori e una Kappa molto
vicina a 1 (0.97). C’e inoltre da considerare che il DT ci fornisce anche
l’interpretabilita del modello, come mostrato in Fig. 4.10, quindi i parametri
di controllo sulla forma del sepalo e petalo del fiore: potrebbe esserci utile.
Per attivare la visualizzazione dell’albero, cliccate col tasto destro sul modello
nel menu “Result list” e selezionate la visualizzazione dell’albero.
Figura 4.10: Albero di decisione per il dataset iris.
88
Sappiamo, pero, che uno dei principali difetti di C4.8 e la capacita di
generalizzazione. Pertanto, l’ultima prova consiste nell’utilizzo di 100 dati
di training e 50 di validation. Lasciando inalterati i settaggi, si ottengono
2 errori sul validation: un ottimo risultato. Per controllare se il pruning
ha influenza su questo risultato, settiamo a true l’opzione “unpruned” e
analizziamo i risultati: commettiamo nuovamente soli 2 errori, il che significa
che gia il DT originale forniva un’ottima interpretazione del dataset.
89
Capitolo 5
Regressione
Terminata la nostra rassegna sugli algoritmi per la classificazione, passia-
mo al problema della regressione. Anche in questo caso, supporremo di avere
sempre a disposizione un dataset X, per il quale abbiamo definito un target
y ∈ � di tipo numerico. L’obiettivo che ci prefiggiamo e trovare una relazione
fra feature e target per calcolare un output di tipo analogico efficace e con
un basso errore nella fase in avanti. Per verificare le prestazioni del nostro
modello, utilizzeremo i gia analizzati RMSE e MAE ed introdurremo l’uti-
lizzo del coefficiente di correlazione r (vedi paragrafo 3.3) tra le uscite reali
del nostro training o volidation set e quelle stimate dal modello: ricordiamo
che r ∈ [−1, 1] e r = 0 indica correlazione minima (e prestazioni pessime).
5.1 Zero Rules
Abbiamo analizzato nel paragrafo 4.1 il classificatore elementare 0–R.
Chiameremo, per evitare confusione, 0–RR il regressore Zero Rules.
5.1.1 Apprendimento
Analogamente a quanto visto per la classificazione, 0–RR utilizza come
uscita del modello la media dei target numerici del training set.
5.1.2 Fase in avanti
Qualunque sia l’ingresso al sistema, 0–RR restituisce come uscita stimata
la media dei target del training set.
90
5.1.3 Esempio di analisi in WEKA
E facile attendersi che la qualita di questo regressore sia davvero bassa; in
effetti, e proprio cosı. Lanciamo WEKA explorer e selezioniamo come dataset
per la regressione CPU (file cpu.arff ): tramite 6 attributi (caratteristiche di
alcune CPU), si cerca di stimarne le performance. Anche per la regressione
utilizzeremo il tab “classify” (WEKA non fa distinzione di sorta).
Per utilizzare 0–RR, selezioniamo l’algoritmo “ZeroR” (lo stesso usato nel
paragrafo 4.1.4) e lanciamo l’analisi. Il coefficiente di correlazione ottenuto e
pari a 0, il minimo possibile, e l’errore (sia in termine di MAE che di RMSE) e
molto alto. D’altra parte, il sistema stima sempre, a prescindere dal pattern
in ingresso, un’uscita y ≈ 99.33. Se forziamo WEKA a stampare a video
anche le uscite del nostro training set, notiamo che ci sono anche valori come
−800, per i quali commettiamo un errore enorme. E quindi facile immaginare
che 0–RR (come il suo omologo 0–R) sia davvero poco usato.
5.2 Support Vector Regression
La Support Vector Regression (SVR) si basa sugli stessi principi della
SVM, con la quale condivide anche il principale autore [23]. L’idea di base
e quella di cercare una funzione ignota y = f(x) che sia caratterizzata da
un errore basso (ma non nullo) rispetto ai dati di training. Esistono svariati
metodi per il calcolo dell’errore, ma noi analizzeremo solo uno dei piu usati
(nonche quello utilizzato da WEKA): la ε–insensitive loss function, per la
quale viene definita
|z|ε =
{0 se |z| < ε
|z| − ε se |z| ≥ ε. (5.1)
L’inconveniente di tale funzione di errore sta nel fatto che aggiungiamo un
nuovo iperparametro, ε, da settare in modo appropriato.
Il problema primale della SVR viene definito come [22]:
91
minw,b,ξ,ξ∗
1
2‖w‖2 + C
l∑i=1
(ξi + ξ∗i ) (5.2)
yi − (w · x + b) ≤ ε + ξi ∀i ∈ [1, . . . , l] (5.3)
(w · x + b) − yi ≤ ε + ξ∗i ∀i ∈ [1, . . . , l] (5.4)
ξi, ξ∗i ≥ 0 ∀i ∈ [1, . . . , l] (5.5)
ovvero in una forma sostanzialmente identica alla SVM a meno dell’introdu-
zione di una doppia variabile di slack affinche la stima dell’output yi possa
essere sia minore che maggiore rispetto all’output reale yi. In Fig. 5.1, pre-
sentiamo un esempio grafico che dovrebbe meglio chiarire il significato del
doppio slack.
Figura 5.1: Rappresentazione grafica della ε–insensitive loss function.
Il problema duale di SVR puo essere calcolato in maniera analoga a quan-
to visto per la SVM utilizzando il metodo dei moltiplicatori di Lagrange,
ottenendo:
minα,α∗
{12
∑li=1
∑lj=1 (αi − α∗
i )(αj − α∗
j
)K(xi, xj)+
−ε∑l
i=1 (αi + α∗i ) +
∑li=1 yi (αi − α∗
i )(5.6)
0 ≤ αi, α∗i ≤ C ∀i ∈ [1, . . . , l] (5.7)
l∑i=1
(αi − α∗i ) = 0. (5.8)
5.2.1 Apprendimento
Tramite passaggi non troppo complessi, per i quali rimandiamo a [22],
e possibile ricondurre il problema (5.6) alla formulazione duale (4.34) della
92
SVM, pertanto risolvibile usando SMO. Ed e infatti proprio questo algorit-
mo che utilizzeremo per trovare la soluzione ottima, che nel caso di SVR
comprende sia α che α∗, oltre, ovviamente, al bias, calcolabile sfruttando le
KKT.
5.2.2 Fase in avanti
Anche la fase in avanti della SVR ricorda molto da vicino la funzione
feedforward di SVM. Nella fattispecie, vale:
y = f(x) =
l∑i=1
(αi − α∗i )K (x, xi) + b. (5.9)
5.2.3 Esempio di analisi in WEKA
Lanciamo WEKA explorer, selezionando CPU come dataset. Nel tab di
classificazione, selezioniamo “SMOreg” dalla sottocategoria “functions” per
selezionare la SVR. Le opzioni sono sostanzialmente le stesse della SMO per
la classificazione, per le quali rimandiamo al paragrafo 4.4.6. Unico cam-
biamento, l’aggiunta dell’opzione “epsilon” per la tolleranza dell’omonima
ε–insensitive loss function: setteremo ε = 0.001.
Partiamo con un kernel lineare e C = 1. Lanciamo l’analisi e otteniamo
risultati di sicuro buoni, ma non esaltanti: l’errore presenta un miglioramento
in termini assoluti pari a circa il 78% rispetto a 0–RR, e il coefficiente di
correlazione e oltre 0.9. Con un kernel gaussiano possiamo fare di meglio?
Settiamo γ = 1 e otteniamo un errore veramente piccolo (miglioramento in
termini assoluti del 98% rispetto a 0–RR) e un coefficiente di correlazione
sostanzialmente equivalente a 1. Portiamo γ = 100: otteniamo addirittura
r = 1 e un errore quasi nullo. Davvero un’ottima performance.
5.3 Regression Trees
5.3.1 Apprendimento
I Regression Trees (RT) ricordano non solo nel nome i DT: infatti, l’al-
goritmo di apprendimento e assolutamente identico a quanto analizzato nel
paragrafo 4.5.2. L’unica differenza consta nello stabilire il valore di una foglia:
93
se, nel caso dei DT, si sceglieva la classe maggioritaria, nei RT si considera
la media dei target del subset “sopravvissuto” ai precedenti split.
5.3.2 Fase in avanti
Anche per la fase feedforward, rimandiamo alla discussione sui DT e, in
particolare, al paragrafo 4.5.3.
Alcune considerazioni vanno fatte, invece, sulle performance dei RT, spes-
so insufficienti in molti casi reali. Anche lo stesso Quinlan ha portato avanti
i RT parallelamente ai DT a partire dall’algoritmo M5 (sviluppato prima di
C4.5) fino a C4.5 stesso. Da C4.8 in poi, date le scarse performance degli RT
(specie in dataset caratterizzati da un alto rapporto fra numero di pattern e
numero di attributi), essi non sono stati piu inclusi nei pacchetti distribuiti
in rete.
5.3.3 Esempio di analisi in WEKA
Anche WEKA risente dell’abbandono nello sviluppo dei RT in C4.8: il
gia citato algoritmo J4.8 non contempla la possibilita di creare un albero per
regressione. A causa di cio, utilizzeremo l’algoritmo piu vecchio (M5) [19],
reso (parzialmente) piu performante da alcune migliorie in stile C4.8 [24]: tra
queste, l’utilizzo di un problema di regressione lineare sulle foglie al posto
della media. Rimandiamo agli articoli citati per coloro che volessero maggiori
dettagli: le differenze nel learning rispetto a C4.5/C4.8 sono minime.
Sono minime anche le differenze in WEKA rispetto alle opzioni per J4.8:
selezionato l’algoritmo “M5P” (dove ‘P’ indica Plus, ovvero dotato delle mo-
difiche apportate in [24]), i parametri da settare sono quelli analizzati nel
paragrafo 4.5.5; unica aggiunta, il parametro che regola l’implementazione di
un RT “buildRegressionTree” (per noi, sara true). Merita una nota aggiun-
tiva il parametro “minNumIstances”: se nel caso dei DT avevamo settato
tale parametro a 2, ora conviene aumentare il numero minimo di istanze ne-
cessarie per consentire un ulteriore split. Se, infatti, nel calcolo del valore di
una foglia dovessero rimanere troppi pochi pattern, il valore mediato potreb-
be essere di poco significato. Un buon valore puo essere considerato 4; con
tanti pattern, meglio aumentare ulteriormente tale limite (ma non troppo,
altrimenti potremmo addirittura non riuscire a creare l’albero). L’opzione
“useUnsmoothed” equivale alla “useLaplace” dei DT.
94
Lanciamo l’analisi su CPU e otteniamo un errore piuttosto alto: ottenia-
mo un miglioramento pari circa al solo 60% rispetto a 0–RR e il coefficiente
di correlazione non e alto (circa 0.8).
SVR sembra il miglior algoritmo per la regressione: lo sara anche su un
validation set, separato dal training set? Trascurando 0–RR, di sicuro pessi-
mo, utilizziamo il 67% dei dati per il training e il restante come validation.
Con RT, otteniamo sul validation i tre seguenti valori:
• r = 0.85;
• errore MAE relativo a 0–RR: 44.21%;
• errore RMSE relativo a 0–RR: 54.89%.
Lanciamo SVR con kernel gaussiano e i parametri identificati nel para-
grafo 5.2.3. I valori ottenuti sono decisamente migliori:
• r = 0.97;
• errore MAE relativo a 0–RR: 18.08%;
• errore RMSE relativo a 0–RR: 22.86%.
95
Capitolo 6
Clustering
Altro problema interessante da affrontare in ottica BI e il clustering : esso
consiste nel raggruppamento di elementi omogenei in un insieme di dati. Le
tecniche di clustering si basano sul concetto di distanza, che risulta quindi
centrale nell’analisi: elementi “vicini” (secondo una certa metrica) sono da
considerarsi omogenei e vanno inseriti nello stesso cluster; pattern eterogenei
saranno “distanti” ed inclusi in differenti insiemi.
Le tecniche di clustering vengono utilizzate spesso quando si hanno a
disposizione dati eterogenei e si e alla ricerca di elementi anomali: un caso
tipico riguarda le compagnie telefoniche, le quali utilizzano le tecniche di
clustering per cercare di individuare in anticipo gli utenti che diventeranno
morosi. Essi, infatti, tendono ad avere un comportamento diverso rispetto
alla normale utenza e le tecniche di clustering riescono sovente ad individuarli
o almeno a definire un cluster, nel quale vengono concentrati tutti gli utenti
che hanno un’elevata probabilita di diventare morosi.
Per il clustering, in generale, non avremo a disposizione un target, ma
semplicemente un dataset X, composto da un certo numero di feature. Spesso
non si conosce nemmeno il numero di cluster k a priori: in questo caso,
k diviene una sorta di iperparametro, il cui valore ottimo va ricercato per
tentativi.
6.1 k–Means
Per quanto riguarda il clustering, analizzeremo solo un algoritmo: il k–
means. E un algoritmo piuttosto semplice, ma spesso efficace. Negli ultimi
96
anni sono stati sviluppati anche algoritmi piu complessi, ma un po’ per motivi
di tempo e un po’ per gli scarsi miglioramenti conseguiti tralasceremo tali
metodi.
6.1.1 Apprendimento
L’algoritmo per l’apprendimento e di tipo iterativo e necessita di due
ingressi (oltre al training set X, ovviamente):
• una metrica di distanza tra pattern: spesso viene usata la distanza eu-
clidea ‖x1 − x2‖22. Ovviamente, usando tale distanza i cluster avranno
forma di (iper)sfere, il cui centro viene detto centroide;
• il numero di cluster k < l (se non disponibile, bisogna procedere per
tentativi), dove l e il numero di pattern di training.
La funzione che intendiamo minimizzare e:
CKM = minμ1,...,μk
k∑i=1
∑xj∈Sj
∥∥xj − μj
∥∥2
2, (6.1)
dove μj, j = 1, ..., k, indicano i k centroidi e Sj sono i k cluster. In generale,
il centroide non e un punto del training set, ma viene individuato mediando
la posizione dei punti appartenenti al cluster; nel caso in cui non si usi la
media delle coordinate dei punti del cluster, bensı la mediana, si parla di
k–medoids, di cui noi non ci occuperemo.
L’algoritmo viene inizializzato scegliendo k centroidi randomicamente tra
i punti del training set. A questo punto, l’apprendimento procede seguendo
questi step:
1. si calcolano i cluster, assegnando ogni pattern al cluster il cui centroide
dista meno;
2. si modificano i centroidi, ricalcolandoli sulla base dei nuovi punti ap-
partenenti al cluster;
3. se i centroidi non sono stati modificati (o hanno subito un cambiamento
inferiore ad una certa soglia), l’algoritmo termina; altrimenti si procede
dal punto 1.
97
Ovviamente, la qualita del risultato dipende anche dall’inizializzazione ran-
domica dei centroidi: per questo motivo, e spesso preferibile lanciare diverse
istanze di k–means, partendo da centroidi differenti. Alla fine, si opta per la
configurazione a CKM minimo.
6.1.2 Fase in avanti
La fase feedforward del k–means consiste, per un nuovo pattern x, nel
calcolarne la distanza dai centroidi e nell’attribuirlo al cluster il cui centroide
dista meno.
6.1.3 Esempio di analisi in WEKA
In WEKA non esistono dataset creati ad hoc per il clustering; d’altra
parte, e possibile utilizzare alcuni dataset, originalmente creati per la classi-
ficazione, e vedere come si comporta il k–means in questi casi. Tra l’altro,
per questi dataset conosciamo il numero di cluster, essendo coincidente con
il numero di classi.
Iniziamo con il gia noto iris e selezioniamo il tab “Cluster”; tra i me-
todi disponibili, optiamo per il “SimpleKMeans”, le cui opzioni riguardano
semplicemente il numero di cluster (per iris, k = 3) e il seed per l’algorit-
mo di inizializzazione random (inizialmente, lasciamo 10). Essendo il nostro
dataset iris nato per algoritmi di classificazione, selezioniamo tra i “Cluster
mode” l’opzione “Classes to cluster evaluation”, che ci offre un termine di
paragone diretto con la classificazione nell’output dei risultati.
L’output del k–means per la nostra analisi e il seguente:
Number of iterations: 6
Within cluster sum of squared errors: 6.99811
Cluster centroids:
Cluster 0
Mean/Mode: 5.8885 2.7377 4.3967 1.418
Std Devs: 0.4487 0.2934 0.5269 0.2723
Cluster 1
Mean/Mode: 5.006 3.418 1.464 0.244
98
Std Devs: 0.3525 0.381 0.1735 0.1072
Cluster 2
Mean/Mode: 6.8462 3.0821 5.7026 2.0795
Std Devs: 0.5025 0.2799 0.5194 0.2811
ovvero ci viene presentato il numero di iterazioni totale, l’errore quadratico
intra–cluster (di fatto, il costo CKM) e i centroidi dei cluster, sotto forma di
media (o moda nel caso di variabili qualitative) e varianza (usata piu che altro
come indice di stabilita del centroide). Segue, quindi, il numero di pattern
del training set assegnato ad ogni cluster e una sorta di Confusion Matrix
riferita ai cluster. Conclude l’elenco dei risultati il numero e la percentuale
di assegnazioni errate ai cluster (misurate sulla base dell’appartenenza alle
varie classi). Nel caso di iris abbiamo l’11.3% di errore (valore alto, se riferito
a quelli ottenuti nel capitolo 4).
Proviamo a modificare il seed e settiamolo a 356 (un valore a caso): otte-
niamo gli stessi risultati dell’esecuzione precedente. Si possono provare molti
valori di seed e vedere se la percentuale precedente migliora. Un’ultima nota:
dall’analisi della pseudo–Confusion Matrix, si evince che la classe 0 (“Iris–
setosa”) viene sempre clusterizzata in modo perfetto e quindi, probabilmente,
e facilmente distinguibile dalle altre due classi.
In fase di introduzione a questo capitolo, abbiamo detto che spesso il clu-
stering e utilizzato per trovare clienti morosi: in WEKA, e incluso il dataset
labor, per classificazione binaria, in cui, sulla base del profilo di alcuni lavo-
ratori, si prova a stimare se essi siano dei buoni lavoratori o meno. Proviamo
ad applicare il k–means, con k = 2 e seed pari a 10: sbagliamo nel 23% circa
dei casi. Non solo, tali errori sono particolarmente gravi, in quanto quasi
per intero si riferiscono a cattivi lavoratori che vengono, invece, caratteriz-
zati nella classe “good”. Proviamo a cambiare seed, settandolo a 1000: la
situazione peggiora (passiamo quasi al 40% di errore), e questa volta siamo
troppo “cattivi” (consideriamo troppi lavoratori come “bad”). Causa di que-
ste scarse performance potrebbe essere la presenza di molti missing tra i dati
di labor.
99
Capitolo 7
Association rules
Uno dei primi esempi che abbiamo presentato in queste dispense riguar-
dava la catena di supermercati, in cui volevamo cercare possibili associazioni
fra prodotti (o fra prodotto e acquirente) per regolamentare la disposizione
delle merci nei nostri supermercati. In questi casi, e in moltissimi altri nella
vita di tutti i giorni prima ancora che nel mondo della BI, e necessario tro-
vare regole che leghino fra loro alcune variabili; in termini di Data Mining,
dobbiamo trovare eventuali relazioni causali tra feature che descrivono una
qualche entita.
Gli algoritmi per trovare association rules ricevono, in ingresso, un data-
set X, composto da l pattern e m feature, senza alcun target: l’obiettivo e
trovare relazioni del tipo if x1 = 10 ∨ x6 > 33 then x3 = false, ovvero relazioni
di causalita, similmente a quanto visto per i DT. In questo caso, a differenza
degli alberi, pero, il nostro obiettivo non e trovare una sorta di “percorso
ottimo” che, dagli ingressi, attraverso un certo numero di regole ci porti verso
le uscite, bensı vogliamo trovare un qualsiasi legame che colleghi in qualche
modo due o piu feature del nostro dataset. In termini meno informali, diremo
che, mentre i DT erano un metodo supervised (sapevamo cosa volevamo
trovare, ovvero il target), gli algoritmi di association rules sono unsupervised,
in quanto partiamo dal principio di non conoscere nulla del nostro dataset e di
voler cercare di ottenere informazioni attraverso l’applicazione di un qualche
algoritmo. Non solo: nel caso delle association rules l’algoritmo si conclude,
di fatto, con la fase di apprendimento, in quanto una vera fase in avanti non
esiste. Infatti, cio che ci interessa non e trovare un modello da applicare a
run–time, ma solo identificare relazioni all’interno di X. Per questo motivo,
100
non definiremo per l’algoritmo che analizzeremo alcun indice di qualita, in
quanto non definibile di per se.
Esistono diversi algoritmi per trovare le regole di associazioni tra feature:
noi analizzeremo uno dei piu usati, Apriori. A prescindere dall’algoritmo che
si vuole usare, normalmente le implementazioni di association rules preve-
dono di trattare solo feature di tipo qualitativo: qualora avessimo variabili
quantitative, dovremo procedere ad una discretizzazione ad hoc, magari uti-
lizzando le tecniche gia brevemente analizzate per i DT (si veda paragrafo
4.5.2).
7.1 Apriori
Apriori [1] e uno degli algoritmi in assoluto piu utilizzati e si basa su
alcune quantita, piuttosto semplici da calcolare. Le regole che verranno tro-
vate saranno nella forma if A then B, rappresentate alternativamente come
A → B, dove A e detto antecedente o body mentre B e detto conseguente o
head. Al fine di chiarire meglio alcuni concetti, utilizzeremo come esempio il
dataset weather : dato che esso contiene, nella sua forma originaria, alcune
variabili quantitative, utilizzeremo la versione discretizzata di queste ultime.
Per semplicita, proponiamo il dataset in Tab. 7.1.
7.1.1 Apprendimento
Partiamo con alcune definizioni. Viene detto supporto la percentuale di
pattern nel dataset per le quali una determinata condizione e verificata:
support(A) =lAl
, (7.1)
dove lA rappresenta il numero di pattern in cui la condizione A e soddisfatta
e l il numero totale di pattern nel dataset. Ad esempio, nel dataset di Tab.
7.1, abbiamo:
support(meteo = rainy) =5
14≈ 0.36. (7.2)
Talvolta, il supporto viene inteso in termini assoluti e non relativi: in tal
caso, non si divide per l. Ad esempio, per il caso della condizione meteo =
rainy, avremmo un supporto pari a 5.
101
Meteo Temperatura Umidita Vento Giocare a golf?
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cold normal FALSE yes
rainy cold normal TRUE no
overcast cold normal TRUE yes
sunny mild high FALSE no
sunny cold normal FALSE yes
rainy mild normal FALSE yes
sunny mild normal TRUE yes
overcast mild high TRUE yes
overcast hot normal FALSE yes
rainy mild high TRUE no
Tabella 7.1: Dataset weather in forma discretizzata, con variabili solo di tipo
qualitativo.
102
Viene definita confidenza di una regola A → B il rapporto fra il supporto
della regola e il supporto dell’antecedente A:
confidence(A → B) =support(A → B)
support(A)=
lA→B
lA. (7.3)
Consideriamo la regola if (meteo = sunny) then play = yes e calcoliamone
la confidenza. Partiamo col definirne il supporto: e immediato calcolare
che support(meteo = rainy → play = yes) = 3/14 ≈ 0.21. Abbiamo gia
calcolato che il supporto dell’antecedente e circa uguale a 0.36. Pertanto, la
confidenza e:
confidence(meteo = rainy → play = yes) =3
5= 0.6. (7.4)
Infine, definiamo il lift di una regola A → B come il rapporto fra la
confidenza della regola e il supporto del conseguente, ovvero:
lift(A → B) =confidence(A → B)
support(B)=
support(A → B)
support(A)support(B). (7.5)
Ad esempio, si ottiene facilmente che lift(meteo = rainy → play = yes) ≈0.60.64
≈ 0.94. Si potrebbero definire altre quantita, talvolta utilizzate (leverage
e convinction su tutte), ma sono piuttosto complesse ed esulano dalla nostra
analisi. Ci interessa, invece, analizzare una misura, detta di significanza
(significance, interestingness): il chi–quadro (χ2), spesso utilizzata per il
ranking delle regole di associazione e definita come:
χ2(A → B) =(support(A → B) − support(A)support(B))2
support(A)support(B). (7.6)
Definite le principali quantita che dovremo considerare nella creazione
delle regole, diamo un’occhiata all’algoritmo. Apriori e un metodo iterativo,
che procede creando cosiddetti itemset, ovvero insiemi di regole per le qua-
li alcune condizioni sono verificate. Tipicamente, si pongono condizioni sul
supporto e sulla confidenza o, in alternativa a quest’ultima, sul lift. Un’ulte-
riore selezione puo essere fatta sul livello di significanza di una regola, usando
χ2. Supponiamo di aver definito una soglia di supporto minimo suppm e una
soglia di confidenza minima confm. Analizziamo i passi di Apriori.
103
Al primo passo, vengono considerati i supporti di tutte le possibili com-
binazioni di variabili presenti in X. Le combinazioni il cui supporto supera
suppm entrano a far parte dell’itemset 1.
Al passo successivo, si parte da tutte le relazioni dell’itemset 1, si tro-
vano tutte le loro possibili combinazioni e, per ognuna di esse, si calcolano
i supporti: entreranno a far parte dell’itemset 2 tutte le combinazioni che
superano la soglia di supporto.
Si procede iterativamente a creare itemset, fino a quando non si finiscono
le possibili combinazioni e/o nessuna nuova combinazione ha un supporto
maggiore rispetto alla soglia. A questo punto, si trovano le prime regole, nelle
quali la relazione aggiunta nell’ultimo itemset risulta essere l’head mentre le
precedenti costituiscono il body. Ad esempio, se nell’ultimo itemset troviamo
una relazione del tipo:
humidity=normal windy=FALSE play=yes
play=yes costituira l’head e l’AND delle due relazioni precedenti (humidity=
normal e windy=FALSE) sara il body. Una volta terminate queste relazioni,
si continua a creare regole utilizzando le ultime due istanze come head (es.,
windy=FALSE e play=yes) e le restanti come body (es., humidity=normal).
Il passo successivo consiste nel ripetere queste operazioni per tutti gli itemset
precedenti, escluso l’itemset 1 (per il quale avevamo ancora solo una relazio-
ne). Alla fine, per ogni regola viene calcolata la confidenza e, se necessario, la
significanza: vengono prese in considerazione le sole regole aventi confidenza
maggiore di confm (e, se definita, significanza maggiore di una soglia χ2m).
7.1.2 Esempio di analisi in WEKA (I)
Abbiamo detto che spesso, per analisi di tipo association rules, neces-
sitiamo di dataset composti da variabili solo di tipo qualitativo. E questo
il caso di WEKA. Se vogliamo, quindi, cominciare le nostre analisi con un
dataset semplice quale weather, dobbiamo utilizzarne la versione composta
da sole variabili qualitative, cioe weather.nominal.
Nel tab “Associate”, selezioniamo il metodo “Apriori”, le cui opzioni
sono:
• “delta” rappresenta il decremento iterativo del supporto dal suo valore
massimo al suo valore minimo (settiamo 0.05);
104
• “lowerBoundMinSupport” e il minimo supporto necessario affinche un
insieme di relazioni venga ammesso in un itemset (0.3 e un buon valore);
• “metricType” definisce la metrica con cui vengono definite le regole
ammesse a far parte del set finale (useremo la confidenza);
• “minMetric” e il valore minimo della metrica necessario affinche la
regola venga inclusa nel set finale (settiamo 0.9);
• “numRules” e il numero massimo di regole richieste (ad esempio, 10
regole);
• “outputItemSets” stampa a video i vari itemset (e utile settarlo a true
per analizzare come funziona l’algoritmo);
• “removeAllMissingColumns” rimuove feature in cui sono presenti mis-
sing (false);
• “significanceLevel” e il livello di significanza minimo χ2 (disattiviamo
l’opzione settando -1);
• “upperBoundMinSupport” e il massimo supporto necessario (1);
• “verbose” produce alcune stampe di debug.
Lanciamo l’analisi e otteniamo le seguenti regole:
1. humidity=normal windy=FALSE 4 ==> play=yes 4 conf:(1)
2. temperature=cool 4 ==> humidity=normal 4 conf:(1)
3. outlook=overcast 4 ==> play=yes 4 conf:(1)
Avevamo richiesto 10 regole, ma solo 3 riescono a soddisfare i vincoli su
supporto e confidenza. Se abbassiamo il limite minimo per il supporto a 0.2,
otteniamo:
1. humidity=normal windy=FALSE 4 ==> play=yes 4 conf:(1)
2. temperature=cool 4 ==> humidity=normal 4 conf:(1)
3. outlook=overcast 4 ==> play=yes 4 conf:(1)
4. temperature=cool play=yes 3 ==> humidity=normal 3 conf:(1)
5. outlook=rainy windy=FALSE 3 ==> play=yes 3 conf:(1)
6. outlook=rainy play=yes 3 ==> windy=FALSE 3 conf:(1)
105
7. outlook=sunny humidity=high 3 ==> play=no 3 conf:(1)
8. outlook=sunny play=no 3 ==> humidity=high 3 conf:(1)
ovvero qualche regola in piu, ma a minore supporto (solo 3 esempi in tutto
il dataset).
7.1.3 Esempio di analisi in WEKA (II)
E se avessimo solamente a disposizione un dataset con variabili quantita-
tive? Perche non possiamo trovare relazioni, ad esempio, in iris? Per poter
utilizzare anche questi dataset, e necessario applicare un filtro ai dati stessi.
Nel tab di preprocessing dei dati, selezioniamo iris e optiamo per il filtro
“Discretize” nelle sottocategorie “unsupervised” e “attribute”. Le opzioni
del filtro sono:
• “attributeIndices” rappresenta l’elenco degli indici degli attributi nu-
merici da discretizzare (“last-first” indica che vogliamo discretizzare
tutti gli attributi, se numerici);
• “bins” rappresenta il numero di intervalli (per esempio, potremmo
settarlo a 5);
• “desiredWeightOfIstancesPerInterval” permette di settare un peso per
ogni pattern in ogni intervallo (disattiveremo l’opzione, settando -1);
• “findNumBins” ricerca automaticamente il numero di intervalli in cui
splittare una feature (tra 1 e il valore di “bins”). Settiamo true;
• “invertSelection” discretizza solo le variabili non selezionate nella prima
opzione (false);
• “makeBinary” binarizza le feature dopo averle discretizzate (false);
• “useEqualFrequency” trova gli intervalli sulla base di indici di frequenza
e non in intervalli di uguale dimensione (false).
Applichiamo il filtro e, quindi, lanciamo l’analisi di Apriori, richiedendo
un supporto minimo del 30%. Troviamo le seguenti regole:
106
1. petallength=’(-inf-2.18]’ 50 ==> class=Iris-setosa 50 conf:(1)
2. class=Iris-setosa 50 ==> petallength=’(-inf-2.18]’ 50 conf:(1)
3. petalwidth=’(-inf-0.58]’ 49 ==> petallength=’(-inf-2.18]’ class=Iris-setosa 49 conf:(1)
4. petallength=’(-inf-2.18]’ petalwidth=’(-inf-0.58]’ 49 ==> class=Iris-setosa 49 conf:(1)
5. petalwidth=’(-inf-0.58]’ class=Iris-setosa 49 ==> petallength=’(-inf-2.18]’ 49 conf:(1)
6. petalwidth=’(-inf-0.58]’ 49 ==> class=Iris-setosa 49 conf:(1)
7. petalwidth=’(-inf-0.58]’ 49 ==> petallength=’(-inf-2.18]’ 49 conf:(1)
8. petallength=’(-inf-2.18]’ 50 ==> petalwidth=’(-inf-0.58]’ class=Iris-setosa 49 conf:(0.98)
9. class=Iris-setosa 50 ==> petallength=’(-inf-2.18]’ petalwidth=’(-inf-0.58]’ 49 conf:(0.98)
10. petallength=’(-inf-2.18]’ class=Iris-setosa 50 ==> petalwidth=’(-inf-0.58]’ 49 conf:(0.98)
Siamo quindi in grado di trovare 10 regole anche su variabili quantitative: la
prima regola potrebbe infatti essere scritta anche come If petal length ≤ 2.18
then class = Iris–setosa.
Una nota conclusiva: avevamo notato gia nel capitolo sul clustering al
paragrafo 6.1.3 che, in iris, la classe Iris–setosa era particolarmente facile
da riconoscere: in effetti, Apriori ci spiega perche. Infatti, e sufficiente con-
trollare la lunghezza del petalo: se e sotto una certa cifra (2.18), abbiamo la
certezza (confidenza pari al 100%) che si tratti di questo tipo di fiore.
107
Capitolo 8
Valutazione comparativa di
algoritmi di Data Mining
8.1 Metodi (pratici) per la comparazione fra
algoritmi
Premettiamo subito che in questo capitolo non affronteremo davvero nei
particolari la comparazione fra algoritmi, che sarebbe davvero un argomen-
to difficile ed impegnativo, ne analizzeremo tutte le tecniche disponibili in
letteratura. Quello che intendiamo fare, invece, e proporre alcune sempli-
ci metodologie, che possono essere usate anche in WEKA e permettono di
ottenere velocemente semplici parametri di valutazione di metodi statistici.
8.1.1 Training set (TS)
Il primo metodo, il piu semplice, prevede la valutazione delle performance
di un algoritmo di DM sulla base del numero di errori che il modello commette
sul training set. E la tecnica che abbiamo utilizzato nelle nostre prime analisi
in WEKA. Il problema sta nel fatto che valutare le performance di un metodo
sugli stessi dati su cui e stato creato il modello puo portare ad overfitting:
per questo motivo, questa tecnica e davvero poco utilizzata.
108
8.1.2 Validation set (VS)
Molto piu appropriato per i nostri scopi e utilizzare un validation set
separato dal training set, che possiamo fornire in un file separato o ottenere
splittando in training e validation il dataset che abbiamo a disposizione.
Selezioneremo alla fine il modello che, istruito sul training set, meglio si
comporta sul validation set.
8.1.3 K–Fold Cross Validation (KCV)
La tecnica di valutazione forse piu usata e, pero, la k–Fold Cross Vali-
dation (KCV ): essa 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 usate per
l’apprendimento e la restante fold come validation: ad esempio, ipotizzando
10 fold, al primo passo useremo le fold dalla 1 alla 9 per il training e la 10
come validation; al secondo step, dalla 1 alla 8 e la 10 come training e la 9
come validation, e cosı via. Su ogni fold di validation, e possibile calcolare il
numero di errori ei, i = 1, ..., k. Alla fine, il parametro per il confronto tra
metodi sara pari a:
e =
∑ki=1 ei
l. (8.1)
Il vantaggio della KCV e che, se abbiamo un singolo dataset (quindi,
senza validation separato), non sprechiamo dati per il training, 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 e neces-
sario un rimescolamento casuale dei dati del dataset: questo per evitare che
una fold per il training sia costituita da soli dati di una classe, ad esempio.
Fissare k potrebbe essere considerato come una ricerca di iperparametro: in
verita, la pratica ha ampiamente dimostrato che k = 5 e k = 10 sono valori
ottimi da utilizzare.
109
Metodo Errore TS Errore test
NBC 18.33% 22.96%
MLP 2.33% 4.81%
SVM lin 3.27% 5.31%
SVM gauss 1.00% 2.84%
DT 1.00% 3.83%
Tabella 8.1: Risultati per il metodo training set (TS): in grassetto, le migliori
percentuali ottenute.
8.2 Analisi in WEKA explorer
Per le nostre prove, considereremo un dataset finora mai introdotto, seg-
ment, rappresentante porzioni di immagini da classificare in 7 classi sulla base
del materiale in esse rappresentato (erba, cemento,...). Il dataset e composto
da ben 1500 pattern, ma, cosa a noi ancor piu gradita, e incluso un test set:
cio significa che partiremo a confrontare metodi statistici per la classifica-
zione (NBC, MLP, SVM lineare, SVM gaussiana, DT), ne sceglieremo uno
per ogni tecnica di confronto (TS, VS, KCV) e verificheremo poi sul test set
quale si comportava meglio. In particolare, per SVM useremo C = 100 e, nel
caso di SVM gaussiana, γ = 1.
8.2.1 Metodo TS
Carichiamo il dataset di training in WEKA explorer. Partiamo con il
TS. I risultati sono presentati in Tab. 8.1: i metodi migliori appaiono essere
la SVM gaussiana e gli alberi. Per valutare l’errore sul file di test, utilizziamo
“Supplied test set” nel menu “Test options” e selezioniamo il file di test per
segment. Notiamo che le previsioni di stima sul training set sono effettiva-
mente verificate: i metodi che meglio si comportano in termini di errore sul
training set sono quelli che meglio vanno anche sul test set. In questo caso,
quindi, presumiamo che il training set sia un buon campione del problema
che stiamo analizzando.
Ciononostante, notiamo due cose:
• il metodo TS stima come ugualmente performanti SVM gaussiana e
DT, anche se, in verita, sul test set vi e poi una differenza pari quasi
110
Metodo Errore VS Errore test
NBC 19.87% 22.96%
MLP 4.40% 4.81%
SVM lin 4.93% 5.31%
SVM gauss 3.47% 2.84%
DT 5.60% 3.83%
Tabella 8.2: Risultati per il metodo validation set (VS): in grassetto, le
migliori percentuali ottenute.
all’1%. D’altra parte, era lecito attenderselo: sappiamo che i DT, al di
la del pruning, tendono all’overfitting;
• la stima dell’errore e molto ottimistica, nonostante si stia trattando un
buon campione: nella migliore delle ipotesi, tra errore sul test set e sul
train c’e una differenza quasi del 2%.
8.2.2 Metodo VS
Usiamo ora il 50% dei dati per il training e lasciamo la restante meta
come validation. Anche in questo caso, analizziamo i risultati in Tab. 8.2:
il risultato migliore corrisponde solo alla SVM gaussiana, che effettivamente
e quella che meglio si comporta sul test set. Non solo: la stima dell’errore
sul validation set e decisamente migliore rispetto a quella del training set,
essendo addirittura peggiorativa rispetto al rate ottenuto.
8.2.3 Metodo KCV
Terminiamo l’analisi con la KCV, settando k = 10 e selezionando l’appo-
sita opzione in WEKA explorer tra le “Test options”. Presentiamo in Tab.
8.3 i risultati per la Cross Validation: anche in questo caso, la SVM gaussia-
na risulta il metodo statistico che meglio si comporta. La stima dell’errore,
in piu, e molto buona, dato che la differenza e nell’ordine dello 0.1%.
111
Metodo Errore KCV Errore test
NBC 18.93% 22.96%
MLP 3.27% 4.81%
SVM lin 4.13% 5.31%
SVM gauss 2.73% 2.84%
DT 4.27% 3.83%
Tabella 8.3: Risultati per il metodo k–Fold Cross Validation (KCV): in
grassetto, le migliori percentuali ottenute.
8.3 Analisi in WEKA KF
Fino ad ora, nella nostra analisi, abbiamo utilizzato solamente WEKA
explorer. Tra i vari applicativi disponibili in WEKA e pero presente anche
un altro strumento molto comodo: WEKA Knowledge Flow, che chiameremo
KF per brevita. KF e molto simile nell’aspetto e nell’utilita al tool Simulink
di MATLAB: in pratica, il modello simulativo viene creato come schema a
blocchi, in cui ad ogni blocco corrisponde una particolare elaborazione sul
dato.
E impensabile riuscire ad analizzare ogni blocco di KF, ma la guida di-
sponibile con il software e abbastanza completa e user–friendly. Noi andremo
a creare, invece, un modello passo–passo per vedere come si puo implementa-
re quanto gia fatto con WEKA explorer in questo strumento, da molti punti
di vista ancora piu potente.
KF e costituito da una serie di tab, ognuno rappresentante: blocchi per
l’input dati; blocchi per l’output dati; filtri da applicare al dataset; algoritmi
per classificazione e regressione; algoritmi di clustering; blocchi per la valu-
tazioni delle performance dei metodi statistici; blocchi per la visualizzazione
dell’output a video.
Ci poniamo come obiettivo la realizzazione di una valutazione compara-
tiva tra una SVM gaussiana e una SVM lineare sul dataset segment con una
KCV a 10 fold. Vediamo passo–passo come fare.
112
8.3.1 Input
Il primo passo corrisponde alla selezione del dataset. Essendo sotto forma
di file arff, selezioniamo il tab per gli input e trasciniamo nello spazio per la
creazione del modello il blocco “ArffLoader”. Clicchiamo col tasto destro e
configuriamo il blocco, selezionando il file per il nostro dataset.
8.3.2 Selezione della classe
Caricato il dataset, siamo interessati ad un problema di classificazione.
Pertanto, dobbiamo definire un attributo come classe: nel tab “Evaluation”,
trasciniamo nel progetto il blocco “Class Assigner”.
A questo punto, dobbiamo connettere al blocco il dataset, caricato al
passo 8.3.1: clicchiamo sul blocco “ArffLoader” col tasto destro e, nella
sottocategoria “Connections”, colleghiamo il dataset con il “Class Assigner”.
Non ci resta che configurare il blocco “Class Assigner”, usando sempre il
tasto destro: selezioneremo l’attributo voluto (class) come classe. Il prefisso
“(Nom)” indica che l’attributo e di tipo nominale.
8.3.3 Creazione delle k fold per la KCV
Per creare le k fold per la cross validation, aggiungiamo il blocco “Cross
Validation Fold Maker”, disponibile sempre nel tab “Evaluation”. Configu-
riamolo per utilizzare 10 fold, quindi connettiamo il dataset in output dal
blocco “Class Assigner” a “Cross Validation Fold Maker”.
8.3.4 Inserimento dei blocchi per le SVM
A questo punto, non ci rimane che aggiungere i blocchi per la SVM
lineare e la SVM gaussiana. Nel tab “Classifiers”, troviamo “SMO”: tra-
sciniamo due istanze nel nostro progetto, configurandone una per la SVM
lineare (supponiamo C = 100) e l’altra per la SVM gaussiana (C = 100 e
γ = 1).
Aggiungiamo le connessioni: in uscita dal blocco “Cross Validation Fold
Maker”, connettiamo sia “TrainingSet” che “TestSet” (che, in verita, e il
validation set) ai due blocchi per la SVM. A questo punto, tutto e pronto
per la valutazione comparativa: ci manca solo un blocco per elaborare i
risultati e uno per visualizzare questi ultimi a video.
113
8.3.5 Elaborazione dei risultati
Sappiamo che il parametro di valutazione della KCV consiste nell’errore
commesso sulle varie istanze del validation set. Abbiamo, quindi, necessita
di un blocco che riunisca tali valori: “Classifier Performance Evaluator”,
disponibile nel tab “Evaluation”, ha proprio questo scopo.
Aggiunti due blocchi (uno per ogni SVM), connettiamo il “batchClassi-
fier” in uscita dai blocchi “SMO” con “Classifier Performance Evaluator”, in
modo da valutare le performance dei classificatori.
8.3.6 Uscita a video
Ultimo step: porre in uscita a video i nostri risultati. Aggiungiamo, quin-
di, un blocco “Text Viewer” (disponibile nel tab “Visualization”) e connettia-
mo le uscite testuali (“text”) dei blocchi “Classifier Performance Evaluator”
al visualizzatore. Non ci resta che eseguire il tutto.
Figura 8.1: Esempio di schema realizzato in WEKA KF.
8.3.7 Configurazione finale ed esecuzione
Abbiamo terminato gli step necessari, dovremmo avere ora a disposizio-
ne una struttura tipo quella mostrata in Fig. 8.1. Non ci resta che lanciare
l’analisi: clicchiamo col tasto destro su “ArffLoader” e, nella sottocategoria
“Actions”, optiamo per “Start loading”. Attendiamo il termine dell’esecuzio-
ne (ci viene comunicato nella barra dei log sottostante), quindi clicchiamo col
tasto destro sul “Text viewer” e selezioniamo “Show results”: nella finestra
di testo, sulla sinistra, possiamo selezionare i risultati per i metodi inseriti
nel progetto e visualizzarli. E facilmente verificabile che i valori, come ci si
attendeva, sono gli stessi di Tab. 8.3.
114
8.4 Note conclusive
E possibile che, specialmente nel caso si utilizzi la KCV su dataset con un
numero di pattern elevato, i modelli creati per la valutazione di un metodo
statistico siano piuttosto “ingombranti” in termini di occupazione di me-
moria. Spesso, si deve ricorrere ad un heap piu capiente: a questo scopo, e
necessario ricompilare WEKA da riga di comando. In particolare, l’istruzione
di compilazione diventa:
java -Xmx512m -jar weka.jar
identica alla riga di compilazione originaria, presentata nel paragrafo 1.4, a
meno dell’opzione di compilazione -Xmx, indicante la dimensione dello stack,
seguita dalla dimensione di quest’ultimo (nel caso citato, 512 MB).
115
Bibliografia
[1] R. Agrawal e R. Srikant. Fast algorithms for mining association rules in largedatabases. In Proc. of the Int. Conf. on Very Large Databases, pagg. 478–499,1994.
[2] D. Anguita, S. Ridella, e D. Sterpi. Testing the augmented binary multiclasssvm on microarray data. In Proc. of the IEEE Int. Joint Conf. on NeuralNetworks, IJCNN 2006, pagg. 1966–1968, 2006.
[3] M. Aupetit. Homogeneous bipartition based on multidimensional ranking.In Proc. of the European Symposium on Artificial Neural Networks, ESANN2008, 2008.
[4] V. Barnett. Elements of Sampling Theory. Arnold, 1975.[5] M. Berry e G. Linoff. Data Mining Techniques for Marketing, Sales, and
Customer Support. John Wiley & Sons, 1997.[6] C. J. C. Burges. A tutorial on support vector machines for classification.
Data Mining and Knowledge Discovery, 2:121–167, 1998.[7] J. Cohen. A coefficient of agreement for nominal scales. Educational and
Psychological Measurement, 20(1):37–46, 1960.[8] C. Cortes e V. Vapnik. Support–vector networks. Machine Learning, 27:273–
297, 1991.[9] U. Fayaad. Proceedings of the First Int. Conf. on Knowledge Discovery and
Data Mining. Montreal, Canada, 1995.[10] P. Giudici. Applied Data Mining: Statistical Methods for Business and
Industry. John Wiley & Sons, 2003.[11] I. Guyon, J. Weston, S. Barnhill, e V. Vapnik. Gene selection for cancer
classification using support vector machines. Machine Learning, 46:389–422,2002.
[12] G. H. John e P. Langley. Estimating continuous distributions in bayesianclassifiers. In Proc. of the 11th Int. Conf. on Uncertainity in ArtificialIntelligence, pagg. 338–345, 1998.
[13] I. T. Jolliffe. Principal component analysis. In Springer Series in Statistics,2002.
116
[14] R. Kimball e M. Ross. The Data Warehouse Toolkit (2nd edition). JohnWiley & Sons, 2002.
[15] T. Kohonen. Self–Organizing Maps (3rd edition). Springer, 2001.[16] M. L. Minsky e S. A. Papert. Perceptrons. Cambridge Press, 1969.[17] K. Pearson. On lines and planes of closest fit to systems of points in space.
Philosophical Magazine, 2(6):559–572, 1901.[18] J. C. Plat. Probabilistic outputs for support vector machines and comparison
to regularized likelihood methods. In Advances in Large Margin Classifiers.MIT Press, 2000.
[19] J. R. Quinlan. Learning with continuous classes. In Proc. of the AustralianJoint Conf. on Artificial Intelligence, pagg. 343–348, 1992.
[20] J. R. Quinlan. C4.5: Programs for Machine Learning. Morgan Kaufmann,1993.
[21] F. Rosenblatt. The perceptron: A probabilistic model for information storageand organization in the brain. Psychological Review, 65(6):386–408, 1958.
[22] A. J. Smola e B. Schoelkopf. A tutorial on support vector regression.Rapporto tecnico, Statistics and Computing, 1998.
[23] V. Vapnik. The Nature of Statistical Learning Theory. Springer, 2001.[24] Y. Wang e I. H. Witten. Induction of model trees for predicting continuous
classes. In Proc. of the European Conference on Machine Learning, 1997.
117