Date / heure d'encodage (données cycliques) pour les réseaux de neurones

12

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?

flaschenpost
la source

Réponses:

1

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.

babelproofreader
la source
2
Avez-vous essayé et réussi avec un encodage comme ça? Je serais surpris si un Neural Net "apprenait" les positions exactes du dimanche matin dans cet encodage. Mais surprendre les naïfs est l'une des forces des réseaux neuronaux, donc je ne parierais pas mon Scotch contre. ;-)
flaschenpost
Cela pourrait être utile si vous vouliez détecter des événements cycliques à la même heure sur plusieurs années, mais il me semble que la corrélation sera très faible. Je peux voir une probabilité plus élevée de corrélation entre la même heure chaque semaine ou la même heure chaque jour pour la plupart des données de séries chronologiques.
thekingoftruth
1

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:

entre matins et soirs, et diffère entre les jours de la semaine, et entre l'été et l'hiver, ...

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..241..16812,36,60...

CatsLoveJazz
la source
Ouais, c'était aussi ma première idée. Mais le concept circulaire du temps (23:59 est suivi de 00:00) est alors caché, et une autre chose qui me dérange est le saut entre les nombres apparemment entiers - un événement à 09:55 est très similaire à 10:05, mais le matin 06:10 est très différent de 06:55. Je pourrais imaginer rechercher des centres de l'époque (optique ou similaire?) Puis mesurer et donner la distance à ces centres. Donc 04h30 est la nuit la plus profonde, alors que 05h30 est plus "matinale", mais complètement pas comme le soir.
flaschenpost
1
Eh bien, dans ce cas, vous pouvez essayer de coder en sinusoïde ou en cosinus, ou en fait les deux.
CatsLoveJazz