Red neuronal para regresión de salida múltiple


21

Tengo un conjunto de datos que contiene 34 columnas de entrada y 8 columnas de salida.

Una forma de resolver el problema es tomar las 34 entradas y construir un modelo de regresión individual para cada columna de salida.

Me pregunto si este problema puede resolverse usando solo un modelo, particularmente usando Neural Network.

He usado Perceptron multicapa, pero eso necesita múltiples modelos al igual que la regresión lineal. ¿Secuencia a secuencia puede ser una opción viable?

Estoy usando TensorFlow. Tengo código pero creo que es más importante entender lo que me estoy perdiendo en términos de la teoría del perceptrón multicapa.

Entiendo que en MLP si tiene un nodo de salida, proporcionará una salida. Si tiene 10 nodos de salida, entonces es un problema de múltiples clases. Elige la clase con la mayor probabilidad de las 10 salidas. Pero en mi caso es seguro que habrá 8 salidas para la misma entrada.

Digamos, para un conjunto de entradas obtendrá la coordenada 3D de algo (X, Y, Z). Como, Entradas = {1,10,5,7} Salida = {1,2,1}. Entonces, para la misma entrada {1,10,5,7} necesito hacer modelos para el valor X, el valor Y y Z. Una solución es tener 3 modelos diferentes usando MLP. Pero me gustaría ver si puedo tener un modelo. Entonces pensé en usar seq2seq. Porque el codificador toma una serie de entradas y el decodificador proporciona series de salidas. Pero parece que seq2seq en tensorflow no puede manejar valores flotantes. Sin embargo, puedo estar equivocado sobre esto.


Parece que tiene algunos problemas para comprender el modelo NN de perceptrón multicapa y también el TensorFlow; sus afirmaciones sobre estos son incorrectas. Sin embargo, no está claro por qué tiene ese malentendido, lo que significa que una respuesta no puede ayudarlo a solucionarlo. Predecir, por ejemplo, 8 salidas de regresión en un solo modelo NN es trivialmente fácil en la mayoría de los marcos NN, no es necesario utilizar secuencias en su caso. Por lo tanto, creo que puede ser importante ver en qué se basa su último párrafo para ayudarlo. ¿Podría agregar algunos detalles de lo que ha visto o intentado para llegar a esos pensamientos?
Neil Slater

¿Sería posible que proporcionara una respuesta sobre cómo obtener 8 salidas de regresión utilizando un solo modelo NN? Gracias.
sjishan

Probablemente, si explica algunas cosas editando su pregunta: 1) ¿En qué marco? 2) ¿Cuál es su código (o diseño, si no tiene código) hasta ahora? 3) ¿Qué le impide hacerlo usted mismo? Necesito 1 y 2 para responder con algo que pueda usar. Necesito 3 para entender cuál es su problema y explicar la solución.
Neil Slater

1. Tensorflow. 2. Tengo código pero creo que es más importante entender lo que me estoy perdiendo en términos de la teoría del perceptrón multicapa. Entiendo que en MLP si tiene un nodo de salida, proporcionará una salida. Si tiene 10 nodos de salida, entonces es un problema de múltiples clases. Elige la clase con la mayor probabilidad de las 10 salidas. Pero en mi caso es seguro que habrá 8 salidas para la misma entrada. Permítanme mostrar un ejemplo diferente, digamos, para un conjunto de entradas obtendrá la coordenada 3D de algo (X, Y, Z). Me gusta, Entradas = {1,10,5,7} Salida = {1,2,1}
sjishan

Entonces, para la misma entrada {1,10,5,7} necesito hacer modelos para el valor X, el valor Y y Z. Una solución es tener 3 modelos diferentes usando MLP. Pero me gustaría ver si puedo tener un modelo. Entonces pensé en usar seq2seq. Porque el codificador toma una serie de entradas y el decodificador proporciona series de salidas. Pero parece que seq2seq en tensorflow no puede manejar valores flotantes. Sin embargo, puedo estar equivocado sobre esto.
sjishan

Respuestas:


14

Lo que está describiendo es una regresión lineal multidimensional normal. Este tipo de problema normalmente se aborda con una red de alimentación, MLP o cualquier otra arquitectura que se adapte a la naturaleza del problema.

Cualquier marco de red neuronal es capaz de hacer algo así.

La clave para hacerlo es recordar que la última capa debe tener activaciones lineales (es decir, ninguna activación).

Según sus requisitos, la forma de la capa de entrada sería un vector (34,) y la salida (8,).

Actualización : la función de pérdida habitual utilizada para problemas de regresión es el error cuadrático medio (MSE). Aquí hay un ejemplo de regresión multidimensional usando Keras ; la red no es un MLP pero debería estar bien para ilustrar la idea.


1
Probablemente valga la pena agregar una línea sobre la función de costo habitual para la regresión (error cuadrático medio) y señalar el ejemplo de regresión TensorFlow, aunque acabo de pasar 10 minutos buscando una ahora y no vi nada. . . (los ejemplos saltan de regresión lineal a clasificadores MNIST, pero no modelos de regresión MLP básicos).
Neil Slater

4

Puede implementar esto de manera muy simple en Python.
Tu X será la colección de coordenadas de entrenamiento x, y, z.
Su Y será la colección de pruebas de coordenadas x, y, z.

from sklearn import cross_validation                     
from sklearn.neural_network import MLPRegressor   

model = MLPRegressor(solver='lbfgs',alpha=0.001,hidden_layer_sizes=(150,))
cross_validation.cross_val_score(model, X, Y,scoring='mean_squared_error')

0

Esto es mucho más fácil de lo que parece: simplemente puede configurar su capa de salida para que sea un vector en lugar de un solo escalar. Por supuesto, no hay magia por aquí y le aconsejo que prepare sus datos (realice la normalización por lotes para que todas las salidas sean valores entre 0 y 1).

Si está utilizando Keras, la forma de hacerlo es agregando una capa densa como la capa de salida final: model.add(Dense(8, activation='linear'))

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.