Categories: statistica

Come usare gli Alberi Decisionali per classificare i dati

Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura ad albero per suddividere i dati in base a delle regole logiche e prevedere la classe di appartenenza di nuovi dati. Sono facili da interpretare e adattabili a diversi tipi di dati, ma possono anche soffrire di problemi come l’overfitting, la complessità e lo sbilanciamento.
Vediamo di capirne un po’ di più e di esaminare un semplice esempio d’uso in R.

Gli Alberi Decisionali: un potente strumento di classificazione

Immagina di essere un medico e di dover diagnosticare una malattia a un paziente basandoti su alcuni sintomi. Come faresti a decidere quale malattia ha il paziente? Potresti usare la tua esperienza, la tua intuizione, o consultare dei manuali. Oppure potresti usare un algoritmo che ti guida passo dopo passo a scegliere la diagnosi più probabile, in base ai dati che hai a disposizione. Questo algoritmo si chiama Albero Decisionale.

Un Albero Decisionale è una struttura grafica che rappresenta una serie di regole logiche per classificare degli oggetti o delle situazioni.
Ogni nodo dell’albero rappresenta una domanda o una condizione, che divide i dati in due o più sottogruppi omogenei.
Ogni ramo rappresenta una possibile risposta o un’azione, che collega un nodo a un altro nodo o a una foglia.
Il nodo iniziale si chiama radice, ed è il punto di partenza dell’albero.
I nodi finali si chiamano foglie, e sono i punti di arrivo dell’albero.
Ogni foglia corrisponde a una classe, ovvero una categoria a cui appartiene l’oggetto o la situazione da classificare.

Gli Alberi Decisionali sono molto usati in ambito scientifico, tecnologico, medico, economico, e sociale, perché hanno diversi vantaggi:

  • Sono facili da interpretare e da comunicare, anche a persone non esperte.
  • Sono flessibili e possono adattarsi a diversi tipi di dati, sia numerici che categorici.
  • Sono robusti e possono gestire dati incompleti, rumorosi, o inconsistenti.
  • Sono efficienti e richiedono poco tempo e memoria per essere costruiti e applicati.

Tuttavia, gli Alberi Decisionali hanno anche alcuni svantaggi:

  • Possono essere instabili, ovvero sensibili a piccole variazioni dei dati di partenza, e quindi produrre alberi molto diversi.
  • Possono essere complessi, ovvero avere molti nodi e rami, e quindi perdere in chiarezza e accuratezza.
  • Possono essere sbilanciati, ovvero favorire alcune classi rispetto ad altre, e quindi essere poco rappresentativi della realtà.

Per ovviare a questi problemi, esistono diverse tecniche di ottimizzazione e di validazione degli Alberi Decisionali, che permettono di migliorare le loro prestazioni e di valutare la loro affidabilità.

Un semplice esempio di Albero Decisionale in R

Per capire meglio come funzionano gli Alberi Decisionali, vediamo un esempio pratico in linguaggio R.

Per il nostro esempio, useremo il dataset iris, che contiene le misure di lunghezza e larghezza dei sepali e dei petali di 150 fiori di iris, appartenenti a tre specie diverse: setosa, versicolor, e virginica. Il nostro obiettivo è di costruire un Albero Decisionale che ci permetta di classificare un fiore di iris in base alla sua specie, usando le sue misure come variabili esplicative.

Per prima cosa, carichiamo il dataset iris e la libreria rpart, che ci permette di creare gli Alberi Decisionali in R.

# Carichiamo il dataset iris
data(iris)
# Carichiamo la libreria rpart
library(rpart)
# Impostiamo il seme per la riproducibilità
set.seed(123)
# Estraiamo casualmente l'80% delle righe del dataset
train_index <- sample(1:nrow(iris), 0.8*nrow(iris))
# Creiamo il dataset di training
train_data <- iris[train_index, ]
# Creiamo il dataset di test
test_data <- iris[-train_index, ]

Ora, siamo pronti per costruire il nostro Albero Decisionale, usando la funzione rpart. Questa funzione richiede alcuni parametri:

  • La formula, che specifica la variabile da classificare (in questo caso, Species) e le variabili esplicative (in questo caso, tutte le altre).
  • Il dataset, che contiene i dati da usare per costruire l’Albero Decisionale (in questo caso, train_data).
  • Il metodo, che specifica il tipo di classificazione da usare (in questo caso, class, che indica una classificazione categorica).
# Costruiamo l'Albero Decisionale
tree <- rpart(formula = Species ~ ., data = train_data, method = "class")

Per visualizzare il nostro Albero Decisionale, usiamo la funzione plot, che ci permette di disegnare la struttura grafica dell’albero, e la funzione text, che ci permette di aggiungere le etichette dei nodi e dei rami.

# Visualizziamo l'Albero Decisionale
plot(tree, uniform = TRUE, branch=0.8)
text(tree, all=TRUE, use.n = TRUE)

Il risultato è il seguente:

Come possiamo interpretare questo semplicissimo Albero Decisionale? Partiamo dalla radice, che è il nodo in alto. Questo nodo ci dice che la variabile più importante per classificare un fiore di iris è la lunghezza del petalo (Petal.Lenght). Se la larghezza del petalo è minore di 2.45 cm, allora il fiore è della specie setosa. Se invece la larghezza del petalo è maggiore, dobbiamo considerare se la lunghezza del petalo è minore o uguale a 4.75 cm. Se è minore allora il fiore è della specie versicolor. Se invece la lunghezza del petalo è maggiore di 4.75 cm, allora il fiore è della specie virginica.

