Una _Random Forest_ è un potente algoritmo di apprendimento supervisionato basato sull'idea di combinare molti alberi decisionali (_ensemble learning_). È utile sia per problemi di classificazione che di regressione.
---
### **Idea Principale**
L'algoritmo costruisce molti alberi decisionali su sottoinsiemi casuali del dataset e combina le loro predizioni per ottenere un modello più robusto e preciso.
- **Classificazione:** Si usa il _voto di maggioranza_ (modalità delle predizioni degli alberi).
- **Regressione:** Si usa la _media_ delle predizioni degli alberi.
---
### **Fasi del Training**
1.**Bootstrap Aggregating (Bagging):**
- Viene creato un sottoinsieme casuale (con rimpiazzo) del dataset originale per ogni albero. Questo approccio riduce l'_overfitting_.
2.**Random Subspace (Feature Bagging):**
- Ad ogni split di un albero, viene considerato un sottoinsieme casuale delle feature. Questo introduce ulteriore diversità tra gli alberi.
3.**Crescita degli Alberi:**
- Ogni albero è costruito indipendentemente dagli altri, senza potatura, quindi può raggiungere la massima profondità.
---
### **Vantaggi di Random Forest**
1.**Robustezza:**
- La combinazione di più alberi riduce il rischio di overfitting rispetto a un singolo albero.
- Resiste al rumore nei dati.
2.**Efficienza:**
- È scalabile e può essere parallelizzato, poiché gli alberi sono indipendenti.
3.**Gestione delle Feature:**
- È efficace anche con dataset ad alta dimensionalità.
- Può calcolare l'importanza relativa delle feature, utile per interpretare il modello.
4.**Flessibilità:**
- Funziona bene sia per problemi di classificazione che di regressione.
---
### **Parametri Importanti**
#### **1. Numero di Alberi (n_estimators):**
- Un valore più alto migliora la robustezza, ma aumenta il tempo di calcolo.
- Valore tipico: 100-500.
#### **2. Numero Massimo di Feature (max_features):**
- Numero di feature da considerare per ogni split.
- Valori comuni:
- **Classificazione:** $\sqrt{d}$, dove dd è il numero totale di feature.
Predire su un campione richiede $O(T \cdot \text{depth})$, dove la profondità ($\text{depth}$) è proporzionale a $\log n$.
---
### **Limiti**
1.**Lentezza:**
- L'addestramento può essere costoso con molti alberi o dataset molto grandi.
2.**Interpretabilità:**
- Anche se le singole feature possono essere analizzate, il modello complessivo è meno interpretabile di un singolo albero.
3.**Overfitting su Dati Rumorosi:**
- Se i dati contengono molto rumore, una Random Forest potrebbe comunque sovradattarsi, anche se meno di un singolo albero.
---
### **Applicazioni**
1.**Classificazione:** Diagnosi mediche, analisi di frodi, riconoscimento di immagini.
2.**Regressione:** Previsione dei prezzi, analisi delle serie temporali.
3.**Selezione di Feature:** Grazie all'analisi dell'importanza delle feature.
---
### **Punti Chiave**
- **Differenza con Bagging:** La Random Forest aggiunge il sottoinsieme casuale di feature al bagging per rendere ogni albero più indipendente.
- **Differenza con Gradient Boosting:** La Random Forest crea alberi in parallelo, mentre il Gradient Boosting li costruisce in sequenza ottimizzando errori residui.