¿Cómo comparar estadísticamente dos algoritmos en tres conjuntos de datos en la selección y clasificación de características?

8

Antecedentes del problema: como parte de mi investigación, he escrito dos algoritmos que pueden seleccionar un conjunto de características de un conjunto de datos (datos de expresión génica de pacientes con cáncer). Estas características luego se prueban para ver qué tan bien pueden clasificar una muestra invisible como cancerosa o no cancerosa. Para cada ejecución del algoritmo, se genera una solución (un conjunto de características) y se prueba en Z muestras no vistas. Porcentaje precisión de la solución se calcula de esta manera: (correct classifications / Z) * 100.

Tengo dos algoritmos: algoritmo X y algoritmo Y

Tengo tres conjuntos de datos separados (diferentes tipos de cáncer): conjunto de datos A, conjunto de datos B y conjunto de datos C. Estos conjuntos de datos son muy diferentes entre sí. No tienen el mismo número de muestras o el mismo número de mediciones (características) por muestra.

He ejecutado cada algoritmo 10 veces en cada conjunto de datos. Entonces, el algoritmo X tiene 10 resultados del conjunto de datos A, 10 del conjunto de datos B y 10 del conjunto de datos C. En general, el algoritmo X tiene 30 resultados.

Mi problema: me gustaría ver si el rendimiento combinado del algoritmo X en los tres conjuntos de datos es estadísticamente significativamente diferente del rendimiento combinado del algoritmo Y.

¿Es posible para mí combinar resultados para el algoritmo X de cada conjunto de datos en un solo conjunto de resultados? De esta manera, tendría 30 resultados estandarizados para el algoritmo X y 30 resultados estandarizados para el algoritmo Y. Luego, puedo usar la prueba t para ver si hay una diferencia significativa entre los dos métodos.

Editar: estos son algoritmos evolutivos, por lo que devuelven una solución ligeramente diferente cada vez que se ejecutan. Sin embargo, si hay una característica en una muestra que, cuando está presente, puede clasificar fuertemente la muestra como cancerosa o no cancerosa, entonces esa característica se seleccionará casi cada vez que se ejecute el algoritmo.

Obtengo resultados ligeramente diferentes para cada una de las 10 ejecuciones debido a las siguientes razones:

  • Estos algoritmos se siembran al azar.
  • Uso validación de submuestreo aleatorio repetido (10 repeticiones).
  • Los conjuntos de datos que uso (microarrays de ADN y Proteómica) son muy difíciles de trabajar en el sentido de que hay muchos óptimos locales en los que el algoritmo puede quedarse atrapado.
  • Hay muchas interacciones entre funciones y entre subconjuntos que me gustaría detectar.
  • Entreno 50 cromosomas y no están restringidos a ninguna longitud en particular. Son libres de crecer y encogerse (aunque la presión de selección los guía hacia longitudes más cortas). Esto también introduce alguna variación en el resultado final.

¡Dicho esto, el algoritmo casi siempre selecciona un subconjunto particular de características!

Aquí hay una muestra de mis resultados (aquí solo se muestran 4 ejecuciones de 10 para cada algoritmo):

Conjunto de datos / ejecutar Algoritmo X Algoritmo Y
A 1 90.91 90.91
A 2 90.91 95.45
A 3 90.91 90.91
A 4 90.91 90.91

B 1 100 100
B 2 100 100
B 3 95.65 100
B 4 95.65 86.96

C 1 90.32 87.10
C 2 70.97 80.65
C 3 96.77 83.87
C 4 80.65 83.87

Como puede ver, he reunido resultados para dos algoritmos de tres conjuntos de datos. Puedo hacer la prueba de Kruskal-Wallis con estos datos, pero ¿será válido? Pregunto esto porque:

  • No estoy seguro de que las precisiones en diferentes conjuntos de datos sean conmensurables. Si no lo son, entonces juntarlos como lo he hecho no tendría sentido y cualquier prueba estadística realizada en ellos tampoco tendría sentido.
  • Cuando se juntan precisiones como esta, el resultado general es susceptible de valores atípicos. El excelente rendimiento de un algoritmo en un conjunto de datos puede enmascarar su rendimiento promedio en otro conjunto de datos.

