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.
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:
Tuttavia, gli Alberi Decisionali hanno anche alcuni svantaggi:
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à.
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:
Species
) e le variabili esplicative (in questo caso, tutte le altre).train_data
).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.
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.
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.
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.
I test statistici sono strumenti fondamentali per l’analisi dei dati e la presa di decisioni informate. Scegliere…
Immaginiamo di voler trovare il percorso più veloce per raggiungere una destinazione in auto. Si…
Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un…
La simulazione Monte Carlo è un metodo utilizzato per quantificare il rischio associato a un…
Abbiamo visto che la distribuzione binomiale si basa sull’ipotesi di una popolazione infinita N, condizione che si…
La distribuzione binomiale negativa descrive il numero di prove necessarie per ottenere un certo numero…