Selección de características y validación cruzada


76

Recientemente he estado leyendo mucho en este sitio (@Aniko, @Dikran Marsupial, @Erik) y en otros lugares sobre el problema del sobreajuste que ocurre con la validación cruzada - (Smialowski et al 2010 Bioinformática, Hastie, Elementos de aprendizaje estadístico). La sugerencia es que cualquier selección de características supervisadas (utilizando la correlación con las etiquetas de clase) realizada fuera de la estimación del rendimiento del modelo utilizando la validación cruzada (u otro método de estimación del modelo, como bootstrapping) puede resultar en un sobreajuste.

Esto me parece poco intuitivo: seguramente si selecciona un conjunto de características y luego evalúa su modelo utilizando solo las características seleccionadas mediante validación cruzada, obtendrá una estimación imparcial del rendimiento generalizado del modelo en esas características (esto supone que la muestra en estudio es representativa de la población)?

Con este procedimiento, por supuesto, no se puede reclamar un conjunto de características óptimo, pero ¿se puede informar el rendimiento del conjunto de características seleccionado en datos invisibles como válido?

Acepto que la selección de características basadas en todo el conjunto de datos puede provocar cierta fuga de datos entre los conjuntos de prueba y de tren. Pero si el conjunto de características es estático después de la selección inicial, y no se está realizando ningún otro ajuste, ¿seguramente es válido informar las métricas de rendimiento con validación cruzada?

En mi caso, tengo 56 funciones y 259 casos, por lo que #cases> #características. Las características se derivan de los datos del sensor.

Disculpas si mi pregunta parece derivada, pero este parece un punto importante para aclarar.

Editar: Al implementar la selección de características dentro de la validación cruzada en el conjunto de datos detallado anteriormente (gracias a las respuestas a continuación), puedo confirmar que la selección de características antes de la validación cruzada en este conjunto de datos introdujo un significativoparcialidad. Este sesgo / sobreajuste fue mayor cuando se hizo para una formulación de 3 clases, en comparación con la formulación de 2 clases. Creo que el hecho de que utilicé la regresión gradual para la selección de características aumentó este sobreajuste; para fines de comparación, en un conjunto de datos diferente pero relacionado, comparé una rutina de selección de características directas secuenciales realizada antes de la validación cruzada con los resultados que había obtenido previamente con la selección de características dentro de CV. Los resultados entre ambos métodos no difirieron dramáticamente. Esto puede significar que la regresión paso a paso es más propensa a un sobreajuste que el FS secuencial o puede ser una peculiaridad de este conjunto de datos.


77
No creo que eso sea (bastante) lo que Hastie et al. están abogando El argumento general es que si la selección de características utiliza la respuesta , será mejor que se incluya como parte de su procedimiento de CV. Si realiza la detección de predictores, por ejemplo, al observar sus variaciones de muestra y excluir los predictores con pequeñas variaciones, eso está bien como un procedimiento de una sola vez.
Cardenal

3
Sin embargo, incluso en este caso, la validación cruzada no representa la variación en el proceso de selección de características, lo que podría ser un problema si la selección de características es inestable. Si realiza la evaluación primero, la variabilidad en el rendimiento en cada pliegue representará por debajo de la verdadera variabilidad. Si realiza la evaluación en cada pliegue, aumentará adecuadamente la variabilidad en el rendimiento en cada pliegue. Todavía siempre realizaría el examen en cada pliegue si pudiera pagar el gasto computacional.
Dikran Marsupial

1
Creo que la afirmación "CUALQUIER selección de características realizada antes de la estimación del rendimiento del modelo utilizando la validación cruzada puede resultar en un sobreajuste". es una cita errónea o tergiversación de lo que sugerirían Hastie y otros. Si cambia la palabra "antes" a "sin", tiene más sentido. Además, la oración parece sugerir que la validación cruzada es la única forma de probar legítimamente la idoneidad de las variables seleccionadas. El bootstrap, por ejemplo, podría ser otro enfoque legítimo .
Michael Chernick

@MichaelChernick - de acuerdo. He editado arriba para reflejar mejor mi significado.
BGreene

1
@Bgreene: hay una discusión reciente sobre este tema que se puede leer en goo.gl/C8BUa .
Alekk

Respuestas:


69

Si realiza la selección de características en todos los datos y luego realiza una validación cruzada, los datos de prueba en cada pliegue del procedimiento de validación cruzada también se usaron para elegir las características y esto es lo que sesga el análisis de rendimiento.

