Comment coder la date en entrée dans le réseau neuronal?


12

J'utilise des réseaux de neurones pour prédire une série chronologique. La question à laquelle je suis confronté maintenant est de savoir comment encoder la date / l'heure / le numéro de série. de chaque jeu d'entrée comme entrée du réseau neuronal?

Dois-je utiliser 1 du codage C (utilisé pour les catégories de codage) comme décrit ici ?

Ou devrais-je simplement le nourrir le temps (en millisecondes depuis le 1-1-1970)?

Ou l'alimenter est-il inutile tant que je l'alimente chronologiquement le reste des données?


Je ne sais pas pourquoi vous pensez qu'il est inutile de le nourrir si vous utilisez des réseaux de neurones pour prédire une série chronologique .
scaaahu

il existe de nombreuses façons de coder les dates / heures. il serait utile de connaître la nature des séries chronologiques. ce n'est pas a priori quelque chose à exclure ou à
admettre

@vzn J'essaie de prédire une série temporelle financière en général. Si cela est utile.
Shayan RC

Réponses:


17

Les réseaux de neurones ne sont pas magiques. Si vous les traitez comme ils sont et leur jetez simplement des données sans penser que vous allez avoir un très mauvais moment.

Vous devez vous arrêter et vous demander "Est-ce que les millisecondes depuis 1970 vont vraiment être prédictives de l'événement qui m'intéresse?" La réponse à laquelle vous devez arriver immédiatement est non. Pourquoi? Pour chaque instance dont vous vous souciez réellement (événements futurs, le passé s'est déjà produit), la variable de temps prendra une valeur supérieure à toute valeur que la variable de temps prendra dans vos données d'entraînement. Il est très peu probable qu'une telle variable aide. Pire encore, il est susceptible de provoquer un sur-ajustement (un problème grave pour les modèles non linéaires puissants comme les réseaux de neurones) si vous ne faites pas attention.

Maintenant, ce qui pourrait avoir du sens, c'est une variable comme la semaine de l'année ou le mois qui pourrait vous aider à modéliser les effets saisonniers ou annuels. J'ai fait du travail dans la prévision des maladies agricoles où le jour julien a fini par être une variable très importante. Sur la base de cette expérience, je pense que vous feriez mieux de coder ce type de variable en tant que variable catégorielle plutôt que ordinale, votre expérience peut très bien. Notez que le mois ou la semaine de l'année sont des événements répétables que l'on est susceptible de voir plusieurs fois dans vos données de formation et il est possible d'expliquer pourquoi une telle variable pourrait avoir un impact sur un résultat financier. Comparez cela à des millisecondes depuis 1970, ce qui n'est qu'une valeur qui augmente de façon monotone.

Enfin, à partir de votre déclaration "Ou est-ce que cela lui donne du temps inutile tant que je lui donne le reste des données chronologiquement?" il semble que vous ne compreniez pas très bien le fonctionnement des réseaux de neurones. Avec un réseau neuronal à action directe standard, l'ordre dans lequel vous alimentez le réseau vos données n'aura aucun impact sur les prévisions. L'ordre peut avoir un impact sur la formation si vous utilisez une descente de gradient stochastique ou en mini-lot, mais ce n'est qu'un artefact de la méthode de formation itérative (par opposition au lot). Si vous souhaitez modéliser la dépendance temporelle avec un réseau neuronal, vous devrez utiliser quelque chose comme une fenêtre coulissante ou un réseau neuronal récurrent.


2

vous déclarez dans les commentaires que vous travaillez sur la prévision des séries temporelles financières. l'inclusion ou non de temps dans les entrées dépend quelque peu du domaine. en général, c'est pertinent si vous avez une sorte de composante temporelle "cyclique" dans vos données. par exemple, il peut y avoir un effet hebdomadaire dans vos données si elles s'exécutent sur plusieurs semaines, ou un effet intrajournalier si elles s'étendent sur une seule journée. alors si vous avez plusieurs cycles, incluez une entrée qui reflète la position dans le cycle, par exemple de ou ou dites .[ 0 , 1 ] s i n ( t )[1,1][0,1]sin(t)

si vous constatez qu'il y a une tendance cohérente, par exemple en augmentant ou en diminuant au fil du temps, dites qu'il est plus approprié d'extraire cela des entrées avant d'alimenter les entrées via ce que l'on appelle "la tendance". en d'autres termes, vous soustrayez la formule pour cette tendance sous-jacente et la tendance plus la différence mais le NN se concentre uniquement sur la différence , pas la tendance .f ( t ) d t = f t + g t g t f tf(t)f(t)dt=ft+gtgtft

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.