Rede neural para regressão de saída múltipla


10

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 um perceptron de múltiplas camadas, mas isso precisa de vários modelos, assim como a regressão linear. O aprendizado de sequência para sequência 1 pode ser uma opção viável? Eu tentei usar o TensorFlow, ele não parece ser capaz de lidar com valores flutuantes.

Qualquer sugestão para resolver esse problema usando apenas um modelo unificado, especialmente usando redes neurais, será apreciada.

  1. Ilya Sutskever, Oriol Vinyals e Quoc V. Le (2014). Aprendizagem sequência a sequência com redes neurais. Avanços nos sistemas de processamento de informações neurais , 27. ( pdf )

Qual é o problema?
TEG - Restabelece Monica

11
(Para todos os eleitores perto potenciais: Esta não é uma questão de programação Seria off topic diante. Stack Overflow .)
gung - Reintegrar Monica

Você pode esclarecer a opção "sequência para sequência" aqui? Não sei se isso será familiar para as pessoas que trabalham com NNs, mas não é para mim.
gung - Restabelece Monica

Modelagem de sequência para sequência usando RNN. papers.nips.cc/paper/...
sjishan

Você pode tentar MultiOutputRegressor (). Isso funciona para este tipo de problemas
Subham Sarkar

Respostas:


6

Uma rede neural com múltiplos resultados assume a forma

Y=γ+V1Γ1+ϵV1=a(γ2+V2Γ2)V2=a(γ3+V3Γ3)VL1=a(γL+XΓL)
Se o seu resultado tiver a dimensão , então [ γ 1 , Γ 1 ] terá a dimensão ( p V 1 + 1 ) × 8 .N×8[γ1,Γ1](pV1+1)×8

Ou seja, você estaria assumindo que cada resultado compartilha TODOS os parâmetros nas camadas ocultas e possui apenas parâmetros diferentes para pegar a variável derivada mais alta e relacioná-la ao resultado.

Essa é uma suposição realista para o seu contexto?


4

No começo, pensei que o comentário do generic_user era um impedimento, mas percebi que não era:

Se eu treinar d redes diferentes em d saídas diferentes, então cada um vai estar apto para essa dimensão sem se importar com os outros.

Mas se eu treinar uma rede com saídas d e usar todas as saídas para retropropagação, cada peso em cada camada da rede será ajustado para que todas as saídas d sejam mais precisas.

Ou seja: cada parâmetro de rede será ajustado por uma soma de gradientes (como cada saída varia com uma " alternância " neste parâmetro), de modo que ajustá-lo na direção escolhida para cima ou para baixo causa uma saída mais precisa em geral - mesmo se você ajustar o o peso dessa maneira faz com que algumas dimensões da saída sejam menos precisas.

Então, sim, o que finalmente distingue cada saída é apenas uma equação linear codificada na última camada, mas no treinamento de uma rede de várias saídas cada camada se tornará melhor em apresentar essa última camada com algo que permita que ele faça seu trabalho melhor . E, portanto, segue-se que os relacionamentos entre saídas serão contabilizados por essa arquitetura.

Você pode fazer melhor do que uma rede totalmente conectada, fazendo sua arquitetura refletir quaisquer relacionamentos conhecidos na saída, assim como redes profundas se saem melhor do que as rasas, explorando relacionamentos "composicionais" entre as entradas .


Uma regressão multivariada assume que existe alguma matriz de covariância (desconhecida) que relaciona essas variáveis ​​de destino entre si. Você está sugerindo que apenas ter uma camada densa é suficiente para capturar essa covariância sem a necessidade de incluir explicitamente as camadas ocultas?
thecity2

Estou sugerindo que as camadas ocultas devem capturar parte dessa covariância. Uma camada de saída densa sozinha é apenas um monte de funções paralelas de regressores lineares por meio de ativação. Nenhuma relação entre saídas pode ser estabelecida quando não há uma camada oculta para que elas sintonizem mutuamente e tomem como entrada / passagem como entrada para outros nós de saída.
Pavel Komarov 13/01

0

Você pode fazer isso com apenas uma rede neural. Mas sua rede neural deve ficar assim:
Camada de entrada: 34 nós (um por sua coluna de entrada)
Camada de saída: 8 nós (um por sua coluna de saída)

Você pode adicionar quantas camadas ocultas quiser na Rede Neural. Portanto, a Rede Neural gera 8 valores previstos e cada valor será uma regressão diferente das entradas.


qual pacote de qual idioma suporta isso ??
Arpit Sisodia

0

Eu estava imaginando o mesmo; aqui estão minhas idéias:

Suponho que, se as saídas compartilham alguns padrões ocultos, o treinamento pode se beneficiar do aprendizado simultâneo da regressão para todas as saídas.

Seria interessante tentar uma arquitetura em que você construa uma rede neural para cada saída, mas todas as redes neurais compartilham algumas camadas (a primeira metade das camadas, por exemplo). Em seguida, você pode treinar cada rede neural ao mesmo tempo: dentro do ciclo de aprendizado, cada rede neural é treinada uma etapa (com um lote) sequencialmente.

Isso seria semelhante à transferência de conhecimento, mas com a diferença de que na transferência de conhecimento cada rede neural é totalmente treinada antes de reutilizar parte dela para treinar outra rede neural.

Aposto que alguém já pensou nisso antes, mas não tenho referência a isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.