¿Se debe realizar la selección de características solo en los datos de entrenamiento (o todos los datos)?

10

¿Se debe realizar la selección de características solo en los datos de entrenamiento (o todos los datos)? Revisé algunas discusiones y documentos como Guyon (2003) y Singhi y Liu (2006) , pero aún no estoy seguro de la respuesta correcta.

La configuración de mi experimento es la siguiente:

  • Conjunto de datos: 50 controles sanos y 50 pacientes con enfermedades (características de aproximadamente 200 que pueden ser relevantes para la predicción de la enfermedad).
  • La tarea es diagnosticar la enfermedad según las características disponibles.

Lo que hago es

  1. Tome todo el conjunto de datos y realice la selección de características (FS). Mantengo solo las funciones seleccionadas para su posterior procesamiento
  2. Dividir para probar y entrenar, clasificador de trenes usando datos de trenes y características seleccionadas. Luego, aplique el clasificador a los datos de prueba (nuevamente utilizando solo las características seleccionadas). Se utiliza la validación de dejar uno fuera.
  3. obtener precisión de clasificación
  4. Promedio: repita 1) -3) N veces. (100).N=50

Estoy de acuerdo en que hacer FS en todo el conjunto de datos puede introducir algún sesgo, pero mi opinión es que se "promedia" durante el promedio (paso 4). ¿Es eso correcto? (La varianza de precisión es )<2%

1 Guyon, I. (2003) "Introducción a la selección de variables y características", The Journal of Machine Learning Research, vol. 3, págs. 1157-1182
2 Singhi, SK y Liu, H. (2006) "Sesgo de selección de subconjunto de características para el aprendizaje de clasificación", Procedimientos ICML '06 Actas de la 23ª conferencia internacional sobre aprendizaje automático, págs. 849-856

pedro29
fuente

Respuestas:

12

El procedimiento que está utilizando dará como resultado estimaciones de rendimiento sesgadas de manera optimista, ya que utiliza los datos del conjunto de pruebas utilizado en los pasos 2 y 3 para decidir qué características utilizará en el paso 1. La repetición del ejercicio reduce la variación de la estimación de rendimiento, no el sesgo, por lo que el sesgo no se promediará. Para obtener una estimación imparcial del rendimiento, los datos de la prueba no deben usarse de ninguna manera para tomar decisiones sobre el modelo, incluida la selección de características.

Un mejor enfoque es utilizar la validación cruzada anidada, de modo que la validación cruzada externa proporcione una estimación del rendimiento obtenible utilizando un método de construcción del modelo (incluida la selección de características) y la validación cruzada interna se use para seleccionar las características de forma independiente en cada pliegue de la validación cruzada externa. Luego construya su modelo predictivo final utilizando todos los datos.

Como tiene más funciones que casos, es muy probable que ajuste los datos simplemente mediante la selección de funciones. Es un poco un mito que la selección de características mejora el rendimiento predictivo, por lo que si eso es lo que le interesa (en lugar de identificar las características relevantes como un fin en sí mismo), probablemente sea mejor usar la regresión de cresta y no realizar ninguna función selección. Esto probablemente proporcionará un mejor rendimiento predictivo que la selección de características, siempre que el parámetro de cresta se seleccione con cuidado (uso la minimización de la estadística de PRENSA de Allen, es decir, la estimación de omisión del error cuadrático medio).

Para más detalles, vea Ambroise y McLachlan , y mi respuesta a esta pregunta .

Dikran Marsupial
fuente
Gracias por su respuesta. De hecho, estoy interesado en ambos, para encontrar las características relevantes y mejorar el rendimiento predictivo. En mis experimentos (SVM para clasificación), la selección de características mejoró significativamente la precisión de la predicción (sin embargo, como notó, esto puede ser el resultado de un ajuste excesivo de los datos). Supongo que por regresión de cresta te refieres a algo que también se conoce como regularización de Tikhonov.
pedro29
Sí, la regresión de cresta es simplemente una regresión lineal normal con un término de penalización basado en la norma al cuadrado de los pesos. Para la mayoría de los problemas, funciona tan bien como el SVM, pero es más fácil de implementar (y puede resolver el error de validación cruzada de dejar uno fuera esencialmente de forma gratuita, que puede usarse para ajustar los hiperparámetros).
Dikran Marsupial
Por cierto, ¿cuál es la diferencia entre la regularización de crestas y la selección de características? Quiero decir, al final del día, ambos indican "el mejor subconjunto" de predictores de un conjunto dado de predictores.
pedro29
la regresión de cresta no identifica un subconjunto de características, la forma de regresión penalizada LASSO o LARS sí. Esa sería mi elección del método de selección de características, ya que es menos susceptible a un ajuste excesivo ya que el término de penalización impone un orden en las características que ingresan y salen del modelo, por lo que hay menos grados de libertad que solo buscar exhaustivamente el mejor conjunto de caracteristicas.
Dikran Marsupial
3

