7 votos

Clasificación binaria 2D

Antecedentes

Un laboratorio quiere evaluar si una determinada forma de electroforesis en gel es adecuado como método de clasificación de la calidad de una determinada sustancia. Se cargaron varios geles, cada uno con una muestra limpia de la sustancia y con una muestra que contiene impurezas. Además, también se cargó un marcador molecular que sirve de referencia. La siguiente imagen ilustra el montaje (la imagen no muestra el experimento real, la he tomado de Wikipedia para ilustrarlo):

Example of a gel electrophoresis

Se midieron dos parámetros para cada gel y cada carril:

  1. El peso molecular (es decir, la altura de un compuesto durante la electroforesis)
  2. El cantidad relativa. La cantidad total de cada carril se normaliza a 1 y se mide la densidad de cada banda, lo que da como resultado la cantidad relativa de cada banda.

A continuación, se produce un gráfico de dispersión de la cantidad relativa frente al peso molecular, que podría tener el siguiente aspecto (se trata de datos artificiales):

Example scatterplot

Este gráfico puede leerse como sigue: Tanto la sustancia "buena" (puntos azules) como la "impura" (puntos rojos) presentan dos bandas, una en torno a un peso molecular de 120 y otra en torno a 165. Las bandas de la sustancia "impura" con un peso molecular en torno a 120 son considerablemente menos densas que las de la sustancia "buena" y pueden distinguirse bien.


Objetivo

El objetivo es determinar dos casillas (véase el gráfico siguiente) que determinan una "buena" sustancia. Estas casillas se utilizarán para clasificar la sustancia en el futuro en "buena" e "impura". Si una sustancia presenta carriles que entran en las casillas se clasifica como "buena" y si no como "impura".

Estas reglas de decisión deben ser simple para solicitar a alguien en el laboratorio. Por eso deberían ser cajas en lugar de límites de decisión curvos.

Los falsos negativos (es decir, clasificar una muestra como "impura" cuando realmente es "buena") se consideran peores que los falsos positivos. Es decir, hay que hacer hincapié en los sensibilidad en lugar de en el especificidad .

Example decision boxed


Pregunta

No soy un experto en aprendizaje automático. Sin embargo, sé que hay bastantes algoritmos/técnicas de aprendizaje automático que podrían ser útiles: $k$ -vecinos más cercanos (por ejemplo knn en R ), árboles de clasificación (por ejemplo rpart o ctree ), máquinas de vectores de apoyo ( ksvm ), la regresión logística, los métodos boosting y bagging y muchos más.

Uno de los problemas de muchos de esos algoritmos es que no proporcionan un conjunto de reglas simples o límites lineales. Además, el tamaño de la muestra es alrededor de 70.

Mis preguntas son:

  • ¿Tiene alguien una idea de cómo proceder aquí?
  • ¿Tiene sentido dividir el conjunto de datos en conjunto de entrenamiento y de prueba?
  • Qué proporción de datos debe tener el conjunto de entrenamiento (he pensado en una proporción de 60/40).
  • ¿Cuál es, en general, el flujo de trabajo para este tipo de análisis? Algo así como Dividir el conjunto de datos -> ajustar el algoritmo al conjunto de entrenamiento -> predecir el resultado para el conjunto de prueba?
  • ¿Cómo evitar el sobreajuste (es decir, cajas demasiado pequeñas)?
  • ¿Cuál es una buena estadística para evaluar el rendimiento predictivo en este caso? ¿AUC? ¿Acerteza? ¿Valor predictivo positivo? Coeficiente de correlación de Matthews ?

Supongamos que estoy familiarizado con R y el caret paquete. Muchas gracias por su tiempo y ayuda.


Datos de ejemplo

A continuación se muestra un conjunto de datos de ejemplo.

