Eu tenho um pouco de conhecimento autodidata trabalhando com algoritmos de Machine Learning (o material básico do tipo Floresta Aleatória e Regressão Linear). Decidi ramificar-me e começar a aprender RNN's com Keras. Ao analisar a maioria dos exemplos, que geralmente envolvem previsões de ações, não consegui encontrar nenhum exemplo básico de vários recursos sendo implementados, exceto uma coluna sendo a data do recurso e a outra a saída. Há uma coisa fundamental fundamental que me falta ou algo assim?
Se alguém tem um exemplo, eu agradeceria muito.
Obrigado!
machine-learning
neural-network
keras
Rjay155
fonte
fonte
multiple features
aqui , uma pergunta mais específica sobre como usar a RNN para previsões de séries temporais com recursos que contêm dados numéricos e não numéricos?Respostas:
Redes neurais recorrentes (RNNs) são projetadas para aprender dados de sequência. Como você adivinha, eles definitivamente podem usar vários recursos como entrada! Os RNNs de Keras recebem entradas 2D ( T , F ) dos timesteps T e apresentam F (estou ignorando a dimensão do lote aqui).
No entanto, você nem sempre precisa ou deseja os intervalos de tempo intermediários, t = 1, 2 ... ( T - 1). Portanto, o Keras oferece suporte flexível aos dois modos. Para que ele produza todos os timestados T , passe
return_sequences=True
para o seu RNN (por exemplo,LSTM
ouGRU
) na construção. Se você deseja apenas o último timestep t = T , usereturn_sequences=False
(este é o padrão se você não passarreturn_sequences
para o construtor).Abaixo estão exemplos de ambos os modos.
Exemplo 1: aprendendo a sequência
Aqui está um exemplo rápido de treinamento de um LSTM (tipo de RNN) que mantém toda a sequência. Neste exemplo, cada ponto de dados de entrada possui 2 timesteps, cada um com 3 recursos; os dados de saída têm 2 timesteps (porque
return_sequences=True
), cada um com 4 pontos de dados (porque esse é o tamanho para o qual passoLSTM
).Exemplo 2: aprendendo o último timestep
Se, por outro lado, você deseja treinar um LSTM que produz apenas o último timestep na sequência, é necessário definir
return_sequences=False
(ou apenas removê-lo do construtor completamente, já queFalse
é o padrão). E então seus dados de saída (data_y
no exemplo acima) precisam ser reorganizados, pois você só precisa fornecer o último timestep. Portanto, neste segundo exemplo, cada ponto de dados de entrada ainda possui 2 intervalos de tempo, cada um com 3 recursos. Os dados de saída, no entanto, são apenas um único vetor para cada ponto de dados, porque reduzimos tudo a um único passo de tempo. Porém, cada um desses vetores de saída ainda possui quatro recursos (porque esse é o tamanho que eu passoLSTM
).fonte
data_x
simplesmente conteria um único ponto de dados e esse ponto de dados teria quatro timestaps, cada uma com três dimensões (e da mesma forma, você precisaria mesclardata_y
da mesma maneira). O número de timestaps que você usa simplesmente depende do que você está tentando modelar (e quantos timestaps são relevantes para esse processo).