¿Cómo configurar una red neuronal para generar datos ordinales?

20

Tengo una red neuronal configurada para predecir algo donde la variable de salida es ordinal. Describiré a continuación usando tres salidas posibles A <B <C.

Es bastante obvio cómo usar una red neuronal para generar datos categóricos: la salida es solo un softmax de la última capa (generalmente completamente conectada), una por categoría, y la categoría predicha es la que tiene el mayor valor de salida (esto es el valor predeterminado en muchos modelos populares). He estado usando la misma configuración para valores ordinales. Sin embargo, en este caso, las salidas a menudo no tienen sentido, por ejemplo, las salidas de red para A y C son altas pero B es baja: esto no es plausible para los valores ordinales.

Tengo una idea para esto, que es calcular la pérdida en base a la comparación de las salidas con 1 0 0 para A, 1 1 0 para B y 1 1 1 para C. Los umbrales exactos se pueden ajustar más tarde usando otro clasificador (p. Ej. Bayesiano ) pero esto parece capturar la idea esencial de un ordenamiento de entradas, sin prescribir ninguna escala de intervalo específica.

¿Cuál es la forma estándar de resolver este problema? ¿Existe alguna investigación o referencia que describa los pros y los contras de los diferentes enfoques?

Alex I
fuente
1
Obtuve muchos éxitos interesantes en Google por "regresión logística ordinal", por ejemplo, este artículo
shadowtalker
@ssdecontrol: Interesante. Lo intenté; los resultados fueron mejores que elegir la salida con el valor más alto pero ligeramente peor que otros métodos (ingenuo bayesiano, etc.). Esto es útil, pero no ayuda a entrenar la red, solo mejora los resultados ligeramente después del hecho ... o al menos no veo cómo hacer que ayude a entrenar la red.
Alex I
¿Qué "intentaste"? Mi único punto es que el motor de búsqueda podría ser más útil de lo que cabría esperar
shadowtalker
Además, no estoy seguro de entender lo que quiere decir con "por ejemplo, las salidas de red para A y C son altas pero B es baja: esto no es plausible". ¿Quieres decir que estás prediciendo muchos As y Cs pero pocos Bs? No veo por qué eso debería ser inverosímil a menos que tenga una razón sustantiva o específica de dominio para pensarlo
shadowtalker
Tampoco sé cómo podría tener una salida como "1 1 0". Creo que hay cierta confusión sobre la terminología aquí. ¿Estás describiendo resultados ordinales acumulativos ? ¿Como en un modelo logit acumulativo?
shadowtalker

Respuestas:

15

KK

Pero algunas personas han logrado inventar una codificación inteligente para sus clases ordinales (vea esta respuesta de stackoverflow ). Es una especie de codificación única,

  • la clase 1 se representa como [0 0 0 0 ...]

  • la clase 2 se representa como [1 0 0 0 ...]

  • la clase 3 se representa como [1 1 0 0 ...]

P(y^<k)np.sum

Esta estrategia se asemeja al conjunto de Frank y Hall , y creo que esta es la primera publicación de tal.

Ricardo Cruz
fuente
Este enfoque parece mucho más atractivo. Es importante darse cuenta de que usar modos predichos para convertir esto en un problema de clasificación no es una buena idea. Las probabilidades acumuladas predichas se pueden convertir en probabilidades individuales predichas, por lo que la función de utilidad para tomar una decisión final se puede insertar mucho más tarde cuando se conocen las utilidades. Ver fharrell.com/post/classification .
Frank Harrell
1
@RicardoCruz - Hmm, eso se parece mucho a lo que sugerí: "1 0 0 para A, 1 1 0 para B y 1 1 1 para C". Es bueno saber que funciona! También wow, fue un artículo de 2007, esta idea ha existido durante mucho tiempo
Alex I
Sí, ¡me sorprendí cuando encontré ese papel!
Ricardo Cruz
Nota: Como se indica en "Un enfoque de red Neurel para la regresión ordinal": "... el uso de funciones sigmoideas independientes para los nodos de salida no garantiza la relación monotónica (o1> = o2> = ....> = oK), que es no es necesario pero es deseable para hacer predicciones ". Por lo tanto, simplemente realizar un "np.sum" en el tiempo de predicción no es el mejor método.
sccrthlt
1
Edite mi comentario anterior: Realizar "np.sum" en las salidas de la red neuronal es engañoso. La siguiente situación puede surgir cuando el vector de salida es [0 1 0 1 0]. Realizar una suma en este vector produciría una predicción de clase de 2, cuando de hecho la red neuronal no está segura.
sccrthlt