¿Cómo podría dividir aleatoriamente una matriz de datos y el vector de etiqueta correspondiente en un X_train, X_test, X_val, y_train, y_test, y_val con Sklearn? Que yo sepa, sklearn.cross_validation.train_test_split
solo es capaz de dividirse en dos, no en tres ...
machine-learning
scikit-learn
Hendrik
fuente
fuente
train_test_split
, estás haciendo esto durante la división 80/20 anterior. Entonces su valor es 20% de 80%. Las proporciones divididas no son muy sencillas de esta manera.Hay una gran respuesta a esta pregunta sobre SO que usa numpy y pandas.
El comando (ver la respuesta para la discusión):
produce una división del 60%, 20%, 20% para conjuntos de entrenamiento, validación y prueba.
fuente
.6
significado 60% ... pero ¿qué.8
significa?np.split
se dividirá al 60% de la longitud de la matriz aleatoria, luego al 80% de la longitud (que es un 20% adicional de datos), dejando así un 20% restante de los datos. Esto se debe a la definición de la función. Puedes probar / jugar con:,x = np.arange(10.0)
seguido denp.split(x, [ int(len(x)*0.6), int(len(x)*0.8)])
En la mayoría de los casos, no se dividirá una vez, pero en un primer paso dividirá sus datos en un conjunto de entrenamiento y prueba. Posteriormente, realizará una búsqueda de parámetros que incorpore divisiones más complejas, como la validación cruzada con un algoritmo de 'división de plegado en k' o 'omisión de una salida (LOO)'.
fuente
Puedes usar
train_test_split
dos veces. Creo que esto es más sencillo.De esta manera,
train
,val
,test
conjunto será 60%, 20%, 20% del conjunto de datos, respectivamente.fuente
La mejor respuesta anterior no menciona que separarse dos veces usando
train_test_split
no cambiar los tamaños de partición no dará la partición inicialmente prevista:Luego, la parte de los conjuntos de validación y prueba en x_remain cambia y podría contarse como
En esta ocasión, todas las particiones iniciales se guardan.
fuente
Aquí hay otro enfoque (supone una división tripartita igual):
Esto puede hacerse más conciso, pero lo mantuve detallado para fines de explicación.
fuente
Dado
train_frac=0.8
, esta función crea una división del 80% / 10% / 10%:fuente
Agregando a la respuesta de @ hh32 , respetando las proporciones predefinidas como (75, 15, 10):
fuente
Extensión de la respuesta de @ hh32 con relaciones preservadas.
Como el conjunto de datos restante se reduce después de la primera división, se deben calcular nuevas relaciones con respecto al conjunto de datos reducido resolviendo la ecuación:
fuente