Rede neural para regressão de múltiplas saídas

21

Eu tenho um conjunto de dados contendo 34 colunas de entrada e 8 colunas de saída.

Uma maneira de resolver o problema é pegar as 34 entradas e criar um modelo de regressão individual para cada coluna de saída.

Gostaria de saber se esse problema pode ser resolvido usando apenas um modelo, particularmente usando a Rede Neural.

Eu usei o Multilayer Perceptron, mas isso precisa de vários modelos, como a regressão linear. Sequência para sequência pode ser uma opção viável?

Estou usando o TensorFlow. Eu tenho código, mas acho que é mais importante entender o que estou perdendo em termos da teoria do perceptron multicamada.

Entendo que no MLP, se você tiver um nó de saída, ele fornecerá uma saída. Se você possui 10 nós de saída, é um problema com várias classes. Você escolhe a classe com a maior probabilidade dentre as 10 saídas. Mas no meu caso, é certo que haverá 8 saídas para a mesma entrada.

Digamos que, para um conjunto de entradas, você obtenha a coordenada 3D de algo (X, Y, Z). Como, Entradas = {1,10,5,7} Saída = {1,2,1}. Portanto, para a mesma entrada {1,10,5,7}, preciso criar modelos para o valor X, valor Y e Z. Uma solução é ter 3 modelos diferentes usando MLP. Mas gostaria de ver se posso ter um modelo. Então, pensei em usar seq2seq. Como o codificador recebe uma série de entradas e o decodificador fornece séries de saída. Mas parece que seq2seq no tensorflow não pode lidar com valores flutuantes. No entanto, posso estar errado sobre isso.

sjishan
fonte
Você parece ter alguns problemas para entender o modelo NN do perceptron multicamada e também o TensorFlow - suas declarações sobre isso estão incorretas. No entanto, não está claro por que você tem esse mal-entendido, o que significa que uma resposta não pode ajudá-lo a corrigir isso. Prever, por exemplo, 8 saídas de regressão em um único modelo NN é trivialmente fácil na maioria das estruturas NN, sem necessidade de sequências no seu caso. Então, acho que pode ser importante analisar em que seu último parágrafo se baseia para ajudá-lo - você poderia adicionar alguns detalhes do que viu ou tentou para chegar a esses pensamentos?
Neil Slater
Seria possível você fornecer uma resposta sobre como obter 8 saídas de regressão usando um único modelo NN? Obrigado.
Sjishan
Provavelmente, se você explicar algumas coisas editando sua pergunta: 1) Em que estrutura? 2) Qual é o seu código (ou design, se você não tem código) até agora? 3) O que está impedindo você de fazer isso sozinho? Preciso de 1 e 2 para responder com algo que você possa usar. Preciso de 3 para entender qual é o seu problema e explicar a solução.
Neil Slater
1. Tensorflow. 2. Eu tenho código, mas acho que é mais importante entender o que estou perdendo em termos da teoria do perceptron multicamada. Entendo que no MLP, se você tiver um nó de saída, ele fornecerá uma saída. Se você possui 10 nós de saída, é um problema com várias classes. Você escolhe a classe com a maior probabilidade dentre as 10 saídas. Mas no meu caso, é certo que haverá 8 saídas para a mesma entrada. Deixe-me mostrar um exemplo diferente, digamos, para um conjunto de entradas, você obterá a coordenada 3D de algo (X, Y, Z). Gosto, Entradas = {1,10,5,7} Saída = {1,2,1} #
sjishan
Portanto, para a mesma entrada {1,10,5,7}, preciso criar modelos para o valor X, valor Y e Z. Uma solução é ter 3 modelos diferentes usando MLP. Mas gostaria de ver se posso ter um modelo. Então, pensei em usar seq2seq. Como o codificador recebe uma série de entradas e o decodificador fornece séries de saída. Mas parece que seq2seq no tensorflow não pode lidar com valores flutuantes. No entanto, posso estar errado sobre isso.
sjishan

Respostas:

14

O que você está descrevendo é uma regressão linear multidimensional normal. Normalmente, esse tipo de problema é tratado com uma rede de feed-forward, MLP ou qualquer outra arquitetura que se adapte à natureza do problema.

Qualquer estrutura de rede neural é capaz de fazer algo assim.

A chave para fazer isso é lembrar que a última camada deve ter ativações lineares (ou seja, nenhuma ativação).

Conforme seus requisitos, o formato da camada de entrada seria um vetor (34) e a saída (8).

Atualização : a função de perda usual usada para problemas de regressão é o erro médio quadrático (MSE). Aqui está um exemplo de regressão multidimensional usando Keras ; a rede não é um MLP, mas deve ser bom ilustrar a ideia.

ncasas
fonte
1
Provavelmente vale a pena adicionar uma linha sobre a função de custo usual para regressão (erro quadrado médio) e apontar para o exemplo de regressão TensorFlow - embora eu tenha passado apenas 10 minutos procurando por uma agora e não tenha visto nada. . . (os exemplos saltam da regressão linear para os classificadores MNIST, mas nenhum modelo básico de regressão MLP).
Neil Slater
3

Você pode implementar isso de maneira muito simples em Python.
Seu X será a coleção de treinamento das coordenadas x, y, z.
Seu Y será a coleção de testes das 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')
John Quanasama
fonte
0

Isso é muito mais fácil do que você imagina - você pode simplesmente definir sua camada de saída como um vetor em vez de um único escalar. É claro que não há mágica por aqui e aconselho você a preparar seus dados (execute a normalização em lote para que todas as saídas tenham valores entre 0 e 1).

Se você estiver usando o Keras, o caminho para fazer isso é adicionar uma camada densa como a camada final de saída: model.add(Dense(8, activation='linear'))

Nissim
fonte