¿Deberíamos hacer siempre CV?

9

Mi pregunta: ¿debería hacer CV incluso para un conjunto de datos relativamente grande?

Tengo un conjunto de datos relativamente grande y aplicaré un algoritmo de aprendizaje automático al conjunto de datos.

Como mi PC no es rápida, el CV (y la búsqueda en la cuadrícula) a veces lleva demasiado tiempo. En particular, un SVM nunca termina debido a muchos parámetros de ajuste. Por lo tanto, si hago un CV, entonces necesito elegir datos relativamente pequeños.

Por otro lado, el conjunto de validación también debe ser grande, por lo que creo que es una buena idea usar un conjunto de validación que tenga el mismo tamaño (o mayor) que el conjunto de entrenamiento. (A saber, en lugar de CV, uso un gran conjunto de validación para el ajuste de parámetros).

Así que ahora tengo al menos dos opciones.

  1. hacer CV en un pequeño conjunto de datos.
  2. use un conjunto de entrenamiento relativamente grande y un conjunto de validación sin CV.
  3. Otra idea.

Cual es la mejor idea? Las opiniones teóricas o prácticas son bienvenidas.

H. Shindoh
fuente
1
Esta pregunta obviamente debería ser una CW.
H. Shindoh
1
¿Qué es grande? Cuantas observaciones ¿Cuántas características / variables / regresores?
Jim
1
Depende de una PC. Es decir, no estoy pensando en "big data", que requieren varias computadoras.
H. Shindoh el

Respuestas:

3

En general, no tiene que usar validación cruzada todo el tiempo. El punto de CV es obtener una estimación más estable de la generalización de su clasificador que obtendría utilizando solo un conjunto de prueba. No tiene que usar CV si su conjunto de datos es enorme, por lo que agregar datos a su conjunto de entrenamiento no mejorará mucho su modelo, y algunas clasificaciones erróneas en su conjunto de prueba solo por casualidad, realmente no cambiarán su métrica de rendimiento .

Al tener un pequeño conjunto de entrenamiento y un gran conjunto de prueba, su estimación estará sesgada. Por lo tanto, probablemente será peor de lo que obtendría al usar más datos de entrenamiento e hiperparámetros óptimos que descubrió que podrían ser diferentes para un conjunto de datos más grande, simplemente porque más datos requerirán menos regularización.

Sin embargo, obtener hiperparamters óptimos no es la parte importante de todos modos y no mejorará drásticamente el rendimiento. Debe enfocar su energía para comprender el problema, crear buenas características y obtener datos en buena forma.

Aquí hay algunas cosas que puede considerar para acelerar las cosas:

  1. Entrenarlo con menos características. Utilice la selección de características y / o la reducción de dimensionalidad para disminuir el tamaño de su problema
  2. Use kernel precached para SVM
  3. Utilice algoritmos que no necesiten seleccionar hiperparámetros en una cuadrícula. Especialmente lineales como la regresión logística con cresta / lazo / penalización neta elástica o incluso SVM lineal. Dependiendo de la implementación, esos clasificadores pueden ajustar modelos para todos los hiperparámetros en la ruta seleccionada por el costo de ajustar solo uno
  4. use una implementación más rápida para su tipo de problema (tendrá que buscarlo en Google)

e incluso con una computadora más lenta, puedes:

  1. Usa más núcleos
  2. Usar GPU
rep_ho
fuente
2

La validación cruzada es una herramienta para estimar la varianza de su métrica de rendimiento debido a la aleatoriedad en los datos (y tal vez en el algoritmo de aprendizaje si no es determinista).

Entonces, si usa solo una división, por ejemplo, 80% de entrenamiento + 20% de prueba e informa su métrica de rendimiento de este solo experimento, hay buenas posibilidades de que cualquiera que intente reproducir su experimento utilizando exactamente los mismos parámetros encuentre una cifra de rendimiento diferente (a veces muy diferente). A menos que, por supuesto, proporcione la misma división exacta que no tiene sentido.

Para volver a su pregunta, creo que definitivamente debe usar CV para informar su rendimiento (por ejemplo, hacer un CV de 10 veces e informar la desviación estándar y media de la métrica de rendimiento). Ahora, para ajustar su algoritmo, puede usar un conjunto de validación mucho más pequeño muestreado del conjunto de entrenamiento (asegúrese de que no esté incluido en el conjunto de prueba).

Si tiene miedo de no encontrar los mejores hiperparámetros utilizando un conjunto pequeño, entonces probablemente esté ajustando su algoritmo a los detalles del conjunto de datos. Si no puede encontrar una configuración con una muestra pequeña que ofrezca un rendimiento razonable entre todos los pliegues, entonces el algoritmo probablemente no sea muy útil en la práctica.

También tenga en cuenta que algunos algoritmos son simplemente demasiado lentos / no escalan bien en algunas configuraciones. Esto también es parte de la selección práctica de modelos.

Dado que usted menciona SVM, por supuesto, la mayoría de las implementaciones serán lentas cuando intente encontrar parámetros para núcleos no lineales mediante la búsqueda de cuadrícula. La búsqueda de cuadrícula tiene una complejidad exponencial, así que úsela con muy pocos parámetros. También tenga en cuenta que la mayoría de las bibliotecas proporcionan parámetros predeterminados razonables (o al menos usted establece un parámetro y hay heurísticas para configurar los otros).

oDDsKooL
fuente