¿Existe una regla general sobre cómo dividir un conjunto de datos en conjuntos de capacitación y validación?

195

¿Existe una regla general sobre cómo dividir mejor los datos en conjuntos de capacitación y validación? ¿Es aconsejable una división de 50/50? ¿O hay claras ventajas de tener más datos de entrenamiento en relación con los datos de validación (o viceversa)? ¿O esta elección depende de la aplicación?

He estado utilizando principalmente un 80% / 20% de datos de entrenamiento y validación, respectivamente, pero elegí esta división sin ninguna razón de principios. ¿Alguien con más experiencia en aprendizaje automático puede aconsejarme?

robguinness
fuente
Si no tiene demasiados datos disponibles, considere en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Respuestas:

221

Hay dos preocupaciones en competencia: con menos datos de entrenamiento, las estimaciones de sus parámetros tienen una mayor variación. Con menos datos de prueba, su estadística de rendimiento tendrá una mayor variación. En términos generales, debe preocuparse por dividir los datos de modo que ninguna de las variaciones sea demasiado alta, lo que tiene más que ver con el número absoluto de instancias en cada categoría en lugar del porcentaje.

Si tiene un total de 100 instancias, probablemente esté atrapado con la validación cruzada ya que ninguna división individual le dará una variación satisfactoria en sus estimaciones. Si tiene 100,000 instancias, realmente no importa si elige una división 80:20 o una división 90:10 (de hecho, puede elegir usar menos datos de entrenamiento si su método es particularmente computacionalmente intensivo).

Suponiendo que tiene suficientes datos para realizar los datos de prueba adecuados (en lugar de la validación cruzada), la siguiente es una forma instructiva de controlar las variaciones:

  1. Divida sus datos en capacitación y pruebas (80/20 es un buen punto de partida)
  2. Divida los datos de entrenamiento en entrenamiento y validación (nuevamente, 80/20 es una división justa).
  3. Submuestree selecciones aleatorias de sus datos de entrenamiento, entrene al clasificador con esto y registre el rendimiento en el conjunto de validación
  4. Pruebe una serie de carreras con diferentes cantidades de datos de entrenamiento: muestree aleatoriamente el 20%, digamos, 10 veces y observe el rendimiento en los datos de validación, luego haga lo mismo con 40%, 60%, 80%. Debería ver un mayor rendimiento con más datos, pero también una menor varianza entre las diferentes muestras aleatorias.
  5. Para controlar la varianza debido al tamaño de los datos de prueba, realice el mismo procedimiento a la inversa. Entrene en todos sus datos de entrenamiento, luego muestree aleatoriamente un porcentaje de sus datos de validación varias veces y observe el rendimiento. Ahora debería encontrar que el rendimiento medio en muestras pequeñas de sus datos de validación es aproximadamente el mismo que el rendimiento en todos los datos de validación, pero la variación es mucho mayor con números más pequeños de muestras de prueba
Ben Allison
fuente
Gracias, esto también es muy útil! Voy a darle una oportunidad. Para su información, tengo alrededor de 6000 instancias de datos de entrenamiento. Estoy usando SVM, por lo que el rendimiento es un problema.
robguinness
1
FWIW, la variación en el rendimiento se puede calcular clasificando todas las instancias una vez, calificando las decisiones sobre si son correctas o no, y luego tomando muestras de estas decisiones en lugar de instancias de prueba para producir los efectos de usar diferentes tamaños de conjuntos de prueba
Ben Allison
Y 6000 instancias deberían ser suficientes para que las diferencias entre usar el 10% o el 20% para las pruebas no sean tan grandes (puede confirmar esto usando el método que describo)
Ben Allison
1
Hola de nuevo. Estoy un poco confundido en el punto 5. Usted dijo "luego muestree aleatoriamente un porcentaje de sus datos de validación varias veces". ¿Querías ver datos de prueba en su lugar? Si entiendo bien, debería dividir mis datos primero en conjuntos de datos de entrenamiento y prueba, luego dividir parte de mi conjunto de datos de entrenamiento en un conjunto de datos de validación. Entonces, en el paso 5, si estoy midiendo la varianza en los datos de mi prueba, ¿no debería muestrear al azar las poblaciones de mis datos de prueba? ¿O me estoy perdiendo algo?
robguinness
2
El punto es que mientras juegas con los parámetros, observando los efectos de cambiar las cosas, debes usar tus datos de validación para probar. Si comienza a mirar los datos de su prueba y elige estrategias basadas en lo que le da la puntuación más alta en eso, obtendrá una sensación inflada del rendimiento de su método. Cuando todos los parámetros se establecen y se toman decisiones, a continuación, ejecutar en los datos de prueba. Esto le permite saber qué tipo de rendimiento obtendrá con datos realmente nuevos y no observados (¡que es probablemente lo que le interesa!)
Ben Allison
54

Se sorprendería al descubrir que 80/20 es una proporción bastante común, a menudo conocida como el principio de Pareto . Por lo general, es una apuesta segura si usa esa proporción.

