Alberi decisionale con sfumatura potenziata

Come nel caso della pacchettizzazione e del boosting, il boosting gradiente è una metodologia che si aggiunge a un altro algoritmo di machine learning. A livello informale, l'aumento delle sfumature prevede due tipi di modelli:

  • un modello di machine learning "debole" e generalmente un albero decisionale.
  • un modello di machine learning "forte" composto da più modelli deboli.

Nel potenziamento gradiente, ad ogni passaggio, viene addestrato un nuovo modello debole per prevedere l'"errore" dell'attuale modello forte (denominato pseudo risposta). Più avanti descriveremo in dettaglio "errore". Per ora, supponiamo "errore" è la differenza tra la previsione e un'etichetta di regressione. Il modello debole (ovvero "errore") viene aggiunto al modello forte con un segno negativo per ridurre l'errore del modello forte.

Il boosting graduato è iterativo. Ogni iterazione richiama la seguente formula:

\[ F_{i+1} = F_i - f_i \]

dove:

  • $F_i$ è il modello forte al passaggio $i$.
  • $f_i$ è il modello debole al passaggio $i$.

Questa operazione si ripete fino a quando non viene soddisfatto un criterio di interruzione, ad esempio un numero massimo di iterazioni o se il modello (strong) inizia a adattarsi a un set di dati di convalida separato.

Vediamo l'aumento di gradiente su un semplice set di dati di regressione in cui:

  • L'obiettivo è prevedere $y$ da $x$.
  • Il modello forte è inizializzato come una 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:

Un grafico con i dati empirici reali per un elemento, x, e la relativa etichetta, y. La trama è una serie di onde sinusoidali leggermente inumidite.

Figura 25. Un set di dati regressivo sintetico con una funzionalità numerica.

 

Ecco tre grafici dopo la prima iterazione dell'algoritmo di boosting gradiente:

Tre lotti. Il primo grafico mostra la previsione del modello forte, che è una retta di pendenza 0 e intercetta y 0. Il secondo grafico mostra l'errore del modello forte, che è una serie di onde sinusoidali. Il terzo grafico mostra la previsione del modello debole, che è un insieme di onde quadrate.

Figura 26. Tre grafici dopo la prima iterazione.

 

Tieni presente quanto segue in merito alle trame 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 si concentra principalmente sulla parte sinistra dello spazio delle caratteristiche (la parte con la maggior quantità di varianti, pertanto l'errore maggiore è relativo al modello costante errato).

Di seguito vengono mostrate le stesse trame per un'altra iterazione dell'algoritmo:

Tre lotti. Il primo grafico mostra la previsione del modello forte, che è il contrario della previsione del modello debole della figura precedente. Il secondo grafico mostra l'errore del modello forte, che è un insieme rumoroso
di onde sinusoidali. Il terzo grafico mostra la previsione del modello debole, che contiene un paio di onde quadrate.

Figura 27. Tre grafici dopo la seconda iterazione.

 

Tieni presente quanto segue in merito alle trame nella Figura 27:

  • Il modello forte ora contiene la previsione del modello debole dell'iterazione precedente.
  • Il nuovo errore del modello avanzato è un po' più piccolo.
  • La nuova previsione del modello debole si concentra ora sulla parte destra dello spazio delle funzionalità.

Eseguiamo l'algoritmo per altre 8 iterazioni:

Le trame mostrano che il modello forte diventa gradualmente più vicino alla verità di base, mentre la previsione del modello debole diventa gradualmente, più debole.

Figura 28. Tre grafici dopo la terza e la decima iterazione.

 

Nella Figura 28, tieni presente che la previsione di un modello efficace inizia a assomigliare alla trama del set di dati.

Queste cifre illustrano l'algoritmo di boost gradiente utilizzando gli alberi decisionali come studenti deboli. Questa combinazione è chiamata albero con gradiente graduato (decisione).

Le trame precedenti suggeriscono l'essenza del boosting gradiente. Tuttavia, in questo esempio mancano le seguenti due operazioni reali:

  • Ritiro
  • Ottimizzazione dei valori delle foglie con un passaggio del metodo di Newton

Riduzione

Il modello debole $f_i$ viene moltiplicato per un valore piccolo $\nu$ (ad esempio, $\nu = 0,1$) prima di essere aggiunto al modello forte $F_i$. Questo valore piccolo è chiamato restringimento. In altre parole, invece di ogni iterazione utilizzando la formula seguente:

\[ F_{i+1} = F_i - f_i \]

Ogni iterazione utilizza la formula seguente:

\[ F_{i+1} = F_i - \nu f_i \]

Il ritiro del boosting di gradienti è analogo al tasso di apprendimento nelle reti neurali. La riduzione controlla la velocità di apprendimento del modello efficace, aiutando a limitare l'overfitting. In altre parole, un valore di ritiro più vicino a 0,0 riduce il overfit più di un valore di ritiro più vicino a 1,0.

Nel nostro codice riportato sopra, la riduzione potrebbe essere implementata come segue:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions