Estratto del documento

ANALISI MODELLO

Quando vogliamo analizzare un modello con degli algoritmi, i passi da fare sono:

1) Togliere missing

2) Data Cleaning: quindi correggere valori strani

3) Data Selection and Data Preparation: correggere attributi numerici --> se sono presenti

è meglio discretizzarli (passar quindi da attributo numerico ad attributo categorico)

perchè in questa maniera è più facile far previsione per valori aggregati.

Nella nostra esercitazione, per generare l'albero, useremo l'algoritmo J48 (Classify-->Filter-

->Tree-->J48).

ALGORITMI

1) Se metto "Use training set" l'algoritmo prende tutti i parametri del DB e fa la previsione.

Con Use training set sto usando lo stesso dataset per fare training e validation. In generale lo

usiamo sotto le centinaia di dati.

2) Se metto "Supplied test set" per validare il modello uso un altro dataset quindi:

per il training uso quello che sta dentro (quello già caricato), per il validation uso un altro

che carico con "Set".

3) "Cross-validation" prende le istanze, le divide in folder e usa un pezzo di queste per

far training e un altro per far validation. Itera tutto finchè non usa tutte le cartelle. E' un

punto di vista statistico. In generale lo usiamo sopra le migliaia di dati.

4) "Percentage split" specifica la % della validazione.

Usa solo una parte della validazione (in questo caso 66% che è una buona percentuale

perchè la percentuale che si usa è tra il 50 e 66%).

Nel nostro caso il 66 viene usato per fare training, il resto per fare validation. Le istanze

le decide l'algoritmo, le prende casualmente lui. In generale lo usiamo sopra le centinaia.

OSS: Conviene usare questo modello di classificazione (Percentage split) quando ne ho tanti ma

non tanti da poter usare cross validation. Se ho un db troppo grande, meglio andar con cross

validation perchè è più affidabile. Se il DB è piccolo usiamo il training set.

ANALISI ALBERO WEKA

NB: quando parliamo di analisi di un albero weka, questa è possibile farla avendo un

albero dal punto di vista “grafico” e dal punto di vista “di codice o numerico”. Nel

nostro caso ora, faremo un’analisi albero weka da codice.

Nel mio esempio utilizzo come algoritmo J48 Pruned tree applicando il CROSS VALIDATION.

Albero restituito (output sotto forma di codice):

-----------------------------------------------------------------------------------------------------

tear-prod-rate = reduced: none (12.0)

tear-prod-rate = normal

| astigmatism = no: soft (6.0/1.0)

| astigmatism = yes

| | spectacle-prescrip = myope: hard (3.0)

| | spectacle-prescrip = hypermetrope: none (3.0/1.0)

Number of Leaves : 4

Size of the tree : 7

--------------------------------------------------------------

Time taken to build model: 0 seconds

=== Stratified cross-validation ===

=== Summary ===

Correctly Classified Instances 20 83.3333 %

Incorrectly Classified Instances 4 16.6667 %

Kappa statistic 0.71

Mean absolute error 0.15

Root mean squared error 0.3249

Relative absolute error 39.7059 %

Root relative squared error 74.3898 %

Total Number of Instances 24

-----------------------------------------------------------------------------------------------------

QUINDI cosa ci vuole dire il nostro albero? Analizziamo alcune voci:

4 → Indica il numero di foglie quindi numero di regole (e cioè 4: il

Number of Leaves: nostro albero ha 4 foglie e quindi 4 regole).

Il numero di foglie sono il numero di nodi terminali dell'albero e

sono uguali al numero di regole.

Indica la grandezza dell’albero.

Size of the tree: 7→ La grandezza dell'albero è pari alla somma delle foglie + nodi. In

questo caso è grande 7.

Parametri:

1) Correctly Classified Instances: 20 83.3333 % --> istanze classificate correttamente

(questa classificazione è una

classificazione globale)

2) Incorrectly Classified Instances: 4 16.6667 % --> istanze classificate non

correttamente

NB: i parametri di sopra 1) e 2) misurano un'accuratezza.

I 4 errori (Incorrectly Classified Instances) possono esser fatti in qualsiasi caso del

calcolo dell'algoritmo. Per capire quando sono stati fatti (e quindi quanto è stato

l’algoritmo), vado nella Confusion Matrix dov’ è possibile analizzare

preciso

correttamente i dati (mette in relazione i valori reali con quelli predetti).

-----------------------------------------------------------------------------------------------------

CONFUSION MATRIX:

=== Confusion Matrix ===

a b c <-- classified as

12 1 2 | a = none

0 5 0 | b = soft

1 0 3 | c = hard

-----------------------------------------------------------------------------------------------------

Cosa ci vuol dire questa confusion matrix?

I valori sulla diagonale sono i valori corrretti, mentre quelli fuori dalla diagonale sono quelli

sbagliati (1+2+1=4).

NB: se conto i valori sbagliati fuori dalla diagonale (1+2+1=4) sono il numero di Incorrectly

Classified Instances!

Le metriche di classificazione sono: none, soft, hard.

Cosa vuol dire questa matrice?

Se leggo dalle colonne, vedo che:

colonna a: 12 istanze classificate come none, quindi classificate correttamente perché sono sulla

diagonale principale e quindi non sono errore).

colonna b: 6 istanze classificate come soft (5 sono corrette e su una c’è errore).

colonna c: 5 istanze classificate come hard (3 corrette e su due c’è errore).

Se abbiamo 100% di accuratezza (100% classificazione corretta) avremo più regole più precise.

In generale quello che ho è un bilanciamento tra il n°regole e l'accuratezza. Più regole ho, più sarà

accurato il mio sistema.

