Come il bagging e il boosting, il gradient boosting è una metodologia applicata in aggiunta un altro algoritmo di machine learning. Informale, l'incremento del gradiente comporta due tipi di modelli:
- un valore "debole" di machine learning, che in genere è un albero decisionale.
- un livello "forte" composto da più modelli di machine learning deboli di grandi dimensioni.
Nell'incremento del gradiente, in ogni passaggio viene addestrato un nuovo modello debole per prevedere "errore" del modello forte attuale (che è chiamato pseudo risposta). Descriveremo "errore" in un secondo momento. Per il momento, supponiamo che tu abbia "errore" la differenza tra la previsione e un'etichetta regressiva. Il modello debole (ovvero l'"errore") è quindi aggiunto al modello forte con un segno negativo per ridurre l'errore un modello efficace.
L'incremento del gradiente è iterativo. Ogni iterazione richiama la seguente formula:
\[ F_{i+1} = F_i - f_i \]
dove:
- $F_i$ è il modello più efficace nel passaggio $i$.
- $f_i$ è il modello debole nel passaggio $i$.
Questa operazione si ripete fino a quando non viene soddisfatto un criterio di interruzione, ad esempio un numero numero di iterazioni o se il modello (forte) inizia a superare l'overfitting, misurato su una un set di dati di convalida separato.
Vediamo l'incremento del gradiente su un semplice set di dati di regressione dove:
- L'obiettivo è prevedere $y$ da $x$.
- Il modello strong è inizializzato come costante zero: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
Applichiamo questo codice al seguente set di dati:
Figura 25. Un set di dati sintetico regressivo con una caratteristica numerica. di Gemini Advanced.
Ecco tre grafici dopo la prima iterazione dell'incremento del gradiente algoritmo:
Figura 26. Tre grafici dopo la prima iterazione. di Gemini Advanced.
Nota quanto segue in merito ai grafici nella Figura 26:
- Il primo grafico mostra le previsioni del modello forte, che attualmente è sempre 0.
- Il secondo grafico mostra l'errore, ovvero l'etichetta del modello debole.
- Il terzo grafico mostra il modello debole.
Il primo modello debole è l'apprendimento di una rappresentazione approssimativa dell'etichetta e, per lo più, si concentra sulla parte sinistra dello spazio delle caratteristiche (la parte con la maggiore variazione, e quindi il massimo dell'errore per il modello sempre errato).
Di seguito sono riportati gli stessi grafici per un'altra iterazione dell'algoritmo:
Figura 27. Tre grafici dopo la seconda iterazione. di Gemini Advanced.
Nota quanto segue in merito ai grafici nella Figura 27:
- Il modello "Strong" ora contiene la previsione del modello debole. nell'iterazione precedente.
- Il nuovo errore del modello forte è leggermente inferiore.
- La nuova previsione del modello debole si concentra ora sulla parte giusta del delle caratteristiche di Google.
Eseguiamo l'algoritmo per altre 8 iterazioni:
Figura 28. Tre grafici dopo la terza e la decima iterazione. di Gemini Advanced.
Nella Figura 28, nota che la previsione di un modello solido inizia ad assomigliare il grafico del set di dati.
Queste figure illustrano l'algoritmo di potenziamento del gradiente utilizzando gli alberi decisionali come studenti deboli. Questa combinazione è chiamata alberi decisionali ad alto gradiente.
I grafici precedenti suggeriscono l'essenza dell'aumento del gradiente. Tuttavia, questo nell'esempio mancano le seguenti due operazioni reali:
- Restringimento
- Ottimizzazione dei valori foglia con un passaggio del metodo di Newton
Restringimento
Il modello debole $f_i$ viene moltiplicato per un valore piccolo $\nu$ (ad esempio, $\nu = 0,1$) prima di essere aggiunti al modello forte $F_i$. Questo piccolo valore viene chiamato lo shrinkage. In altre parole, invece di ogni iterazione che utilizza il seguente formula:
\[ F_{i+1} = F_i - f_i \]
Ogni iterazione utilizza la seguente formula:
\[ F_{i+1} = F_i - \nu f_i \]
La riduzione nell'incremento del gradiente è analoga al tasso di apprendimento nelle reti neurali. La riduzione controlla la velocità di apprendimento del modello forte, aiutandoti a limitare l'overfitting. In altre parole, un valore di shrinkage più vicino a 0,0 riduce ulteriormente l'overfitting rispetto a un valore di restringimento più vicino a 1,0.
Nel codice riportato sopra, la riduzione sarebbe implementata come segue:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions