Sto cercando di risolvere un problema di apprendimento automatico. Ho un set di dati specifico con l'elemento serie temporale. Per questo problema sto usando la nota libreria Python - sklearn
. Ci sono molti iteratori di convalida incrociati in questa libreria. Inoltre ci sono diversi iteratori per definire autonomamente la convalida incrociata. Il problema è che non so davvero come definire una semplice convalida incrociata per le serie temporali. Ecco un buon esempio di quello che sto cercando di ottenere:sklearn: Convalida incrociata definita dall'utente per i dati delle serie temporali
Supponiamo di avere diversi periodi (anni) e vogliamo dividere il nostro set di dati in blocchi diversi come segue:
data = [1, 2, 3, 4, 5, 6, 7]
train: [1] test: [2] (or test: [2, 3, 4, 5, 6, 7])
train: [1, 2] test: [3] (or test: [3, 4, 5, 6, 7])
train: [1, 2, 3] test: [4] (or test: [4, 5, 6, 7])
...
train: [1, 2, 3, 4, 5, 6] test: [7]
posso' Capisco davvero come creare questo tipo di convalida incrociata con gli strumenti di sklearn. Probabilmente dovrei usare PredefinedSplit
da sklearn.cross_validation
così:
train_fraction = 0.8
train_size = int(train_fraction * X_train.shape[0])
validation_size = X_train.shape[0] - train_size
cv_split = cross_validation.PredefinedSplit(test_fold=[-1] * train_size + [1] * validation_size)
Risultato:
train: [1, 2, 3, 4, 5] test: [6, 7]
Ma ancora non è così buono come i dati precedenti suddivisi
quali sono le variabili nel set di dati? perché è importante usare le serie temporali per dividere, perché non dividerci solo casualmente? – maxymoo
È possibile generare le divisioni senza l'uso di scikit-learn, come segue: 'cv_split = [(data [: i], data [i:]) per i in range (1, len (data))]'. Cosa ne pensi? –
@maxymoo, La ragione per non dividersi casualmente con i dati delle serie temporali è che il tempo potrebbe importare (non solo le altre funzionalità che hai identificato) ma "in the wild" non potrai mai addestrare il tuo modello sui dati del futuro. Pertanto, durante il test del modello, è necessario comportarsi in modo simile e non addestrare i dati dopo la/le data/e di test. – dslack