¿Cuál es la forma más adecuada de crear un conjunto de espera: eliminar algunos sujetos o eliminar algunas observaciones de cada sujeto?

11

Tengo un conjunto de datos con 26 características y 31000 filas. Es el conjunto de datos de 38 sujetos. Es para un sistema biométrico. Entonces quiero poder identificar sujetos.

Para tener un conjunto de pruebas, sé que tengo que eliminar algunos valores.

Entonces, ¿qué es mejor hacer y por qué?

  1. (a) mantenga 30 sujetos como conjunto de entrenamiento y elimine 8 sujetos como conjunto de prueba

  2. (b) mantenga los 38 temas, pero elimine algunas filas de cada uno. Así que al final terminaré con un conjunto de entrenamiento: 24800 filas de 38 sujetos Y un conjunto de prueba: 6200 filas de 38 sujetos

Aizzaac
fuente
1
Si desea identificar sujetos, ¿cómo puede eliminar sujetos "completos" para un conjunto de prueba? El modelo entrenado en 30 sujetos solo podrá identificar estos 30 sujetos, no los 8 sujetos que nunca ha visto. Su aclaración sobre el "sistema biométrico" podría hacer que la mayoría de las respuestas existentes no sean aplicables.
ameba dice Reinstate Monica
1
Sería útil aclarar: (1) el objetivo preciso , cuál es la variable de resultado que está tratando de predecir (2) qué datos tiene y posiblemente (3) qué enfoque utiliza.
Matthew Gunn
Una vez que haya entrenado el sistema, ¿cómo se implementaría? ¿El objetivo es usarlo en personas que no están en el conjunto de capacitación? ¿Serán nuevos datos de los mismos 38 sujetos? Estoy tratando de entender cómo se supone que debe usarse el sistema y si usted está en el caso (1) o en el caso (2) de la respuesta de @ AmiTavory.
Matthew Gunn
@amoeba No tengo mucha experiencia :( Hice la pregunta porque se recomienda dividir los datos (capacitación, validación y prueba). Por lo tanto, es para eliminar algunos sujetos o algunas observaciones de cada uno O usar un conjunto de datos disponible en línea. 1) Quiero poder identificar sujetos. A quien pertenecen las características. 2) Estoy usando EEG (serie temporal). 3) Estoy usando Stratified-fold. Pero es porque obtuve una mayor precisión con él que con kfold. Solo sabía de k-fold, estratificado y omitir. Como siempre he pensado que era para compensar el desequilibrio en los datos. Pero estoy abierto a sugerencias.
Aizzaac
@MatthewGunn Creo que no sería posible usarlo con personas que no están en el conjunto de datos. Eso sería muy difícil pero muy interesante si se logra. Entonces diría el caso 1.
Aizzaac

Respuestas:

9

Creo que la respuesta de Matthew Gunn es correcta, pero me parece que el CV "a nivel de registro" puede abarcar dos conceptos diferentes:

  1. Los registros se dividen aleatoriamente en pliegues, independientemente del tema o el tiempo.

  2. Los registros se dividen en pliegues basados ​​en el tiempo, sin pliegues utilizados para el entrenamiento que contiene datos del inicio del pliegue de prueba.

En el primer caso, cualquier naturaleza de serie temporal de sus datos se ve comprometida, ya que su conjunto de entrenamiento puede incluir datos de antes y después de su conjunto de pruebas. El principio de Train / Test es que los datos de entrenamiento representan datos conocidos hasta el presente, y los datos de prueba representan datos aún no vistos (quizás literalmente del futuro).

Quizás la autocorrelación de series temporales compromete la opción # 2. Quizás el elemento de tiempo del modelo no sea realmente importante, por lo que es probable que las observaciones "pasadas" y "futuras" sean las mismas. En estos casos, ni # 1 ni # 2 es el camino a seguir.

Si solo hay estacionalidad y no tendencias, parece que está bien incluir "el futuro" en el entrenamiento de algunas asignaturas para predecir nuevas asignaturas (que se verán afectadas por la misma estacionalidad). Si hay tendencias, la capacitación sobre el futuro debería aprender algo sobre el futuro que realmente no sabría al usar el modelo en producción.

En el ejemplo del OP, parece que el tema es bueno. Pero si las tendencias y las preocupaciones sobre las series temporales formaran parte del modelo, trataría de utilizar la partición basada en el tema y el tiempo para que entrenara en un conjunto de temas antes de un punto específico en el tiempo, luego realice una prueba en los otros temas después ese punto específico en el tiempo.

