L'algoritmo CART (Classification And Regression Trees) è una variante degli algoritmi per l'apprendimento automatico di alberi di decisione. Esso è in grado di costruire alberi sia per la classificazione che per la regressione. È un algoritmo di apprendimento supervisionato che apprende da istanze etichettate (del training set) un albero di decisione da usare in seguito per predire le etichette della variabile target per nuove istanze.
CART presenta le seguenti caratteristiche
L'idea di base della costruzione dell'albero di decisione è quella di scegliere per in ciascun nodo (interno) un partizionamento delle istanze tra tutti i possibili in modo che i nodi figli risultanti siano i più “puri”. Nell'algoritmo vengono prese in considerazione solo suddivisioni univariate. Ciò significa che ogni partizionamento dipende dal valore di una sola variabile predittiva. Si considerano, quindi, tutte le suddivisioni possibili per ciascun predittore. Se è una variabile categorica nominale di categorie, ci saranno possibili divisioni per questo predittore. Se è una variabile categorica ordinale o continua con K valori diversi, ci saranno divisioni diverse su .
L'albero viene costruito a partire dal nodo radice utilizzando ripetutamente i seguenti passaggi su ciascun nodo:
Input: dataset D con feature X e variabile target y (categorica)
Output: albero di classificazione
Funzione CART_classificazione(D)
Se tutte le istanze in D appartengono alla stessa classe
o criteri di stop raggiunti:
Creare un nodo-foglia con la classe dominante in D
Ritornare nodo foglia
Altrimenti:
Per ogni variabile e per ogni suo possibile valore di split:
Dividere D in due sottoinsiemi D1, D0 in base allo split
Calcolare l'impurità (es. Gini) per il partizionamento
Seleziona variabile e split che minimizzano l'impurità
Creare nodo interno con test sulla variabile e split scelti
con albero_0 = CART_classificazione(D0)
con albero_1 = CART_classificazione(D1)
Restituire nodo interno
Input: Dataset D con feature X e variabile target continua Y
Output: Albero di regressione
Funzione CART_regressione(D):
Se la varianza di Y in D è inferiore rispetto a una soglia
o D è troppo piccolo:
Restituire un nodo foglia con il valore medio di Y in D
Altrimenti:
Per ogni feature x_i in X:
Per ogni possibile punto di split s di x_i:
Dividere D in D_1 e D_0 secondo x_i <= s
Calcolare la varianza pesata sommata di Y in D_1 e D_0
Selezionare x* e s* che minimizzano la varianza pesata
Creare un nodo decisionale che partiziona su x* al valore s*
albero_1 = CART_regressione(D_1)
albero_0 = CART_regressione(D_0)
Restiture il nodo con albero_1 e albero_0
Sia il training set di istanze etichettate.
Al nodo , la condizione migliore per il partizionamento si sceglie massimizzando un criterio di partizionamento . Potendo definire una funzione di impurità per il nodo, il criterio equivale al decremento di impurità dovuto alla partizionamento.
Se la variabile target è categorica, si può usare l'indice di Gini o l'entropia (o il Twoing, anche nella sua variante ordinata).
Per il nodo e la classe , le probabilità , , possono essere stimate come segue:
La misura di impurità di Gini si può scrivere, dato il costo dell'errore di misclassificazione :
e il criterio basato su tale indice è il decremento di impurità:
dove e sono le probabilità di istradare le istanze verso il sottoalbero per cui la condizione è vera () o falsa (), rispettivamente. Esse sono facilmente stimabili con .
Quando la variabile target è continua, il criterio di partizionamento usato è
con le misure di impurità LSD (Least Squares Deviation)
dove: .
Controllano se il processo di sviluppo dell'albero debba terminare o meno. Fra le condizioni più usate: