R / caret: ¿entrenar y probar conjuntos versus validación cruzada?


9

Esta puede ser una pregunta tonta, pero cuando se genera un modelo con cuidado y se usa algo como LOOCVo (aún más importante) LGOCV, ¿cuál es el beneficio de dividir los datos en trenes y conjuntos de pruebas si esto es esencialmente el paso de validación cruzada? lo hace de todos modos?

Leí algunas de las preguntas relacionadas y sugirieron que algunos de los métodos de validación cruzada (por ejemplo, lo que se describe aquí en el sitio de caret ) tienen el propósito de seleccionar las características . Pero en mi caso, estoy usando randomForest( method = "rf") y kernlab( method = svmRadial), que no figuran en el grupo que intenta purgar predictores.

Entonces, mi pregunta es si uso algo como cross_val <- trainControl(method = "LGOCV", p = 0.8), ¿no es lo mismo que entrenar en el 80% de mis datos, probar el modelo resultante en el 20% restante y hacer eso una y otra vez para tener una idea de qué tan bien modelo está trabajando?

Si es así, ¿hay alguna necesidad de dividir mis datos en conjuntos de trenes / pruebas?

PD: en parte, pregunto porque estoy realizando modelos en prototipos DOE generados empíricamente (piense en productos duros en los que modificamos las entradas y luego utilizamos métodos de prueba para medir varios atributos sobre el prototipo).

Como tal, no tengo un gran conjunto de datos con muchos niveles de predictores superpuestos para modelar: a menudo ejecutamos una prueba en cada punto de interés del DOE, ya que la generación de datos es costosa en este caso. Por lo tanto, me gustaría usar todos los datos que pueda para un modelo preciso, pero quería comprobar aquí que no me estoy perdiendo algo obvio y que estoy haciendo un modelo pobre al no dividir las cosas.


Editar: En respuesta a la pregunta de @ topepo, estoy modelando atributos medidos físicamente de un compuesto en función del ajuste de las entradas químicas de la fórmula. No puedo hablar sobre mi aplicación real, pero inventaré un ejemplo basado en la formulación de pintura de látex para interiores. Estoy ejecutando experimentos diseñados donde mezclamos 4-5 productos químicos, tal vez jugamos con% de sólidos y una cantidad de tiempo para calentar la solución de polímero para ajustar el grado de polimerización.

Luego podríamos medir la reología, el peso molecular, la dureza del recubrimiento de pintura, la resistencia al agua, etc.

Tenemos réplicas decentes de varias variables, pero pocas réplicas verdaderas en el sentido de que cada nivel de DOE era exactamente el mismo. El conjunto total de datos es de ~ 80 observaciones y quizás 4-5 son repeticiones exactas. Hemos realizado 15 pruebas diferentes, y quizás se han realizado 5-6 de ellas para cada observación. Algunas de las respuestas están presentes para el 25-50% de los datos.

A partir de aquí, nos gustaría modelar los efectos de nuestros 7 predictores en las propiedades de salida y luego optimizar para apuntar a nuevos espacios de diseño que tengan más probabilidades de proporcionar las propiedades deseadas.

(De ahí mi pregunta AQUÍ . Una vez que tenga un modelo entrenado, sería bueno hacer el "reverso" y alimentar las respuestas deseadas para obtener la mejor conjetura sobre los posibles niveles de entrada para probar a continuación).


¡El conjunto de validación y el conjunto de prueba son dos cosas diferentes! Ver stats.stackexchange.com/questions/19048/… y en.wikipedia.org/wiki/Test_set
sashkello

@sashkello Gracias por eso. Esto probablemente se puede cerrar como un duplicado, y de alguna manera me perdí esa pregunta por completo. Un bit que falta podría ser: si entreno con data_set1, ¿qué considero el paso realizado por LGOCVvalidación cruzada? Según mi lectura, supongo que 1) caretitera a través de los parámetros de ajuste data_set1y luego 2) mantiene esos parámetros fijos y 3) crea un "submodelo" usando parámetros del # 1 para cada p = 0.8muestra data_set1y prueba predicciones en el 0.2 restante para medir la precisión . ¿Es ese un resumen razonable?
Hendy

Otro bit que falta: ¿dejar de lado un conjunto para probar ayuda a la precisión del modelo? Parece que solo da un conjunto imparcial para futuras pruebas. Si los datos son limitados y no hay muchos puntos de diseño superpuestos, ¿no sería mejor entrenar con el conjunto completo y confiar en la validación cruzada para una estimación de precisión?
Hendy

Con una mejor estrategia de búsqueda, esta no es útil: stats.stackexchange.com/questions/9357/… . En particular, "Creo que un factor limitante aquí es la cantidad de datos que tiene. La mayoría de las veces, ni siquiera queremos dividir los datos en particiones fijas, por lo tanto, CV". Creo que esto responde a mi pregunta (que probablemente sea específica de la naturaleza limitada de mis datos (solo 80 observaciones). ¿Parece un voto por no dividirse en estos casos?)
Hendy

Respuestas:


7

Mis pensamientos generales:

Por lo tanto, cuando esté evaluando diferentes modelos, es posible que desee ajustarlos, probar diferentes tipos de preprocesamiento, etc. hasta que encuentre lo que cree que es un buen modelo. El remuestreo puede ayudarlo a guiarlo en la dirección correcta durante ese proceso.

Sin embargo, todavía existe la posibilidad de un sobreajuste y la probabilidad de que esto suceda depende en gran medida de la cantidad de datos (y predictores) que tenga. Si tiene un poco de datos, hay algunas maneras de pensar en esto:

  • Utilice todos los datos para la capacitación, ya que cada punto de datos se suma significativamente a lo bien que funciona el modelo.
  • Deje a un lado un pequeño conjunto de prueba como verificación final de errores graves debido al sobreajuste. Las posibilidades de un ajuste excesivo con un tamaño de muestra pequeño no son pequeñas y aumentan con el número de muestras.

Caigo en el segundo campamento, pero el primero no está mal en absoluto.

Si tiene una tonelada de datos, entonces realmente no importa mucho (a menos que tenga una pequeña tasa de eventos).

Para ti:

Tienes un DOE. El tipo de diseño ayudaría a responder la pregunta. ¿Intenta interpolar entre puntos de diseño o predecir puntos de diseño que no se han probado hasta ahora?

Tienes una réplica. Me caí como si un bosque al azar estuviera golpeando un clavo con un martillo y podría resultar en un ajuste excesivo. Intentaría algo más suave como una red neuronal SVM o (jadeo).

Max


Agregué una actualización para ti arriba. He tenido curvas bastante bonitas (supongo que es subjetivo) con method = "svmRadial". Espero evaluar algunos otros, incluidos method = neuralnet, aunque en intentos anteriores he encontrado que la red neuronal es muy sensible a `set.seed (). En resumen, estamos tratando de 1) comprender mejor la relación entre las entradas / respuestas múltiples y 2) hacer las mejores conjeturas en el espacio de diseño más probable para obtener las propiedades deseadas para que podamos ejecutar DOE nuevos y más centrados frente a un DO más típico enfoque expansivo / de escopeta en términos de niveles mínimos / máximos de entrada para probar.
Hendy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.