Wayne
fuente
1
+1 ¡Es un punto muy importante que si hay una estructura de series de tiempo, no deberías usar el futuro para predecir el pasado! Este es un error común y peligroso en las finanzas, ya que utiliza información no disponible en el momento (porque no se conoce hasta el futuro) para predecir retornos, valores predeterminados, etc. en el tiempo . Con proyectos complicados y toneladas de datos, puede ser muy fácil cometer errores y permitir que su algoritmo de entrenamiento alcance su punto máximo en el futuro, logrando resultados que no son posibles en la realidad. ttt
Matthew Gunn
1
Yo diría que la aplicación decide cuál es la división apropiada. Por ejemplo, incluso con series de tiempo, puede ser la tarea predecir la variable dependiente para mediciones posteriores de sujetos desconocidos, lo que significaría que la división se debe hacer en función del sujeto y del tiempo.
Cbeleites descontento con SX
3
@cbeleites: De acuerdo. Esto es lo que hice en un proyecto reciente: dividir los datos en temas de entrenamiento y prueba, y solo usar datos anteriores a alguna fecha para el entrenamiento y datos posteriores a esa fecha para las pruebas, por lo que estábamos probando en temas que nunca habíamos visto, durante un período de tiempo que aún no habíamos visto. Desea apilar el mazo contra usted, sin exagerar, si realmente quiere saber qué tan bien le irá a su modelo en la práctica.
Wayne
16

Una distinción crítica es si desea:

  1. [Caso más común]: construya una estimación del rendimiento en temas nuevos (extraída de la misma población que sus datos).
  2. Construya una estimación del rendimiento en nuevas observaciones de los mismos sujetos que en su muestra.

El caso mucho más común es el número de caso (1). Por ejemplo, ¿qué tan bien predice los ataques cardíacos para alguien que ingresa a la sala de emergencias? Y si está en el caso (1), es casi seguro que debería hacer (a) validación cruzada basada en temas en lugar de (b) validación cruzada basada en registros. Hacer una validación basada en registros en el caso (1) probablemente conducirá a estimaciones de rendimiento excesivamente altas y falsas sobre nuevos temas.

No entiendo con precisión lo que estás tratando de hacer (y tal vez es un estudio propio, por lo que la pregunta no es del todo realista). No sé en qué caso te encuentras. Si estás en el caso mucho menos común (2), la validación de registro inteligente puede estar bien.

Un tema general en las estadísticas es pensar cuidadosamente sobre lo que es independiente y lo que está correlacionado. En términos generales, una observación independiente tiende a ser un tema diferente. Si desea predecir el rendimiento en nuevas asignaturas, ¡debe probar en asignaturas en las que no entrenó!

¿Por qué la validación cruzada por temas en lugar de por registros?

En entornos típicos, las observaciones repetidas del mismo individuo se correlacionan entre sí incluso después de condicionar las características. ¡Por lo tanto, con la validación cruzada a nivel de registro, su conjunto de prueba no es independiente de su conjunto de entrenamiento! En el caso extremo de la correlación perfecta, ¡tendría exactamente las mismas observaciones en el conjunto de entrenamiento y el conjunto de prueba! ¡Estarías entrenando en el set de prueba! El rendimiento medido en la validación cruzada no sería predictivo del rendimiento en nuevos sujetos.

Por ejemplo, este artículo reciente llama validación cruzada de registro, `` Voodoo Machine Learning ''.

Pero qué hacer con tan pocos temas ...

Quizás algunos comentaristas más experimentados con la validación cruzada que yo podrían intervenir, pero para mí, esto parece un posible candidato para (también conocido como omitir una validación cruzada).k=n

Para maximizar los datos para la capacitación, algo que podría hacer es dejar de lado un tema para la validación cruzada. Cada iteración, prueba en un tema diferente y entrena en todos los demás.

Si todas las asignaturas son muy diferentes, es posible que tenga cerca de y desee incluir tantas asignaturas independientes en el conjunto de entrenamiento.n=38

Matthew Gunn
fuente
Sé que el conjunto de datos se debe dividir en 3: capacitación, validación y pruebas. En la validación cruzada se utilizan "entrenamiento y validación". El conjunto de espera es la "prueba". Entonces, ¿está sugiriendo: para capacitación y validación usar 37 sujetos y evaluar en 1 sujeto? ¿Y que puedo hacer cualquier tipo de validación cruzada: k-fold, estratificada, etc.?
Aizzaac
1
OP hizo una edición diciendo que "es para un sistema biométrico. Por eso quiero poder identificar sujetos". Si entiendo correctamente lo que significa, implica que solo el CV de registro tiene sentido porque el objetivo es predecir la identificación del sujeto en función de una muestra.
ameba dice Reinstate Monica
@amoeba Solo si se obtendrán nuevos datos de esos mismos 38 sujetos. P.ej. si se supone que el sistema dice si las huellas dactilares coinciden o no, y se desplegará en la puerta de entrada de mi casa (es decir, debe identificar a extraños como extraños), el entrenamiento y las pruebas sobre los mismos temas serían problemáticos (usted quisiera saber con qué frecuencia otorga entrada a personas que nunca ha visto antes, nunca entrenó). Sin embargo, estoy de acuerdo en que "es para un sistema biométrico" plantea preguntas ...
Matthew Gunn
3

