Impilamento dei modelli, algoritmo Super Learner

Aug 29 2020

Recentemente ho iniziato a studiare ensemble in ML, in particolare Super Learner Algorithm. Ad essere sincero, anche se ho letto diversi articoli relativi a questo argomento, sono un po 'confuso. Voglio andare passo dopo passo e fare tutto manualmente, in modo da poter capire veramente il processo.

L'algoritmo viene solitamente descritto come la sequenza dei seguenti passaggi:

  1. Addestra ciascuno degli algoritmi di base L sul set di addestramento.
  2. Esegui la convalida incrociata k-fold su ciascuno di questi studenti e raccogli i valori previsti con convalida incrociata da ciascuno degli algoritmi L.
  3. Gli N valori stimati con convalida incrociata di ciascuno degli algoritmi L possono essere combinati per formare una nuova matrice N x L. Questa matrice, insieme al vettore di risposta originale, è chiamata dati di "livello uno". (N = numero di righe nel training set)
  4. Addestra l'algoritmo di metalearning sui dati di livello uno.
  5. Il "modello di insieme" è costituito dai modelli di apprendimento di base L e dal modello di metalearning, che possono quindi essere utilizzati per generare previsioni su un set di test.

Ho diverse domande:

  1. Perché il primo e il secondo passaggio sono separati? Per semplicità, supponiamo che non sia necessario regolare alcun parametro. Significa che devo solo addestrare un modello, xgbTree , ad esempio, utilizzando k-fold CV? Per esempio:
tc_XGB <- trainControl(method = "cv", number = 5, savePred = TRUE)

fit_XGB <- train(x = input_x, y = input_y, method = "xgbTree",
           trControl = train_control_final, tuneGrid = Grid_final)

Nota : input_xe input_yprovengono da un set di allenamento.

  1. Il passaggio successivo consiste nel raccogliere i valori previsti con convalida incrociata . Devo usare fit_XGB $preded estrarre tutte le previsioni con convalida incrociata e ripetere questa azione L volte (L - un numero di algoritmi)?

Direi che tutti i passaggi successivi mi sono più o meno chiari. Ho dei dubbi, tuttavia, non riesco proprio a capire cosa c'è di sbagliato nel mio approccio.

Risposte

1 BenReiniger Aug 31 2020 at 02:01

Domanda 1

Penso che la confusione nasca dalla pratica comune che rende la separazione poco chiara: "addestrare un modello ... usando k-fold CV" non è effettivamente una cosa. UN$k$-fold cross-validation non produce un modello addestrato. Tuttavia, nella maggior parte dei pacchetti di ottimizzazione degli iperparametri, caretinclusi, un modello finale viene addestrato automaticamente sull'intero set di addestramento dopo che la convalida incrociata sceglie un set di iperparametri migliore; dai documenti :

La combinazione con la statistica di ricampionamento ottimale viene scelta come modello finale e l'intero set di addestramento viene utilizzato per adattare un modello finale.

Quindi, caretsta facendo entrambi i passaggi 1 e 2 per te.

Domanda 2

Sì, funzionerà. Vedi ad esempio Come funziona precisamente la convalida incrociata in train (caret)? .

Hai detto che volevi farlo manualmente per capire, il che è positivo; ma 'da notare che c'è un pacchetto che si estende caretper eseguire tutto questo automaticamente: caretEnsemble.