structure(list(mol.wt = c(125.145401455869, 118.210252208676, 
165.048583787746, 126.003687476776, 170.149347112565, 127.761533014759, 
155.523172614798, 120.094514977175, 161.234986765321, 168.471542655269, 
156.522990530521, 154.377948321209, 165.365756398877, 167.965538771316, 
116.132241687833, 115.143539160903, 156.696830822196, 162.578494491556, 
136.830624758899, 123.886594633942, 124.247484227948, 126.257226352824, 
160.684010454816, 166.618872115047, 126.599387146887, 165.690375912529, 
159.786861142652, 114.520735974329, 125.753594471656, 157.551537154148, 
157.320636890647, 171.5759136115, 158.580005438661, 125.647463565197, 
130.404710783509, 127.128218318572, 162.144126888907, 161.804616951055, 
167.917268243627, 168.582197247178), rel.qtd = c(57.68339235957, 
54.0514508510085, 25.0703901938793, 37.6933881305906, 36.6853653723001, 
53.6650555524679, 52.268438087776, 52.8621831466857, 43.1242291166037, 
46.6771236380788, 38.0328239221277, 40.0454611708371, 44.6406366176158, 
40.8238699987682, 51.9464749018547, 54.0302533272953, 37.9792331383524, 
48.3853988095525, 38.2093977349102, 42.2636098418388, 42.9876895407144, 
40.8018728193786, 40.1097096927465, 38.7432550253867, 39.2633283608111, 
43.4673723102812, 53.3740718733815, 49.1067921475768, 52.3002598744634, 
44.9847844953241, 44.3014423068017, 44.0191971364465, 47.0805245356855, 
55.0124134796556, 57.9938440244052, 62.8314454977068, 45.8093815891894, 
43.2300677500964, 39.4801550161538, 51.6253515591173), quality = structure(c(2L, 
2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("bad", "good"), class = "factor")), .Names = c("mol.wt", 
"rel.qtd", "quality"), row.names = c(10L, 14L, 47L, 16L, 57L, 
54L, 45L, 12L, 43L, 67L, 25L, 21L, 1L, 55L, 20L, 22L, 37L, 15L, 
8L, 38L, 46L, 64L, 51L, 65L, 52L, 61L, 63L, 32L, 50L, 27L, 19L, 
69L, 23L, 42L, 6L, 48L, 11L, 13L, 5L, 71L), class = "data.frame")

2voto

Dhawal Agarwal Puntos 21

Esta es una pregunta muy profunda. Voy a tratar de responderla para su caso concreto y a la vez plantear puntos más amplios.

¿Tiene alguien una idea de cómo proceder aquí?

Cómo proceder a partir de aquí es realmente una cuestión de qué método utilizar. La respuesta para su caso particular parece ser CART ( Árboles de clasificación y regresión ). Los CART le permitirán obtener regiones bonitas y rectangulares para la predicción, pero son muy ruidosos. Por eso se crearon los bosques aleatorios y otros algoritmos similares. Los Bosques Aleatorios y similares cambian la claridad por una mejora en la predicción.

En general, la elección del método depende de dos cosas: cuáles son sus objetivos para el análisis y lo bien que el modelo se ajusta a sus datos. Nada te impide probar un par de métodos y elegir el que mejor se adapte.

Obsérvese que los árboles pueden emitir una probabilidad continua. Puede cambiar el umbral de clasificación de un evento (bueno en su caso) para aumentar o disminuir la sensibilidad. Examine la curva ROC para ver cómo se relacionan los dos antes de hacerlo.

¿Tiene sentido dividir el conjunto de datos en conjunto de entrenamiento y de prueba?

Sí y no. Deberías nunca medir el rendimiento del algoritmo de clasificación en los mismos datos en los que se ajustó. Acabará sobreajustando drásticamente los datos y sobreestimando.

En este caso, un conjunto de entrenamiento y prueba no tiene sentido debido al pequeño tamaño de la muestra (~70). En su lugar, utilizaría Validación cruzada "Leave One Out" (LOOCV) .

El algoritmo es el siguiente:

  1. Mantenga una observación.
  2. Ajusta el modelo a los datos excepto la retención de 1.
  3. Clasificar la retención de 1.
  4. Repita los pasos 1 a 3 hasta que todas las observaciones hayan sido realizadas.
  5. Estimación de ajuste basada en las clasificaciones de 3.

En el caso de LOOCV, el modelo final es el que se ajusta a todo el conjunto de datos.

¿Qué proporción de datos debe tener el conjunto de entrenamiento? alrededor de una proporción de 60/40).

En general, los repartos 60/40 o 50/50 son buenos. Si tienes suficientes datos, haz un 50/25/25 en el que el segundo 25% se destina a un conjunto de validación. Cuando tengas un conjunto de validación, ajusta el modelo en el conjunto de prueba y luego comprueba su rendimiento en el conjunto de prueba. Si crees que hay que ajustar el modelo, hazlo y vuelve a probarlo en el conjunto de prueba hasta que estés satisfecho. A continuación, una vez que el modelo esté cerrado, clasifique los datos en el conjunto de validación. Los resultados del conjunto de validación serán los que usted comunique.

En su caso, le recomendaría LOOCV.

¿Cómo evitar el sobreajuste (es decir, cajas demasiado pequeñas)?

La mayoría de los algoritmos tienen parámetros de control ( Por ejemplo coste de las SVM). En el árbol en R, hay varios parámetros de control para ayudar a evitar el sobreajuste (véase tree.control ).

¿Cuál es una buena estadística para evaluar el rendimiento predictivo en este caso? ¿AUC? ¿Actitudinal? ¿Valor predictivo positivo? ¿Correlación de Matthews de Matthews?

Depende del objetivo. Yo recomendaría al menos informar de la exactitud, la sensibilidad, la especificidad y los valores predictivos positivos y negativos. Dado que usted ha dicho que el énfasis debe estar en la sensibilidad, esto debe ser un enfoque. El AUC también se utiliza comúnmente, pero es ruidoso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X