Ici, jetez un œil: vous pouvez voir exactement où se terminent les données d'entraînement. Les données d'entraînement vont de à .1
J'ai utilisé Keras et un réseau dense 1-100-100-2 avec activation tanh. Je calcule le résultat à partir de deux valeurs, p et q comme p / q. De cette façon, je peux obtenir n'importe quelle taille de nombre en utilisant uniquement des valeurs inférieures à 1.
Veuillez noter que je suis toujours un débutant dans ce domaine, alors allez-y doucement avec moi.
regression
neural-networks
python
keras
Markus Appel
la source
la source
Réponses:
Vous utilisez un réseau à action directe; les autres réponses sont exactes: les FFNN ne sont pas excellents pour l'extrapolation au-delà de la plage des données d'entraînement.
Cependant, étant donné que les données ont une qualité périodique, le problème peut se prêter à une modélisation avec un LSTM. Les LSTM sont une variété de cellules de réseau neuronal qui opèrent sur des séquences et ont une "mémoire" sur ce qu'elles ont "vu" auparavant. Le résumé de ce chapitre du livre suggère qu'une approche LSTM est un succès qualifié sur les problèmes périodiques.
Dans ce cas, les données d'apprentissage seraient une séquence de tuples , et la tâche de faire des prédictions précises pour les nouvelles entrées pour certains et indexe une séquence croissante. La longueur de chaque séquence d'entrée, la largeur de l'intervalle qu'elles couvrent et leur espacement sont à vous. Intuitivement, je m'attendrais à ce qu'une grille régulière couvrant une période soit un bon point de départ, avec des séquences d'entraînement couvrant un large éventail de valeurs, plutôt que limitées à un certain intervalle.( xje, péché( xje) ) n iXi + 1… Xi + n n je
(Jimenez-Guarneros, Magdiel et Gomez-Gil, Pilar et Fonseca-Delgado, Rigoberto et Ramirez-Cortes, Manuel et Alarcon-Aquino, Vicente, "Prédiction à long terme d'une fonction sinusoïdale utilisant un réseau neuronal LSTM", dans Nature- Conception inspirée de systèmes intelligents hybrides )
la source
Si ce que vous voulez faire est d'apprendre des fonctions périodiques simples comme celle-ci, alors vous pouvez envisager d'utiliser des processus gaussiens. Les GP vous permettent d'appliquer vos connaissances de domaine dans une certaine mesure en spécifiant une fonction de covariance appropriée; dans cet exemple, puisque vous savez que les données sont périodiques, vous pouvez choisir un noyau périodique, puis le modèle extrapolera cette structure. Vous pouvez voir un exemple dans l'image; ici, j'essaie d'ajuster les données de hauteur de marée, donc je sais qu'il a une structure périodique. Parce que j'utilise une structure périodique, le modèle extrapole plus ou moins correctement cette périodicité. OFC si vous essayez d'en apprendre davantage sur les réseaux de neurones, ce n'est pas vraiment pertinent, mais cela pourrait être une approche légèrement plus agréable que les fonctionnalités d'ingénierie manuelle. Soit dit en passant, les réseaux de neurones et les gp sont étroitement liés en théorie,
Les GPs ne sont pas toujours utiles car contrairement aux réseaux neuronaux, ils sont difficiles à mettre à l'échelle pour de grands ensembles de données et des réseaux profonds, mais si vous êtes intéressé par des problèmes de faible dimension comme celui-ci, ils seront probablement plus rapides et plus fiables.
(dans l'image, les points noirs sont des données d'entraînement et le rouge sont les cibles; vous pouvez voir que même s'il ne correspond pas exactement, le modèle apprend la périodicité approximativement. Les bandes colorées sont les intervalles de confiance des modèles prédiction)
la source
Les algorithmes d'apprentissage automatique - y compris les réseaux de neurones - peuvent apprendre à approximer des fonctions arbitraires, mais uniquement dans l'intervalle où la densité des données d'entraînement est suffisante.
Les algorithmes d'apprentissage automatique basés sur des statistiques fonctionnent mieux lorsqu'ils effectuent une interpolation - prédisant des valeurs proches ou intermédiaires des exemples de formation.
En dehors de vos données d'entraînement, vous espérez une extrapolation. Mais il n'y a pas de moyen facile d'y parvenir. Un réseau neuronal n'apprend jamais une fonction analytiquement, seulement approximativement via des statistiques - cela est vrai pour presque toutes les techniques d'apprentissage supervisé ML. Les algorithmes les plus avancés peuvent se rapprocher arbitrairement d'une fonction choisie avec suffisamment d'exemples (et de paramètres libres dans le modèle), mais ne le feront toujours que dans la plage des données d'apprentissage fournies.
Le comportement du réseau (ou autre ML) en dehors de la plage de vos données d'entraînement dépendra de son architecture, y compris des fonctions d'activation utilisées.
la source
Dans certains cas, l'approche suggérée par @Neil Slater pour transformer vos fonctionnalités avec une fonction périodique fonctionnera très bien et pourrait être la meilleure solution. La difficulté ici est que vous devrez peut-être choisir la période / longueur d'onde manuellement (voir cette question ).
Si vous souhaitez que la périodicité soit intégrée plus profondément dans le réseau, le moyen le plus simple serait d'utiliser sin / cos comme fonction d'activation dans une ou plusieurs couches. Cet article discute des difficultés potentielles et des stratégies pour gérer les fonctions d'activation périodiques.
Alternativement, cet article adopte une approche différente, où les poids du réseau dépendent d'une fonction périodique. L'article suggère également d'utiliser des splines au lieu de sin / cos, car elles sont plus flexibles. C'était l'un de mes papiers préférés l'année dernière, donc ça vaut le coup de lire (ou du moins de regarder la vidéo) même si vous ne finissez pas par utiliser son approche.
la source
Vous avez adopté une mauvaise approche, rien ne peut être fait avec cette approche pour résoudre le problème.
Il existe plusieurs façons de résoudre le problème. Je vais suggérer la plus évidente grâce à l'ingénierie des fonctionnalités. Au lieu de brancher le temps comme une caractéristique linéaire, mettez-le comme reste du module T = 1. Par exemple, t = 0,2, 1,2 et 2,2 deviendront tous une caractéristique t1 = 0,1 etc. Tant que T est plus grand que la période d'onde, cela fonctionnera. Branchez cette chose dans votre filet et voyez comment cela fonctionne.
L'ingénierie des fonctionnalités est sous-estimée. Il y a cette tendance dans l'IA / ML où les vendeurs prétendent que vous jetez toutes vos entrées dans le net, et d'une manière ou d'une autre cela saura quoi faire avec eux. Bien sûr, il le fait, comme vous l'avez vu dans votre exemple, mais il se décompose aussi facilement. Ceci est un excellent exemple qui montre à quel point il est important de créer de bonnes fonctionnalités, même dans certains cas les plus simples.
En outre, j'espère que vous vous rendez compte qu'il s'agit de l'exemple le plus grossier de l'ingénierie des fonctionnalités. C'est juste pour vous donner une idée de ce que vous pourriez en faire.
la source