IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Prévoir valeur suivante d'une série de nombres


Sujet :

MATLAB

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut Prévoir valeur suivante d'une série de nombres
    Bonjour,

    Voilà, je possède une suite de valeurs, et j'aimerais savoir quelle méthode Matlab pourrait être utilisée pour prévoir la valeur suivante de ma série.

    Ex : '2, 4, 6, 8' -> la valeur suivante que je ne connais pas est : 10.

    Est ce que quelqu'un pourrait m'indiquer une méthode ?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    la question n'est pas claire... Quel est le contexte? Peux-tu donner d'autres exemples de séries?

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Dans un cadre général, c'est une question très difficile. En général, on estime un modèle sur des données historiques, puis on lui donne une nouvelle donnée qui fournira une prévision de la suivante.

    On distingue plusieurs classes de modèles :
    - paramétrique, par exemple une régression linéaire de X(t) sur X(t-1) ou sur t.
    - non paramétrique, par exemple plus proches voisins.

    Le choix du modèle est crucial ici, et dépend des propriétés supposées de ta série:stationnarité ou non, relation linéaire ou multiplicative etc

    En général, on réajuste par backtest les divers paramètres du modèle.


    Pour une série arithmétique comme celle que tu proposes, il est possible de régresser X(t) sur t, ce qui va te donner un coefficient égal à a=2. Ensuite, le prédicteur pour l'observation t+1 sera simplement a*(t+1).

    Mais bien sur, cette réponse est spécifique à des données suivant un modèle de regression par rapport à t, du type Y(t) = a*t+b+résidu

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut
    Le contexte est un objet qui se déplace dans une fenêtre de façon plus ou moins linéaire.
    J'aimerais donc connaître sa position s'il venait à passer derrière un autre objet.
    Il s'agit de suivi d'objet.

    La longueur de la série est variable. Pour l'instant je travaille sur 4 valeurs, et j'aimerais supposer la 5ème (que je ne connais pas).
    Une autre série de données :
    6.2885, 6.2887, 4.6161, 2.9547     
    0.2481, 0.4357, 0.1326, -0.3523
    
    Je cherche la valeur suivante de ces deux séries pour l'instant.
    En supposant que la série soit plus longue, je pense que ce serait plus facile pour estomper les valeurs fausses ou trop imprécises.
    D'où ma question sur le choix d'une méthode de prédiction

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Le contexte est un objet qui se déplace dans une fenêtre de façon plus ou moins linéaire.
    Une régression linéaire sur le temps me semble alors adéquat:
    Y(t) = a*t+b+résidu

    regstats() (entre autre) permet d'estimer une régression linéaire.

    Pour résumer:
    * Estimation du modèle sur les données disponible
    * Prédiction d'une valeur à une date t à venir par la relation Y(t) = a*t+b

    Et évidement, si le modèle linéaire est stable, plus tu as d'observation, plus précise sera l'estimation.

    Libre à toi ensuite de chercher à savoir tous les combien de points il est judicieux de remettre à jour l'estimation.

    Par contre je ne vois pas trop en quoi les données que tu donnes en exemple sont linéaires!

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut
    Je vous remercie déjà pour votre aide.

    Effectivement, j'ai mis les valeurs des déplacements, et non les positions :s.

    posX :  577.5775  571.2890  565.0003  560.3842  557.4295
    posY :  214.4506  214.2025  213.7668  213.6342  213.9865
    tps :      1                2             3            4            5
    
    J'ai utilisé la fonction regstats de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    res = regstats (posX, posY, 'linear');
    Mais je dois mal l'utiliser. Ou alors, je ne sais pas comment exploiter les données mises dans res (qui sont une liste de statistiques).

    Comment je peux prédire la position (posX, posY) à la date tps : 6 ?

  7. #7
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Si tu peux modéliser l'état de l'objet par sa position, vitesse, accélération (plus pourquoi pas des dérivées supérieurs selon les equations du mouvement de ton objet), tu peux estimer l'état à l'instant courant pour prédire l'instant suivant :
    En x seulement, en considérant juste position vitesse pour faire simple ca donne :
    à t=4
    p = 557.4295
    v = 560.3842-557.4295
    p prédit = p+v*dt
    Tu peux affiner l'estimation, si ça t'intéresse tu peux jeter un coup d'oeil au filtre de Kalman : http://fr.wikipedia.org/wiki/Filtre_de_Kalman qui est simple à mettre en place - mais c'est peut être un peu bourrin pour ce que tu veux faire.

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Tu as mis le mauvais modèle. Celui que tu utilises te servirait à prévoir posX en fonction de posY, mais pas le couple en fonction de t.

    il faut régresser sur le "temps"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = regstats (posX(:), (1:length(posX))', 'linear')
    Les coefficients (b,a) de l'équation Y(t) = a*t+b se trouvent dans res.beta.

    Le prédicteur de posX pour le nème point est alors res.beta(1)+ res.beta(2)*n

    il reste à traiter posY séparement, à l'identique

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut
    Oui, effectivement. Et en faisant la même chose avec la position sur y, je peux prévoir la position '(x,y)' de mon objet à une date 't' ultérieure.

    J'en ai profité pour jeter un coup d’œil au filtre de Kalman. Là, comme ça, ça me parait pas évident :s.

    Je vous remercie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Extraire valeur la plus présente dans une série de nombre
    Par le pingouin fou dans le forum WinDev
    Réponses: 7
    Dernier message: 13/07/2011, 06h11
  2. Réponses: 6
    Dernier message: 09/03/2011, 13h16
  3. Croissance d'une série de nombres
    Par momo1367 dans le forum Pascal
    Réponses: 11
    Dernier message: 19/01/2008, 16h11
  4. Réponses: 2
    Dernier message: 27/05/2007, 22h23
  5. Comment trouver les valeurs manquante d'une série ?
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/10/2006, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo