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.