Considera este ejemplo. Generamos algunos datos objetivo lanzando una moneda 10 veces y registrando si cae como cara o cruz. A continuación, generamos 20 características volteando la moneda 10 veces para cada característica y anotamos lo que obtenemos. Luego realizamos la selección de características seleccionando la característica que coincide con los datos de destino lo más cerca posible y la usamos como nuestra predicción. Si luego validamos de forma cruzada, obtendremos una tasa de error esperada ligeramente inferior a 0.5. Esto se debe a que hemos elegido la función sobre la base de una correlación sobre el conjunto de entrenamiento y el conjunto de prueba en cada pliegue del procedimiento de validación cruzada. Sin embargo, la verdadera tasa de error será 0.5 ya que los datos objetivo son simplemente aleatorios. Si realiza la selección de características de forma independiente dentro de cada pliegue de la validación cruzada, el valor esperado de la tasa de error es 0.

La idea clave es que la validación cruzada es una forma de estimar el rendimiento de generalización de un proceso para construir un modelo, por lo que debe repetir todo el proceso en cada pliegue. De lo contrario, terminará con una estimación sesgada o una subestimación de la varianza de la estimación (o ambas).

HTH

Aquí hay un código MATLAB que realiza una simulación Monte-Carlo de esta configuración, con 56 características y 259 casos, para que coincida con su ejemplo, el resultado que proporciona es:

Estimador sesgado: borrar = 0.429210 (0.397683 - 0.451737)

Estimador imparcial: borrar = 0.499689 (0.397683 - 0.590734)

El estimador sesgado es aquel en el que la selección de características se realiza antes de la validación cruzada, el estimador imparcial es aquel en el que la selección de características se realiza independientemente en cada pliegue de la validación cruzada. Esto sugiere que el sesgo puede ser bastante severo en este caso, dependiendo de la naturaleza de la tarea de aprendizaje.

NF    = 56;
NC    = 259;
NFOLD = 10;
NMC   = 1e+4;

% perform Monte-Carlo simulation of biased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform feature selection

   err       = mean(repmat(y,1,NF) ~= x);
   [err,idx] = min(err);

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, '  Biased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

% perform Monte-Carlo simulation of unbiased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      % perform feature selection

      err       = mean(repmat(y(partition~=j),1,NF) ~= x(partition~=j,:));
      [err,idx] = min(err);

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, 'Unbiased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

3
Gracias, esto es muy útil. Si toma el enfoque sugerido, ¿cómo evalúa su modelo final? Como tendrá múltiples conjuntos de características, ¿cómo elige el conjunto de características final? Históricamente, también he informado resultados basados ​​en una única validación cruzada con parámetros y características del modelo elegidos.
BGreene

16
Es mejor ver la validación cruzada como una evaluación del desempeño de un procedimiento para ajustar un modelo, en lugar del modelo en sí. Lo mejor que puede hacer normalmente es realizar una validación cruzada como se indicó anteriormente, y luego construir su modelo final utilizando todo el conjunto de datos utilizando el mismo procedimiento utilizado en cada pliegue del procedimiento de validación cruzada.
Dikran Marsupial

2
En este caso, ¿estamos informando los resultados de clasificación basados ​​en la validación cruzada (potencialmente muchos conjuntos de características diferentes) pero informando que el modelo contiene solo uno de esos conjuntos de características, es decir, los resultados de clasificación con validación cruzada no necesariamente coinciden con el conjunto de características?
BGreene

10
Esencialmente sí, la validación cruzada solo estima el rendimiento esperado de un proceso de construcción de modelos, no el modelo en sí. Si el conjunto de características varía mucho de un pliegue de la valdidación cruzada a otro, es una indicación de que la selección de características es inestable y probablemente no sea muy significativa. A menudo es mejor usar la regularización (por ejemplo, regresión de cresta) en lugar de la selección de características, especialmente si esta última es inestable.
Dikran Marsupial

3
Esta es una publicación tan importante. Increíble cuántos no aplican esto.
Chris A.

12

Para agregar una descripción ligeramente diferente y más general del problema:

Si realiza algún tipo de preprocesamiento basado en datos , p. Ej.

  1. optimización de parámetros guiada por validación cruzada / fuera de arranque
  2. Reducción de dimensionalidad con técnicas como PCA o PLS para producir información para el modelo (por ejemplo, PLS-LDA, PCA-LDA)
  3. ...