Solo como una adición a las respuestas aquí, tengo dos enlaces que realmente me ayudaron a entender por qué este no es un buen procedimiento:

Editar: según lo solicitado, una breve explicación del contenido de los enlaces:

Supongamos que estoy entrenando a un clasificador y tengo un conjunto de datos de 1000 muestras, con 1 millón de características cada una. No puedo procesarlos a todos, por lo que necesito menos funciones (por ejemplo, puedo calcular 300 funciones). También tengo un conjunto de prueba extendido de 100 muestras para estimar con precisión mi precisión del mundo real fuera de la muestra.

Si filtro mis 1 millón de funciones hasta 300, al seleccionar aquellas funciones con una correlación más alta con los objetivos de todo mi conjunto de datos, estoy cometiendo un error (porque estoy introduciendo un sobreajuste que no puede ser detectado por Cross Validation más adelante). Mi conjunto extendido mostrará esto al escupir un valor de mala precisión.

De acuerdo con los enlaces anteriores, la forma correcta de hacerlo es dividir mi conjunto de datos en un conjunto de entrenamiento y un conjunto de Validación cruzada, y luego ajustar mi modelo (filtrar características, etc.) en función de este conjunto de entrenamiento y su puntaje CV asociado. Si estoy usando K-folds, debo ajustar desde cero cada vez que hago un split / fold y luego promediar los resultados.

Programáticamente, haces lo siguiente:

  • Mantenga a un lado una parte de su conjunto de datos como un conjunto de espera.
  • Divida el resto de su conjunto de datos (en adelante denominado T1) en pliegues K.
  • En un ciclo for de i = 1 a K, haga lo siguiente:
    • seleccione el i-ésimo pliegue como su conjunto de CV, y las muestras restantes como su conjunto de entrenamiento (de ahora en adelante llamado Ti).
    • Haga la ingeniería de características y la selección de características que desee: filtrar características, combinarlas, etc.
    • Convierta tanto su conjunto de CV (el pliegue actual, llamado CVi) como su conjunto de entrenamiento actual Ti en uno con las características apropiadas.
    • Entrena a tu modelo en el set de entrenamiento Ti
    • Obtenga la puntuación del pliegue actual, CVi. Agregue este puntaje a una lista que contenga todos los puntajes.
  • Ahora, su lista tiene el puntaje de cada pliegue, por lo que lo promedia, obteniendo el puntaje de K-pliegues.

Es realmente importante que realice la ingeniería de características dentro del bucle, en el conjunto de entrenamiento secundario, Ti, en lugar de en el conjunto de entrenamiento completo, T1.

La razón de esto es que cuando usted ajusta / presenta el ingeniero para Ti, prueba en CVi, que no se ve para ese modelo. Mientras que, si encaja / presenta un ingeniero en T1, cualquier CV que elija debe ser un subconjunto T1, por lo que tendrá un sesgo optimista, es decir, se sobreajustará, porque está entrenando y probando con las mismas muestras de datos.

Una muy buena respuesta de StackExchange es esta , que realmente lo explica más en profundidad y con un ejemplo del código. También vea esto como un apéndice.

Abhishek Divekar
fuente
1
¿Podría incluir un breve resumen del contenido de estos enlaces? Preferimos respuestas independientes, de lo contrario pueden ser muy vulnerables a "linkrot" si los enlaces cambian de ubicación. Alternativamente, podemos convertir esto en un comentario para usted.
Silverfish
@Silverfish Hecho
Abhishek Divekar
¿Entonces dentro del ciclo for, uno podría tener diferentes características seleccionadas para diferentes pliegues?
stackunderflow
2

El bootstrap de "optimismo" de Efron-Gong es muy bueno para esto. La idea es utilizar todos los datos disponibles para desarrollar el modelo predictivo y utilizar todos los datos para estimar el rendimiento futuro probable de ese mismo modelo. Y el tamaño de su muestra es demasiado pequeño por un factor de 100 para que funcione cualquier enfoque de muestra dividida.

Y

Frank Harrell
fuente