sklearn: validación cruzada definida por el usuario para datos de series temporales
Estoy tratando de resolver un problema de aprendizaje automático. Tengo un conjunto de datos específico conseries de tiempo elemento. Para este problema estoy usando la conocida biblioteca de Python:sklearn
. Hay muchos iteradores de validación cruzada en esta biblioteca. También hay varios iteradores para definir la validación cruzada usted mismo. El problema es que realmente no sé cómo definir la validación cruzada simple para series de tiempo. Aquí hay un buen ejemplo de lo que intento obtener:
Supongamos que tenemos varios períodos (años) y queremos dividir nuestro conjunto de datos en varios fragmentos de la siguiente manera:
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]
Realmente no puedo entender cómo crear este tipo de validación cruzada con las herramientas de sklearn. Probablemente debería usarPredefinedSplit
desklearn.cross_validation
como eso:
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)
Resultado:
train: [1, 2, 3, 4, 5] test: [6, 7]
Pero aún así no es tan bueno como una división de datos anterior