y desea utilizar la validación cruzada / validación cruzada (/ espera) para estimar el rendimiento del modelo final , el preprocesamiento basado en datos debe realizarse en los datos de entrenamiento sustituto, es decir, por separado para cada modelo sustituto.

Si el preprocesamiento basado en datos es del tipo 1., esto lleva a una validación cruzada "doble" o "anidada": la estimación del parámetro se realiza en una validación cruzada utilizando solo el conjunto de entrenamiento de la validación cruzada "externa". El ElemStatLearn tiene una ilustración ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Página 222 de impresión 5).

Puede decir que el preprocesamiento es realmente parte de la construcción del modelo. solo preprocesamiento que se realiza

  • independientemente para cada caso o
  • independientemente del conjunto de datos real

se puede sacar del bucle de validación para guardar cálculos.

Entonces, al revés: si su modelo está completamente construido por el conocimiento externo al conjunto de datos en particular (por ejemplo, usted decide de antemano por su conocimiento experto que los canales de medición 63-79 no pueden ayudar a resolver el problema, por supuesto puede excluir estos canales , cree el modelo y valide de forma cruzada. Lo mismo, si hace una regresión PLS y decide por su experiencia que 3 variables latentes son una opción razonable (pero no juegue si 2 o 5 lv dan mejores resultados) entonces puede siga adelante con una validación normal fuera de arranque / cruzada.


Lamentablemente, el enlace para imprimir 5 del libro ElemStatLearn no funciona. Me preguntaba si la ilustración a la que se refería todavía está en la misma página. Por favor mencione el título también.
rraadd88

Entonces, si tengo dos conjuntos de datos, ¿selecciono características / ingeniería en uno de ellos y CV en el otro, no habría problemas?
Milos

1
@Milos: no, siempre y cuando esas características se conviertan en parámetros fijos para los modelos de validación cruzada, eso debería estar bien. Esta sería una generación adecuada de hipótesis (= desarrollo de características en el conjunto de datos A) / prueba de hipótesis (= medición del rendimiento de las características ahora fijas con el conjunto de datos B) de configuración.
cbeleites

@cbeleites Sí, eso es lo que pretendía hacer. Determine las características en A, luego corríjalas y realice una validación cruzada para los modelos en B. Gracias. :)
Milos

@Milos: tenga en cuenta, sin embargo, que su argumentación sobre el rendimiento alcanzado es aún mejor si entrena completamente su modelo en A y luego usa B solo para las pruebas.
cbeleites

5

Tratemos de hacerlo un poco intuitivo. Considere este ejemplo: tiene un binario dependiente y dos predictores binarios. Desea un modelo con solo un predictor. Ambos predictores tienen una probabilidad de decir 95% de ser igual al dependiente y una probabilidad de 5% de estar en desacuerdo con el dependiente.

Ahora, por casualidad en sus datos, un predictor es igual al dependiente de todos los datos en el 97% del tiempo y el otro solo en el 93% del tiempo. Escogerá el predictor con 97% y construirá sus modelos. En cada pliegue de la validación cruzada, tendrá el modelo dependiente = predictor, porque casi siempre es correcto. Por lo tanto, obtendrá un rendimiento cruzado previsto del 97%.

Ahora, podrías decir, ok, eso es solo mala suerte. Pero si los predictores se construyen como anteriormente, entonces tiene la posibilidad de que el 75% de al menos uno de ellos tenga una precisión> 95% en todo el conjunto de datos y ese es el que elegirá. Por lo tanto, tiene una probabilidad del 75% de sobreestimar el rendimiento.

En la práctica, no es nada trivial estimar el efecto. Es completamente posible que su selección de características seleccione las mismas características en cada pliegue como si lo hiciera en todo el conjunto de datos y luego no habrá sesgo. El efecto también se vuelve más pequeño si tiene muchas más muestras pero características. Puede ser instructivo usar ambas formas con sus datos y ver cómo difieren los resultados.

También puede reservar una cantidad de datos (digamos 20%), usar su forma y la forma correcta para obtener estimaciones de rendimiento mediante la validación cruzada en el 80% y ver qué predicción de rendimiento resulta más precisa cuando transfiere su modelo a 20 % de los datos reservados. Tenga en cuenta que para que esto funcione, su selección de características antes del CV también tendrá que hacerse solo en el 80% de los datos. De lo contrario, no simulará transferir su modelo a datos fuera de su muestra.


¿Podría elaborar más sobre la forma correcta de hacer la selección de funciones con su ejemplo intuitivo? Gracias.
uared1776
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.