Data / hora de codificação (dados cíclicos) para redes neurais

12

Como codificar a data e hora de um evento para uma rede neural?

Não tenho uma série temporal contínua, mas alguns eventos com data e hora, e analiso algum tipo de interesse. Esse interesse difere entre manhãs e tardes, e entre dias úteis, e entre verão e inverno, e antes do Natal e da Páscoa, e assim por diante. E os eventos em si têm uma forte distribuição não uniforme ao longo do tempo (mais durante o dia do que à noite, alguns tipos mais durante a semana, outros mais no fim de semana).

Tentei codificá-lo como Número de semana no ano, Dia da semana 1-7 e Hora do dia. Mas brincar com um codificador automático esparso me deu a impressão de que meus dados não fazem sentido para uma rede neural; eles nem sequer podiam reproduzir nada perto da entrada, mesmo com uma grande camada oculta. Nem como categoria 0-1 nem como valores normalizados.

Mas procurar a codificação do tempo para uma rede neural fornece principalmente informações sobre séries temporais, por isso estou um pouco vendado pela floresta, mas procurando pela árvore.

É claro que eu poderia examinar os dados e categorizá-los mais ou menos despóticos. Mas o conceito de Deep Learning parece varrer toda a extração manual de recursos artesanal. E a categorização iria inserir grandes saltos em uma variável de entrada naturalmente contínua.

Minha "codificação natural" no meu cérebro é mais como uma associação confusa a algumas categorias como "noite", "manhã", "dia da semana" e assim por diante.

Para tornar tudo mais interessante, também a variável dependente contém esses dados de data / hora, mas essa é uma pergunta diferente.

EDIT: De alguma forma relacionados ao tipo cíclico de dados, há algumas perguntas recentes, como

Quais testes estatísticos são razoáveis ​​com esse conjunto de dados da hora do dia?

flaschenpost
fonte

Respostas:

7

Eu estava procurando uma resposta para um problema semelhante e me deparei com este tópico. A idéia de codificação sinusoidal é explorada nesta postagem do blog:

Codificação de recursos contínuos cíclicos - 24 horas

A resposta de Ian atendeu totalmente às minhas necessidades, então pensei em publicá-la aqui para memória futura.

João Paulo Figueira
fonte
Gostaria de saber como isso pode ser usado stackoverflow.com/questions/59653862/… - especialmente quando são as horas.
user4581 16/01
1

Você pode tentar representar o tempo como uma grande matriz, ou seja, 365 por 24, para representar os dias do ano e as horas do dia e, em seguida, "desenrolar" isso em um vetor de 1 por 8760. O tempo corresponderia à posição dentro desse vetor e o valor nessa posição é o valor naquele momento.

babelproofreader
fonte
2
Você já tentou e conseguiu uma codificação como essa? Eu ficaria surpreso se uma rede neural "aprendesse" as posições exatas do domingo de manhã nessa codificação. Mas surpreender o ingênuo é um dos pontos fortes das redes neurais, por isso não apostaria meu uísque contra ele. ;-)
flaschenpost
Isso pode ser útil se você quiser detectar eventos cíclicos na mesma hora em vários anos, mas parece-me que a correlação será muito fraca. Percebo uma maior probabilidade de uma correlação entre a mesma hora a cada semana ou a mesma hora por dia, para a maioria dos dados de séries temporais.
thekingoftruth
1

Eu sugeriria a criação de vários recursos de entrada da série temporal usando relacionamentos que você conhece (ou acredita) que já existem nos dados. Por exemplo, você declara que a saída de destino variará:

entre manhãs e noites, e difere entre dias da semana e entre verão e inverno, ...

Então, por que não criar um conjunto de recursos que descreva cada um desses 'ciclos'? Isso pode ajudar a provocar variações micro e macro, em vez de um único recurso que descreve tudo.

Por exemplo...

Se você tem uma tendência pela qual algo de interesse ocorre por volta do meio-dia todos os dias, crie um recurso de 1 a que descreva as horas do dia. Agora a rede aprenderá a disparar por volta das 12. Compare com o caso em que você tem esses mesmos dados codificados como horas em uma semana . Agora a rede precisa tentar aprender a acionar que é significativamente mais complexo.1..168 12 , 36 , 60 ...1..241..16812,36,60...

CatsLoveJazz
fonte
Sim, essa foi minha primeira ideia também. Mas o conceito circular de tempo (23:59 é seguido por 00:00) fica oculto, e outra coisa que me incomoda é o salto entre os números aparentemente inteiros - um evento às 09:55 é muito semelhante às 10:05, mas de manhã 06:10 é muito diferente de 06:55. Eu poderia imaginar procurar centros do tempo (óptica ou algo parecido?) E depois medir e dar a distância a esses centros. Então 04:30 é a noite mais profunda, enquanto 05:30 é mais "matinal", mas completamente diferente da noite.
Flaschenpost
1
Bem, nesse caso, você pode tentar codificar como sinusóide ou cosseno, ou de fato ambos.
precisa saber é o seguinte