L'ideale è avere il 100% di accuratezza ma così avrò molte più regole.

l’accuratezza,

L'effetto è che se aumento creo delle regole che magari valgono solo per uno due

casi.

Quindi: la cosa migliore non è aver sempre il 100% di accuratezza.

Cosa si fa?

Devo spingere l'algoritmo a raggiungere l'accuratezza massima (e raggiungo max un valore),

raggiunta questa accuratezza avrò un sacco di parametri; una volta arrivato qui devo cercar di

ridurre le regole.

Come procedo?

La prima cosa da fare è aumentare l'accuratezza.

Per far questo uso "training set" dove ho accuratezza 91%.

Qui ho lo stesso numero di regole ma con un'accuratezza maggiore.

Quando ottengo lo stesso albero ma con accuratezza diversa (usando due algoritmi diversi) significa

che alcune volte trovo corrispondenza e altre volte no.

MODIFICHE POSSIBILI:

1) La prima cosa che posso modificare è il tipo di albero

a) "binarySplits" (tipo di albero binario) è come se riduco le regole e quindi posso commettere

degli errori. Se setto su TRUE dividerò un nodo al massimo in 2 rami, se setto su FALSE un nodo

sarà diviso in quanti rami vuoi (puoi specificarlo).

b) "Multisplits" significa che aumento le regole. Quindi albero più grande ma con meno

errori.

2) La seconda cosa è "confidenceFactor": metrica per capire quanto è valida/estendibile

una regola.

Se una confidenza di una regola è alta, significa che quella regola vale per tante

istanza. Più è alta la confidenza (valore che pongo per la generazione di una regola) più

istanze staranno utilizzando quella regola.

3) minNumObj è il numero minimo di istanze per una foglia, se lo aumento, diminuirà la

dimensione dell’albero e anche l’accuratezza; provo a settarlo su 1 (in precedenza era 2).

4) "unprunded": è un algoritmo automatico per potare l'albero (può essere true/false).

Se è false l'albero si riduce e quindi si riduce l'accuratezza. Provo a settarlo su true!

Vedo che l’accuratezza è salita al 100% ma le regole sono aumentate a 9 e questo NON VA BENE!

QUINDI: quando lancio un modello, la prima cosa che devo vedere è l'accuratezza

Globale ma nello stesso tempo non aumentare le regole che ho trovato (trade off).

Devo andar nelle righe === Detailed Accuracy By Class === e vedere la riga

della performance che a noi interessa.

Per ogni valore di target classe (nell'esempio delle lenti a contatto è la lacrimazione) la variabile

classe può assumere diversi valori.

Per capire quanto sono bravo sui singoli valori devo andare sulla matrice di confusione (Confusion

Matrix).

In questa matrice, le righe sono i valori reali delle istanze e le colonne le predizioni.

Se ho una matrice 3x3 ho diversi valori.

Perchè faccio la matrice di confusione?

devo cercar di rendere (specialmente quando opero con dataset di grosse dimensioni) indipendenti e

accurati e più casuali possibili i miei dati.

Prendo come esempio la confusion matrix di prima:

=== Confusion Matrix ===

a b c <-- classified as

12 1 2 | a = none

0 5 0 | b = soft

1 0 3 | c = hard

Per capire, come esempio prendiamo come esempio la prima riga che mi dice:

sono classificati giusti (12 perché è l’elemento che fa parte

12 su 15 (12+1+2=15) (intersezione a-a)

della diagonale). è classificato sbagliato; com’è classificato sbagliato?

1 su 15 (intersezione a-b) dei 15 che non

hanno le lenti, 1 lo sto prendendo in modo errato; quindi su 15 uno è sbagliato e lo prendo come se

ha le lenti b=soft; l’intersezione è 2 perché sui 15, 2 che hanno le lenti hard ma in realtà

2 su 15 (intesezione a-c)

fanno parte del campione di quelli che non indossano proprio le lenti.

Albero restituito (output sotto forma grafica):

Avrò:

1) 4 regole (quelle di forma rettangolari):

none(12,0), soft(6.0/1.0), hard(3.0), none(3.0/1.0)

2) 7 size (dimensione) foglie + regole. Lezione: 23 Maggio 2018

Nella lezione precedente (22 Maggio 2018) abbiamo approcciato il problema di

classificazione utilizzando weka.

Abbiamo visto che arrivati al massimo di accuratezza, si iniziano a modificare i parametri

in direzione opposta (abbassa confidenze factor, aumenta numero minimo di oggetti) si

cerca quindi quel trade-off tra dimensione e accuratezza.

Ora, usando sempre “training set”, si può capire come intervenire per ridurre le

dimensioni dell'albero. Come fare?

La prima cosa da capire è che se da un nodo ci sono due binary split.

Come seconda cosa posso vedere il numero minimo di oggetti che finisce nel nodo per

generarlo.

Se voglio ridurre le regole, setto “binarySplits” da Option a “true”. Quindi che ho fatto: dal

multisplits sono passato al binary. Come conseguenza di questa operazione ho che si

sono ridotte

Anteprima
Vedrai una selezione di 4 pagine su 13
Appunti presi a lezione di Modelli di e-business e business intelligence Pag. 1 Appunti presi a lezione di Modelli di e-business e business intelligence Pag. 2
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Appunti presi a lezione di Modelli di e-business e business intelligence Pag. 6
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Appunti presi a lezione di Modelli di e-business e business intelligence Pag. 11
1 su 13
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-IND/35 Ingegneria economico-gestionale

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher paolo.danza.9 di informazioni apprese con la frequenza delle lezioni di Modelli di e-business e business intelligence e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Bari o del prof Panniello Umberto.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community