2015-08-11 10 views
14

In sklearn, GridSearchCV può prendere una pipeline come parametro per trovare il miglior stimatore attraverso la convalida incrociata. Tuttavia, la solita convalida croce è come questo: enter image description herecome implementare il walk-forward testing in sklearn?

da attraversare convalidare un dati di serie temporali, i dati di allenamento e di test sono spesso suddivisi in questo modo: enter image description here

Vale a dire, i dati di prova dovrebbero essere sempre prima dei dati di allenamento.

Il mio pensiero è:

  1. scrivere la mia versione di classe k volte e passarlo a GridSearchCV in modo da poter godere della comodità di pipeline. Il problema è che sembra difficile consentire a GridSearchCV di utilizzare indici specifici di dati di addestramento e test.

  2. Scrivere una nuova classe GridSearchWalkForwardTest che è simile a GridSearchCV, sto studiando il codice sorgente grid_search.py ​​e trovo che è un po 'complicato.

Qualsiasi suggerimento è benvenuto.

+0

Vedere https://github.com/scikit-learn/scikit-learn/issues/3202 – yangjie

risposta

1

La mia opinione è che dovresti provare a implementare il tuo GridSearchWalkForwardTest. Ho usato GridSearch una volta per fare il training e implementato lo stesso GridSearch da solo e non ho ottenuto gli stessi risultati, anche se dovessi.

Quello che ho fatto alla fine sta usando la mia funzione. Hai più controllo sull'allenamento e sul set di test e hai più controllo sui parametri da te addestrati.

2

Penso che sia possibile utilizzare uno Time Series Split anziché la propria implementazione o come base per l'implementazione di un metodo CV esattamente come lo si descrive.

Dopo aver scavato un po ', sembra che qualcuno abbia aggiunto un max_train_size a TimeSeriesSplit in this PR, che sembra come se facesse quello che vuoi.