¿Por qué no entrenar el modelo final en todos los datos después de realizar los datos de prueba de ajuste de hiperparámetro y los datos de validación de la base de selección de modelo?

9

Por datos enteros me refiero a tren + prueba + validación

Una vez que haya arreglado mi hiperparámetro con los datos de validación y elija el modelo con los datos de la prueba, ¿no sería mejor tener un modelo entrenado en todos los datos para que los parámetros estén mejor entrenados en lugar de tener el modelo entrenado solo datos del tren

Apoorva Abhishekh
fuente
2
NUNCA debe arreglar sus hiperparámetros utilizando sus datos de prueba. Acaba de estropear todo su experimento al eliminar su grupo de control ciego (conjunto de prueba).
JahKnows
@JahKnows Después de terminar de ajustar los hiperparámetros para un modelo, no entiendo el daño, excepto que no sabré qué tan bueno se generaliza en un conjunto de datos diferente. ¿Cómo estropeé mi experimento? ¿Me estoy perdiendo de algo?
Apoorva Abhishekh

Respuestas:

8

La pregunta está bajo una suposición errónea. Muchas personas hacen lo que usted dice que "no pueden" hacer.

De hecho, la implementación de búsqueda de cuadrícula en el paquete sklearn ampliamente implementado hace exactamente eso. A menos refit=Falseque vuelva a entrenar el modelo final utilizando todos los datos.

Creo que para algunos hiperparámetros esto podría no ser muy deseable, ya que son relativos al volumen de datos. Por ejemplo, considere la min_samples_leaftáctica de poda previa para un árbol de decisión . Si tiene más datos, la poda previa puede no funcionar como lo desea.

Pero, de nuevo, la mayoría de las personas de hecho se vuelven a entrenar utilizando todos los datos después de la validación cruzada, para que terminen con el mejor modelo posible.

Anexo: @NeilSlater dice a continuación que algunas personas realizan una suspensión además del CV. En otras palabras, tienen una división de prueba de entrenamiento y luego realizan la selección del modelo en el entrenamiento. Según él, vuelven a entrenar utilizando la división del conjunto de entrenamiento original, pero no el conjunto de prueba. El conjunto de prueba se utiliza para realizar una estimación final del modelo. Personalmente, veo tres fallas en esto: (a) no resuelve el problema que mencioné, ya que algunos hiperparámetros dependen del volumen de entrenamiento ya que de todos modos vuelves a entrenar, (b) cuando pruebas muchos modelos, prefiero más sofisticados métodos como la validación cruzada anidada para que no se desperdicien datos, y (c) la retención es un método horrible para inferir cómo se generalizará un modelo cuando tenga pocos datos.

Ricardo Cruz
fuente
La característica se trata de reutilizar la validación cruzada, aún no es aconsejable reutilizar los datos de prueba, ya que solo tiene suposiciones de la validación cruzada y ninguna medida de rendimiento. Cualquier parámetro de error o problema (como el ejemplo que da) podría empeorar el modelo de forma indetectable.
Neil Slater
@NeilSlater No entiendo lo que dijiste aquí: "La característica es sobre la reutilización de la validación cruzada"
Ricardo Cruz
"feature" -> la refitopción de la función GridSearchCV. No se ajusta para incluir datos de prueba retenidos (ni siquiera puede ver esos datos).
Neil Slater
@NeilSlater, puede verificar fácilmente el código por sí mismo si no me cree (aquí) . Si refit = True, entonces "ajusta el mejor estimador usando todo el conjunto de datos".
Ricardo Cruz
1
@NeilSlater, esa no es mi experiencia, pero he agregado su experiencia a mi comentario para que otros puedan beneficiarse de ella. Gracias.
Ricardo Cruz
1

Sí tu puedes.

Como se supone que los datos de prueba provienen de una distribución similar para entrenar datos, no romperá su modelo. Si ha entrenado el modelo correctamente, no notará ningún cambio significativo (excepto una mejor métrica de precisión en los datos de prueba / validación anteriores).

Pero es raramente cierto que los datos de prueba provienen precisamente de la misma distribución que los datos del tren, por lo que en el caso de una aplicación real puede obtener una mejor generalización de su modelo.