No puedo usar t-test en este caso tampoco, esto es porque:

  • Conmensurabilidad: la prueba t solo tiene sentido cuando las diferencias sobre los conjuntos de datos son proporcionales.
  • La prueba t requiere que las diferencias entre los dos algoritmos comparados se distribuyan normalmente, no hay forma (al menos que yo sepa) de garantizar esta condición en mi caso.
  • La prueba t se ve afectada por valores atípicos que sesgan las estadísticas de la prueba y disminuyen la potencia de la prueba al aumentar el error estándar estimado.

¿Qué piensas? ¿Cómo puedo hacer una comparación entre el algoritmo X e Y en este caso?

revoluciones
fuente
¿Sus algoritmos implican algún tipo de aleatoriedad, o por qué los ejecuta 10 veces cada uno en cada conjunto de datos?
Stephan Kolassa
¡Si! Son algoritmos evolutivos (algoritmos estocásticos). Entonces, cada vez que producen un resultado diferente. Sin embargo, si hay características fuertes (genes / un solo valor de una muestra), entonces se seleccionan con mayor frecuencia. El objetivo del algoritmo es seleccionar aquellos genes que están fuertemente correlacionados con una clase particular (por ejemplo, cáncer de ovario) para que puedan usarse en el diagnóstico / predicción temprana del cáncer en el futuro.
Revoluciones

Respuestas:

8

A menos que sus algoritmos tengan grandes diferencias en el rendimiento y tenga un gran número de casos de prueba, no podrá detectar diferencias simplemente observando el rendimiento.

Sin embargo, puede hacer uso de un diseño pareado:

  • ejecutar los tres algoritmos exactamente en la misma división de tren / prueba de un conjunto de datos, y
  • no agregue los resultados de la prueba en% correcto, pero manténgalos en el nivel de caso de prueba único como correcto o incorrecto.

Para la comparación, eche un vistazo a la prueba de McNemar . La idea detrás de explotar un diseño emparejado aquí es que todos los casos en que ambos algoritmos fueron correctos y aquellos en los que ambos se equivocaron no ayudan a distinguir los algoritmos. Pero si un algoritmo es mejor que el otro, debería haber muchos casos en los que el mejor algoritmo funcionó correctamente, pero no el peor, y pocos que fueron predichos correctamente por el peor método pero incorrectos por el mejor.

Además, Cawley y Talbot: sobre el ajuste excesivo en la selección del modelo y el sesgo de selección posterior en la evaluación del rendimiento, JMLR, 2010, 1, 2079-2107. Es muy relevante.

Debido a los aspectos aleatorios de sus algoritmos, también querrá verificar la misma división del mismo conjunto de datos varias veces. A partir de eso, puede estimar la variación entre diferentes ejecuciones que, de lo contrario, son iguales. Puede ser difícil juzgar cuán diferentes son los conjuntos de variables seleccionados. Pero si su objetivo final es el rendimiento predictivo, también puede usar la variación entre las predicciones del mismo caso de prueba durante diferentes ejecuciones para medir la estabilidad de los modelos resultantes.

Entonces también querrá verificar (como se indicó anteriormente) la variación debido a las diferentes divisiones del conjunto de datos y poner esto en relación con la primera variación.

Por lo general, se supone que las fracciones (como% de muestras correctamente reconocidas) se distribuyen binomialmente , en algunos casos es posible una aproximación normal, pero la letra pequeña para esto casi nunca se cumple en campos con matrices de datos anchas. Esto tiene la consecuencia de que los intervalos de confianza son enormes para un pequeño número de casos de prueba. En R, binom::binom.confintcalcula los intervalos de confianza para la proporción verdadera dado el no. de pruebas y no. de éxitos