Sin embargo, dependiendo de la metodología de capacitación / validación que emplee, la relación puede cambiar. Por ejemplo: si usa una validación cruzada 10 veces, entonces terminaría con un conjunto de validación del 10% en cada pliegue.

Se ha investigado cuál es la proporción adecuada entre el conjunto de entrenamiento y el conjunto de validación :

La fracción de patrones reservados para el conjunto de validación debe ser inversamente proporcional a la raíz cuadrada del número de parámetros ajustables libres.

En su conclusión, especifican una fórmula:

Relación de tamaño de conjunto de validación (v) a conjunto de entrenamiento (t), v / t, escalas como ln (N / h-max), donde N es el número de familias de reconocedores y h-max es la mayor complejidad de esas familias.

Lo que quieren decir con complejidad es:

Cada familia de reconocedores se caracteriza por su complejidad, que puede o no estar relacionada con la dimensión VC , la longitud de la descripción, el número de parámetros ajustables u otras medidas de complejidad.

Tomando la primera regla de oro (el conjunto de medievalización debe ser inversamente proporcional a la raíz cuadrada del número de parámetros ajustables libres), puede concluir que si tiene 32 parámetros ajustables, la raíz cuadrada de 32 es ~ 5.65, la fracción debe ser 1 / 5.65 o 0.177 (v / t). Aproximadamente el 17.7% debe reservarse para validación y el 82.3% para capacitación.

Kiril
fuente
2
El documento, para aquellos que podrían tener problemas para cargarlo como yo (no estoy seguro de por qué), es: "Una ley de escala para el tamaño de relación de conjunto de entrenamiento de validación" (I. Guyon, 1996, Informe técnico no publicado, AT&T Bell Laboratories )
theforestecologist
3
¿Tiene sentido la regla general? Si tiene dos parámetros ajustables, la relación es 0.77, lo que significa que usaría el 77% para la validación. En mi opinión, el problema es la definición de parámetro libre. Para un SVM lineal, puede establecer el parámetro de penalización C para el término de error, que es un parámetro, pero la complejidad es mayor Dimensión + 1 para un SVM.
Reed Richards
44
Entonces, ¿debería ser el tamaño de mi prueba 1 si tengo una red neuronal ...?
YellowPillow
51

El año pasado, tomé el curso de aprendizaje automático en línea del profesor: Andrew Ng. Su recomendación fue:

Entrenamiento : 60%

Validación cruzada : 20%

Prueba : 20%

Upul Bandara
fuente
20
coursera.org/learn/deep-neural-network/lecture/cxG1s/… in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Sugiere que podría ser 99.5: 0.25: 0.25.
Nobu
9

Bueno, deberías pensar en una cosa más.

Si tiene un conjunto de datos realmente grande, como 1,000,000 de ejemplos, la división 80/10/10 puede ser innecesaria, porque 10% = 100,000 ejemplos no es necesario para decir que el modelo funciona bien.

Tal vez 99 / 0.5 / 0.5 es suficiente, porque 5,000 ejemplos pueden representar la mayor parte de la varianza en los datos y puede decir fácilmente que el modelo funciona bien en base a estos 5,000 ejemplos en prueba y desarrollo

DavidS1992
fuente
0.5% en el conjunto de validación podría ser suficiente, pero diría que está tomando un riesgo grande e innecesario ya que no sabe si es suficiente o no. Su entrenamiento puede salir mal fácilmente si está usando un conjunto de validación demasiado pequeño, pero es casi imposible que salga mal usando un conjunto de validación grande.
Björn Lindqvist
2

Supongamos que tiene menos datos, sugiero probar 70%, 80% y 90% y probar cuál está dando mejores resultados. En el caso del 90%, hay posibilidades de que para una prueba del 10% obtenga una precisión deficiente.

Rishi Bansal
fuente
1

Quizás un 63.2% / 36.8% es una opción razonable. La razón sería que si tuviera un tamaño de muestra total n y quisiera muestrear aleatoriamente con reemplazo (también conocido como volver a muestrear, como en el bootstrap estadístico) n casos fuera de la n inicial , la probabilidad de que se seleccione un caso individual en el volver a muestrear sería aproximadamente 0.632, siempre que n no sea demasiado pequeño, como se explica aquí: https://stats.stackexchange.com/a/88993/16263

Para una muestra de n = 250, la probabilidad de que se seleccione un caso individual para una re-muestra de 4 dígitos es 0.6329. Para una muestra de n = 20000, la probabilidad es 0.6321.

usuario16263
fuente
1

Todo depende de los datos disponibles. Si tiene una cantidad considerable de datos, entonces 80/20 es una buena opción como se mencionó anteriormente. Pero si no realiza la validación cruzada con una división 50/50, podría ayudarlo mucho más y evitar que cree un modelo que ajuste demasiado sus datos de entrenamiento.

Mayank
fuente