Comment coder la date et l'heure d'un événement pour un réseau neuronal?
Je n'ai pas de série chronologique continue, mais certains événements avec date et heure, et j'analyse une sorte d'intérêt. Cet intérêt diffère entre les matinées et les soirées, et diffère entre les jours de la semaine, et entre l'été et l'hiver, et avant Noël et Pâques et ainsi de suite. Et les événements eux-mêmes ont une forte répartition non uniforme dans le temps (plus le jour que la nuit, certains types plus pendant la semaine, certains plus le week-end).
J'ai essayé de l'encoder en nombre de semaines dans l'année, en jours 1-7 et en heures. Mais jouer avec un autoencodeur clairsemé m'a donné l'impression que mes données n'avaient aucun sens pour un réseau de neurones, elles ne pouvaient même pas reproduire quoi que ce soit près de l'entrée même avec une grande couche cachée. Ni comme catégoriel 0-1 ni comme valeurs normalisées.
Mais la recherche de l'encodage du temps pour un réseau de neurones donne principalement des informations sur les séries temporelles, donc je suis un peu bandé par la forêt mais en cherchant l'arbre.
Bien sûr, je pouvais regarder les données et les classer plus ou moins despotiques. Mais le concept de Deep Learning semble balayer toute l'extraction manuelle des fonctionnalités fabriquée à la main. Et la catégorisation insérerait de gros sauts dans une variable d'entrée naturellement continue.
Mon "encodage naturel" dans mon cerveau ressemble plus à une adhésion floue à certaines catégories comme "nuit", "matin", "jour de semaine" et ainsi de suite.
Pour rendre le tout plus intéressant, la variable dépendante contient également ces données de date / heure, mais c'est une question différente.
EDIT: En quelque sorte liés au type cyclique de données sont des questions récentes, comme
Quels tests statistiques sont raisonnables avec cet ensemble de données de l'heure?
la source
Vous pouvez essayer de représenter le temps comme une grande matrice, c'est-à-dire un 365 par 24, pour représenter les jours de l'année et les heures de la journée, puis "dérouler" ceci dans un vecteur de 1 par 8760. Le temps correspondrait alors à la position dans ce vecteur et la valeur à cette position est la valeur à ce moment.
la source
Je suggérerais de créer plusieurs entités d'entrée à partir de la série chronologique en utilisant des relations que vous savez (ou croyez) exister déjà dans les données. Par exemple, vous déclarez que la sortie cible variera:
Alors pourquoi ne pas créer un ensemble de fonctionnalités qui décrivent chacun de ces «cycles». Cela peut aider à démêler les variations micro et macro plutôt qu'une seule fonctionnalité qui décrit tout.
Par exemple...
Si vous avez une tendance selon laquelle quelque chose d'intéressant se produit vers midi chaque jour, créez une fonction de 1 à qui décrit les heures de la journée. Maintenant, le réseau apprendra à se déclencher à environ 12. Comparez cela au cas où vous avez ces mêmes données encodées en heures dans une semaine . Maintenant, le réseau doit essayer d'apprendre à se déclencher sur ce qui est beaucoup plus complexe.1..168 12 , 36 , 60 ...1..24 1..168 12,36,60...
la source