master-degree-notes/Foundation of data science/notes/9 Random Forest.md

110 lines
No EOL
3.9 KiB
Markdown

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.
- **Regressione:** $d/3$.
#### **3. Profondità Massima dell'Albero (max_depth):**
- Limita la profondità degli alberi per prevenire overfitting.
- Se non specificata, gli alberi cresceranno fino a che ogni nodo foglia contiene meno di `min_samples_split` campioni.
#### **4. Dimensione del Campione (max_samples):**
- Percentuale del dataset usata per creare ogni albero.
- Di default, è il 100% con rimpiazzo (bagging completo).
---
### **Complessità Computazionale**
- **Training:**
Per un singolo albero: $O(d \cdot n \log n)$, dove d è il numero di feature e n il numero di campioni.
Con T alberi: $O(T \cdot d \cdot n \log n)$.
- **Predizione:**
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.