Finalmente, mi experiencia con la optimización genética para datos espectroscópicos (mi tesis de Diplom en alemán) sugiere que también debe verificar los errores de entrenamiento. Los GA tienden a sobreajustarse muy rápido, llegando a errores de entrenamiento muy bajos. Los errores de entrenamiento bajos no solo son demasiado optimistas, sino que también tienen la consecuencia de que el GA no puede diferenciar entre muchos modelos que parecen ser igualmente perfectos. (Es posible que tenga menos problemas con eso si el GA internamente también submuestra aleatoriamente el tren y los conjuntos de pruebas internas).

Artículos en inglés:

cbeleites descontentos con SX
fuente
¡Gracias por un excelente análisis! Voy a probar un diseño emparejado. Usted es acertado con respecto al ajuste excesivo. La siguiente fase de mi investigación se concentrará en evitar el ajuste excesivo durante el entrenamiento. Esto es realmente importante ya que mi objetivo final es producir un algoritmo que esté completamente automatizado para que los oncólogos puedan usarlo para el diagnóstico temprano de los cánceres. Estoy realmente interesado en leer su periódico, pero me temo que no puedo leer alemán. Avíseme si hay una versión en inglés. Gracias nuevamente por su aporte detallado.
revoluciones
@revolusions: la información está un poco dispersa en algunos documentos. Pero agregué una lista con 2 sobre la selección de la variable GA, y una sobre la incertidumbre en la medición de las tasas de error de clasificación. Si tiene preguntas (o no tiene acceso a los documentos), envíeme un correo electrónico.
Cbeleites descontento con SX
¡Gracias! Logré descargar el último documento, pero parece que no puedo obtener los dos primeros. Lo intentaré desde la computadora de mi universidad mañana y te haré saber si logro descargarlos.
Revoluciones
1

¡Estás ejecutando una selección más fuerte con GA 10 veces y cada vez que obtienes un resultado diferente!

Primero, si comienza por la misma semilla, siempre debe obtener el mismo subconjunto de featuer seleccionado. Sin embargo, si está utilizando una semilla aleatoria, también, muy probablemente, debería obtener casi las mismas características seleccionadas. Una razón para obtener el mismo featuer seleccionado se indica en su publicación. Además, para una comparación justa, puede usar las mismas semillas en las corridas de A para los experimentos de B.

En segundo lugar, puede usar validación cruzada o bootstraping para la comparación. De esta manera obtienes una comparación más representativa. En este caso, hay una fuente de variación, es decir, muestras de entrenamiento aleatorias que parecen más fuertes que las semillas aleatorias. Por lo tanto, la comparación puede revelar qué algorthim es realmente mejor.

Finalmente, puede usar la prueba t como propuso o usar directamente algunas pruebas no paramétricas como la prueba de Kruskal-Wallis.

soufanom
fuente
¡Muchas gracias por tu respuesta! Me gustaría aclarar algunas cosas y tal vez obtener su opinión después, ya que todavía estoy confundido acerca de la comparación, ¡espero que puedan ayudar! Usted dijo: <blockquote> Además, para una comparación justa, puede usar las mismas semillas en las corridas de A para los experimentos de B </blockquote> Este es un muy buen punto, gracias. He editado mi pregunta para abordar los puntos que planteaste. Será genial si puedes echar un vistazo y hacerme saber lo que piensas.
revoluciones
Puede hacer una comparación separada entre clasificadores para cada conjunto de datos. Inicialmente, verifique la media y la desviación estándar. Si para todos los conjuntos de datos, un clasificador supera al otro. Entonces, hemos terminado. De lo contrario, puede utilizar una idea de "conjunto". Verifique la nueva muestra, si pertenece al conjunto de datos A, use el mejor clasificador y así sucesivamente. Sin embargo, puede haber alguna prueba estadística basada en una vista emparejada que no conozco para este caso.
soufanom
Gracias de nuevo por tu aportación. He hecho lo que sugirió y no hay un ganador claro. Es por eso que decidí armar todo y ver si habría un ganador. Esta idea de "conjunto" suena interesante. ¿Hay algún lugar donde pueda leer más sobre esto? Gracias por tu ayuda.
revoluciones
Una cosa más, considera comparar la sensibilidad y la especificidad. Para la fuente del conjunto, consulte el libro adjunto en mi publicación stats.stackexchange.com/questions/47075/…
soufanom