Come valutare l’accuratezza di un Albero Decisionale

Per valutare l’accuratezza di un Albero Decisionale, dobbiamo confrontare le classi predette dall’albero con le classi reali dei dati di test. Per fare questo, usiamo la funzione predict, che ci permette di applicare l’Albero Decisionale ai dati di test e di ottenere le classi predette.

# Applichiamo l'Albero Decisionale ai dati di test
pred_class <- predict(tree, newdata = test_data, type = "class")

Poi, usiamo la funzione table, che ci permette di creare una tabella di contingenza tra le classi predette e le classi reali.

# Creiamo la tabella di contingenza
table(pred_class, test_data$Species)

Il risultato è il seguente:

setosa versicolor virginica
setosa 10 0 0
versicolor 0 13 0
virginica 0 2 5

Questa tabella ci mostra quante volte l’Albero Decisionale ha predetto correttamente o sbagliato la classe di un fiore di iris. Per esempio, la cella in alto a sinistra ci dice che l’Albero Decisionale ha predetto correttamente che 10 fiori erano della specie setosa. La cella in basso al centro ci dice che l’Albero Decisionale ha sbagliato a predire che 2 fiori erano della specie virginica, quando in realtà erano della specie versicolor.

Per calcolare l’accuratezza di un Albero Decisionale, dobbiamo dividere il numero di predizioni corrette per il numero totale di predizioni. In questo caso, l’accuratezza è:

\( \frac{10 + 13 + 5}{10 + 13 + 5 + 2} = \frac{28}{30} = 0.93\\ \)

Questo significa che il nostro Albero Decisionale ha predetto correttamente la specie di un fiore di iris nel 93% dei casi. Questo è un buon risultato, ma potrebbe essere migliorato con alcune tecniche di ottimizzazione, come la potatura o la selezione delle variabili.

La potatura è una tecnica che consiste nel ridurre la complessità di un Albero Decisionale, eliminando alcuni nodi o rami che non contribuiscono significativamente all’accuratezza. Questo può prevenire il problema dell’overfitting, ovvero quando l’Albero Decisionale si adatta troppo ai dati di training e perde la capacità di generalizzare ai dati di test.

La selezione delle variabili è una tecnica che consiste nel scegliere le variabili più rilevanti per la classificazione, eliminando quelle che sono irrilevanti o ridondanti. Questo può migliorare l’accuratezza e la chiarezza dell’Albero Decisionale, riducendo il numero di domande o condizioni da considerare.

Cosa si intende per Overfitting?

L’overfitting è un problema che si verifica quando un modello di apprendimento automatico si adatta troppo ai dati di addestramento, e non riesce a generalizzare bene ai dati nuovi. Questo significa che il modello memorizza le caratteristiche specifiche e il rumore dei dati di addestramento, ma non riesce a catturare la tendenza generale dei dati. Di conseguenza, il modello ha un’alta accuratezza sui dati di addestramento, ma una bassa accuratezza sui dati di test o di validazione. L’overfitting può essere causato da una complessità eccessiva del modello, da un numero insufficiente di dati di addestramento, o da un addestramento troppo lungo.

Cenni ad altri algoritmi di classificazione

Esistono innumerevoli altri algoritmi di classificazione, come ad esempio, la regressione logistica, il k-nearest neighbor, il support vector machine e le reti neurali. Questi algoritmi si basano su principi diversi dagli Alberi Decisionali, come la funzione di probabilità, la distanza, il margine o la trasformazione non lineare dei dati. Alcuni di questi algoritmi possono essere più accurati, flessibili o scalabili degli Alberi Decisionali, ma anche più difficili da interpretare o richiedere più tempo e risorse per essere addestrati e applicati.

Una tecnica che cerca di combinare i vantaggi degli Alberi Decisionali con quelli degli algoritmi di insieme è la Random Forest.

La Random Forest è un metodo che costruisce una collezione di Alberi Decisionali indipendenti e ne calcola la media delle previsioni.
Questo permette di ridurre la varianza e l’overfitting degli Alberi Decisionali, aumentando l’accuratezza e la robustezza del modello. La Random Forest introduce anche un elemento di casualità nella scelta dei dati e delle variabili da usare per costruire gli Alberi Decisionali, rendendo il modello più diversificato e de-correlato.

paolo

Recent Posts

Guida ai Test Statistici per analisi A/B

I test statistici sono strumenti fondamentali per l'analisi dei dati e la presa di decisioni…

2 mesi ago

L’algoritmo di Discesa del Gradiente spiegato semplice

Immaginiamo di voler trovare il percorso più veloce per raggiungere una destinazione in auto. Si…

9 mesi ago

La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull’ottimizzazione

Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un…

9 mesi ago

Il Metodo Montecarlo spiegato in modo semplice e applicato a casi reali

La simulazione Monte Carlo è un metodo utilizzato per quantificare il rischio associato a un…

1 anno ago

La distribuzione ipergeometrica

Abbiamo visto che la distribuzione binomiale si basa sull’ipotesi di una popolazione infinita N, condizione che si…

1 anno ago

La distribuzione binomiale negativa (o distribuzione di Pascal)

La distribuzione binomiale negativa descrive il numero di prove necessarie per ottenere un certo numero…

1 anno ago