110 lines
No EOL
3.9 KiB
Markdown
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. |