Il'ya Zhenin
fuente
1
El problema con la inclusión de los datos de prueba según esta sugerencia es que ahora no tiene una medición de qué tan bien generaliza el modelo. Sí, puede esperar que se generalice mejor. Sin embargo, no lo sabe , porque ha eliminado su capacidad de medirlo. Sugiero agregar esa advertencia y explicar por qué a veces esto todavía está bien (por ejemplo, al recibir nuevos datos, es posible que pueda tratarlo como un nuevo conjunto de pruebas y construir una nueva medición con el tiempo, mientras que con suerte aprovecha el mejor modelo - aunque es un riesgo)
Neil Slater
@NeilSlater: Entiendo que he eliminado mi capacidad de medir qué tan bueno se generalizará en un conjunto de datos diferente. Pero si tengo tanto la prueba como la suspensión, incluso después de un ajuste de hiperparámetro, puedo entrenar a mi modelo nuevamente en train + test, todavía me quedaré con la suspensión para verificar si mi modelo se generaliza. Sé que esto es diferente de lo que pregunté. Pero solo quiero saber tu punto de vista.
Apoorva Abhishekh
1
@ApoorvaAbhishekh: Si tenía otro conjunto de datos de reserva, entonces sí, puede usarlo como el nuevo conjunto de prueba contra el nuevo modelo entrenado en new_train = {tren viejo, viejo cv, prueba vieja}. Entonces obtendrías una medida de generalización. Aunque debe tener cuidado de no usarlo en exceso, si resulta que hay un problema con el nuevo conjunto combinado (por ejemplo, la detención temprana debe cambiar debido a más datos), entonces no puede usarlo como el nuevo conjunto de cv. . . a menos que tenga otra reserva establecida en reserva. . .
Neil Slater
@NeilSlater En teoría, necesita un nuevo conjunto de datos para conocer el rendimiento. En la práctica, puede estar seguro de que su modelo funciona bien, ya que trabajó con él durante mucho tiempo y sabe qué esperar. Pero, por lo general, también tiene otros datos para verificar el rendimiento de un modelo, por ejemplo, en visión artificial: datos sin etiquetar. No está bien, pero también funciona. Claro que es un caso extremo, pero quiero decir que podría funcionar. Yo siempre tengo un conjunto de pruebas que no mezclo en el entrenamiento.
Il'ya Zhenin
1

La respuesta a esta pregunta depende del algoritmo de entrenamiento (tecnología) que utilice. Por ejemplo, he visto algunos enfoques en la clasificación de conjuntos donde los conjuntos de entrenamiento y validación (pero no pruebas) se combinan al final. Es muy importante saber que incluso la validación se usa principalmente para decidir los hiperparámetros, algunos de estos hiperparámetros pueden ser una función de los datos utilizados para el entrenamiento. Por ejemplo, en la validación de DNN solíamos saber cuándo parar, ya que el sobreajuste puede ocurrir como resultado de seguir ajustando los parámetros (pesos) de la red, necesitamos una forma de saber cuándo parar. Sin el conjunto de validación, caminará ciegamente en el proceso de capacitación. Por otro lado, si usa exactamente el mismo número de iteraciones que se especificó anteriormente, existe un alto problema que no obtendrá de estas muestras adicionales. El conjunto de prueba no debe tocarse en absoluto, como se indicó anteriormente sin el conjunto de prueba, no tendrá ningún método para evaluar su modelo. Esto es un juego de azar, NO PUEDE entregar ningún modelo o solución sin la estimación de su precisión en la verdadera distribución de datos (que representa los datos de prueba).

Bashar Haddad
fuente
Después de entrenar en datos de entrenamiento, sintonizar hiperparámetros en datos de validación y elegir la base del modelo de los datos de prueba, ¿puedo entrenar mi base de modelo con todos los datos? O bien, ¿puedo combinar los datos de entrenamiento y los datos de validación después de haber terminado con el ajuste de hiperparámetros y estimar la precisión utilizando los datos de prueba? Disculpas por escribirlo incorrectamente. Lo he corregido ahora.
Apoorva Abhishekh