Realmente depende de cómo visualice la configuración que desea emular con la división tren / prueba. Para hacer las cosas concretas, digamos que cada fila describe la calidad del sueño de un sujeto en una sola noche.

  1. Es posible que, en el futuro, cada sujeto llegue primero a un laboratorio de sueño y le brinde la calidad del sueño durante algunas noches. Después de eso, deberá predecir la calidad del sueño de las noches futuras para estos sujetos . En este caso, usaría su opción b). En sklearn, podrías usarsklearn.model_selection.StratifiedShuffleSplit

  2. Es posible que, en el futuro, algunos sujetos vengan primero a un laboratorio del sueño y le proporcionen la calidad del sueño durante algunas noches. Después de eso, tendrá que predecir la calidad del sueño de las noches futuras para otros sujetos . En este caso, usaría su opción a). En sklearn, podrías usarsklearn.cross_validation.LeavePLabelOut

Ami Tavory
fuente
1
Sin embargo, de manera realista, la pregunta es casi con certeza su caso (2) y la opción (a), es decir, la validación cruzada por temas, es lo que es apropiado.
Matthew Gunn el
1
@MatthewGunn Tienes razón. El caso 2 es mucho más común. Debo decir que me he encontrado con casos de la vida real en los que 1 era la elección correcta.
Ami Tavory
1
Interesante. Pude ver (1) lo correcto para predecir nuevas observaciones para una base de clientes grande y establecida. Punto a favor. Tal vez estoy reaccionando con tanta fuerza porque recientemente leí este documento sobre el mal uso generalizado de la validación cruzada de registros en el área médica.
Matthew Gunn
¿Qué opinas de esto? Utilizo los 38 temas con cualquier tipo de validación cruzada; y para probar si mi modelo puede usarse con un sujeto diferente; Yo uso un conjunto de datos en línea? Creo que la idea de un conjunto extendido es tener un "nuevo" conjunto de datos para probar el modelo.
Aizzaac
3

Para intervenir, supongo que la aplicación es predecir sujetos desconocidos. Eso significa (independientemente de si tiene series de tiempo o mediciones repetidas inherentemente desordenadas) que la división debe hacerse para que los sujetos desconocidos sean evaluados => división a)

Sin embargo, teniendo en cuenta que solo tiene 38 asignaturas, debe pensar un poco en la validación de muestreo Desde mi experiencia trabajando con tamaños de muestra igualmente pequeños (aunque con más funciones), aquí hay algunas recomendaciones en pocas palabras:

  • Opta por una validación cruzada iterativa fuera de la rutina o por temas. Permiten evaluar la estabilidad de sus modelos, lo cual es crucial en problemas de tamaño de muestra pequeño. Los resultados pueden incluso usarse para un modelo agregado en caso de que la inestabilidad sea un problema.

  • No no hacer licencia de un objeto de salida. No permite medir la estabilidad del modelo ni reducirla. Además, hay situaciones en las que está sujeto a un sesgo pesimista grande debido al pequeño tamaño de la muestra (a diferencia del sesgo pesimista mínimo que se espera).

  • Si está utilizando las típicas cifras de clasificación de mérito, como precisión, sensibilidad, especificidad, etc., y la tarea es clasificar correctamente a los sujetos: tenga en cuenta que el problema crucial es medir el rendimiento porque la incertidumbre de los resultados de la prueba depende del número absoluto de casos de prueba. Como ejemplo, observar 17 predicciones correctas de 17 sujetos verdaderamente positivos corresponde a un intervalo de confianza del 95% para una sensibilidad que oscila entre aproximadamente el 80% y el 100%.
    En otras palabras, no podrá hacer una optimización de modelo basada en datos basada en eso.

  • Esto también significa que no necesita configurar una división de tres conjuntos (validación cruzada anidada), ya que desperdiciaría recursos en comparaciones estadísticamente sin sentido aquí: es casi seguro que su optimización fallará (aunque es posible que no note eso si no verifique la estabilidad).

  • El mismo cálculo para el intervalo de confianza binomial para los 5 (3) sujetos de prueba / optimización / validación propuestos arroja un 95% de ci para todos los rangos correctos hasta el 50% (30%), por lo que, según los resultados perfectos de la prueba, su intervalo de confianza aún incluiría 50 / 50 adivinanzas!

Algunos artículos que escribimos sobre estos temas:

cbeleites descontentos con SX
fuente