Come il bagging e il boosting, il boosting per gradiente è una metodologia applicata su un altro algoritmo di machine learning. In modo informale, l'aumento del gradiente prevede due tipi di modelli:
- un modello di machine learning "debole", in genere un albero decisionale.
- un modello di machine learning "forte", composto da più modelli deboli.
Nell'aumento di probabilità, a ogni passaggio viene addestrato un nuovo modello debole per prevedere l'"errore" dell'attuale modello forte (chiamato pseudo risposta). Analizzeremo più dettagliatamente il valore "error" in seguito. Per il momento, supponiamo che "errore" sia la differenza tra la previsione e un'etichetta regressiva. Il modello debole (ovvero l'"errore") viene poi aggiunto al modello forte con un segno negativo per ridurre l'errore del modello forte.
Il boosting del gradiente è iterativo. Ogni iterazione richiama la seguente formula:
dove:
- è il modello efficace al passaggio .
- è il modello debole al passaggio .
Questa operazione viene ripetuta fino a quando non viene soddisfatto un criterio di interruzione, ad esempio un numero massimo di iterazioni o se il modello (forte) inizia a sovraadattarsi, misurato su un set di dati di convalida separato.
Illustriamo l'aumento di gradiente su un semplice set di dati di regressione in cui:
- L'obiettivo è prevedere da .
- Il modello forte viene inizializzato come costante zero: .
# 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 di regressione sintetico con una caratteristica numerica.
Ecco tre grafici dopo la prima iterazione dell'algoritmo di boosting del gradiente:
Figura 26. Tre grafici dopo la prima iterazione.
Tieni presente quanto segue sui grafici in Figura 26:
- Il primo grafico mostra le previsioni del modello efficace, che al momento è sempre uguale a 0.
- Il secondo grafico mostra l'errore, ovvero l'etichetta del modello debole.
- Il terzo grafico mostra il modello debole.
Il primo modello debole apprende una rappresentazione approssimativa dell'etichetta e si concentra principalmente sulla parte sinistra dello spazio delle caratteristiche (la parte con la maggiore variabilità e quindi con il maggior errore per il modello errato costante).
Di seguito sono riportati gli stessi grafici per un'altra iterazione dell'algoritmo:
Figura 27. Tre grafici dopo la seconda iterazione.
Tieni presente quanto segue per quanto riguarda i grafici in Figura 27:
- Il modello efficace ora contiene la previsione del modello debole dell' iterazione precedente.
- Il nuovo errore del modello efficace è leggermente inferiore.
- La nuova previsione del modello debole ora si concentra sulla parte destra dello spazio delle caratteristiche.
Eseguiamo l'algoritmo per altre otto iterazioni:
Figura 28. Tre grafici dopo la terza e la decima iterazione.
Nella Figura 28, tieni presente che la previsione del modello efficace inizia a assomigliare al grafico del set di dati.
Queste figure illustrano l'algoritmo di boosting del gradiente che utilizza alberi decisionali come apprendisti deboli. Questa combinazione è chiamata alberi decisionali con boosting del gradiente.
I grafici precedenti suggeriscono l'essenza dell'aumento del gradiente. Tuttavia, questo esempio non contiene le seguenti due operazioni reali:
- Il ritiro
- L'ottimizzazione dei valori delle foglie con un passaggio del metodo di Newton
Restringimento
Il modello debole viene moltiplicato per un piccolo valore (ad esempio, ) prima di essere aggiunto al modello forte . Questo piccolo valore è chiamato shrinkage. In altre parole, anziché utilizzare la seguente formula per ogni iterazione:
Ogni iterazione utilizza la seguente formula:
Il calo nell'aumento del gradiente è analogo al tasso di apprendimento nelle reti neurali. Il ritiro controlla la velocità di apprendimento del modello efficace, il che contribuisce a limitare l'overfitting. In altre parole, un valore di riduzione più vicino a 0,0 riduce l'overfitting più di un valore di riduzione più vicino a 1,0.
Nel codice riportato sopra, il calo verrà implementato come segue:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions