Nello scorso articolo abbiamo approfondito il funzionamento del classificatore Decision Tree. Oggi facciamo un passo avanti e presentiamo l’algoritmo Random Forest in Python.

Il Random Forest, o foresta casuale, ha raggiunto una buona popolarità nel passato grazie alle sue buone prestazioni in classificazione e alla sua semplicità.

In questo articolo presenteremo prima di tutto il funzionamento teorico. Passeremo poi, come di consueto, a vedere un esempio pratico dell’algoritmo utilizzando la libreria sklearn per Python.

Random Forest

Un Random Forest non è altro che un gruppo di Decision Tree messi insieme per raggiungere migliori performance di classificazione.

Un Decision Tree da solo, infatti, tende a soffrire di alta varianza (e quindi tendenza all’overfitting). Mettendo insieme più Decision Tree è possibile fare una media che risulta in un modello più robusto con migliori capacità di generalizzazione.

A differenza del Decision Tree, un Random Forest non offre lo stello livello di interpretabilità dei dati. Non è necessario però preoccuparsi troppo di come scegliamo i nostri iperparametri perchè il modello è robusto nei confronti del rumore proveniente dai singoli alberi.

L’unico vero parametro da considerare è il numero di Decision Tree n. Tipicamente più è alto n più si possono raggiungere buone performance di classificazione a scapito del costo computazionale.

Andando più nello specifico, l’algoritmo prevede una serie di step ben definiti:

  1. Generare un set randomico di dimensione k di campioni scelti dal training set con sostituzione.
  2. Addestrare un Decision Tree con il set appena generato. A ciascuno nodo:
    1. Selezionare randomicament d caratteristiche senza sostituzione.
    2. Dividere il nodo massimizzando l’Information Gain.
  3. Ripetere gli step 1 e 2 per n volte.
  4. Aggregare le predizione fatte dai singoli alberi e assegnare la classe di appartenenza attraverso un algoritmo di maggioranza.

Algoritmo Random Forest in Python

Come vedremo tra poco, con sklearn l’implementazione in Python di questo algoritmo è molto semplice. I parametri configurabili, oltre al parametro n appena discusso, sono:

  • dimensione k del set di campioni randomicamente generato al punto 1.
  • numero di caratteristiche d casualmente scelte per ciascun split al punto 2.1.

Attraverso possiamo controllare la diversità tra i vari Decision Tree. Più è basso k, più la probabilità che un particolare campione di training venga incluso nel set usato per addestrare un albero sarà bassa. In altre parole, abbassando k riduciamo il rischio di overfitting diminuendo però anche le performance in classificazione del modello.

In molte implementazioni, inclusa quella presente in sklearn, si tende a scegliere k uguale al numero dei campioni. Per quanto riguarda d invece, si pone pari alla radice del numero di caratteristiche del training set.

Passiamo ora ad un esempio pratico, utilizzando come di consueto il nostro dataset di riferimento sui nomi maschili e femminili italiani.

Se non hai seguito gli altri articoli dove abbiamo generato il nostro dataset ti ricordo che:

  • qui puoi leggere l’articolo completo dove spiego come generarlo.
  • qui puoi scaricare il dataset completo.

Per brevità non spiegherò di nuovo il meccanismo di caricamento del dataset e di calcolo delle feature definito rispettivamente nelle funzioni load_dataset calculate_features. In caso tu voglia approfondire, quindi, fai riferimento agli scorsi articoli.

Dopo aver scaricato il dataset, salvalo nella stessa cartella dove andrai a creare lo script Python contenente il codice. A questo punto, crea un file con estensione .py e copiaci dentro il seguente codice:

Copy to Clipboard

Concentrandoci solo sulla funzione main vediamo che nella riga 67 si crea un’instanza del classificatore Random Forest. Specifichiamo come criterio di impurità la Gini Impurity, settiamo il numero di stimatori a 1000 e sfruttiamo 4 core della nostra CPU per eseguire il training.

Nella riga successiva eseguiamo il training sul dataset calcolato nella riga 65.

Lo script termina poi con un ciclo infinito in cui puoi liberamente testare la rete con nomi di tua scelta restituendo la predizione: 1 maschile, -1 femminile.

Conclusioni

Ottimo, oggi abbiamo visto cosa sono i Random Forest, un classificatore basato sui Decision Tree. Dopo una rapida analisi teorica, abbiamo visto come poter utilizzare l’algoritmo Random Forest in Python grazie alla libreria sklearn.