1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Lissage de données, en recherche de méthode

    Bonjour à tous,

    Je me permets de venir vers vous pour discuter de lissage de données.

    Je suis à la recherche d'une méthode de lissage me permettant de lisser des données physiques telles que des températures, des pressions etc...

    Nom : tmpp.JPG
Affichages : 58
Taille : 116,9 Ko

    Comme vous pouvez le voir sur le premier graphe qui représente l'évolution d'une température, les données alternent entre différentes phases : des phases où il se passe peu de choses (première partie du graphe) puis d'autres phases où la température évolue avec une certaine signature qui se répète (deuxième partie du graphe).

    Nom : tmp2.JPG
Affichages : 57
Taille : 98,9 Ko

    Sur le deuxième graphe, cette fois ce sont des données de phénomènes vibratoires, qui se répètent également dans le temps.

    Ce sont des données qui présentent régulièrement des intempestifs, c'est à dire des valeurs aberrantes non valides, comme vous pouvez le voir image 3.

    Nom : tmp3.JPG
Affichages : 57
Taille : 21,0 Ko

    J'aimerai donc trouver une méthode de lissage (ou même une méthode par type de donnée, ce n'est pas gênant) permettant de lisser ces données et en particulier de lisser les intempestifs. Etant donner que je gère des données qui sont différentes d'une machine à l'autre, j'aimerai trouver des méthodes de lissage adaptables facilement à tous types de machines, sans avoir à recalculer des coefficients de lissage à chaque fois par exemple.

    J'ai essayé, pour me faire la main, la méthode de lissage exponentielle simple mais elle ne lisse pas les intempestifs par exemple, c'est pour ça que je regarde une méthode plus poussée.

    Si vous avez des pistes à m'indiquer, des méthodes de lissage qui vont semblerez particulièrement adapter, je suis preneur de vos conseils et prêt à en discuter.

    Bonne continuation !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 513
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 513
    Points : 16 915
    Points
    16 915
    Billets dans le blog
    1

    Par défaut

    Bonjour et bienvenue sur ce forum


    tu as déjà une moyenne glissante simple...


    par exemple sur 5 points (en construisant un nouveau tableau, pour que la moyenne glissante ne soit pas perturbée par la moyenne des points précédents) :


    moyenne[i] = (pt[i-2] + pt[i-1] + pt[i] + pt[i+1] + pt[i+2]) / 5.0


    Lors de ce calcul, tu peux calculer les écarts entre la moyenne trouvée et la valeur réelle.
    Ensuite, tu peux faire une passe en éliminant dans les points originaux tout point dont l'écart est supérieur à X, soit les eliminer directement..

    Le premier calcul te donnera une courbe beaucoup plus "lisse" (tu as remplacé les points par la moyenne des 5 points autour).

    Les 2 ensembles t'élimineront les valeurs aberrantes (mais aussi les points corrects entourés de 2 valeurs aberrantes, à moins que ta détermination du X soit correcte)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 993
    Points : 15 931
    Points
    15 931

    Par défaut

    Bonsoir,

    j'ai l'impression que tu cherches davantage à faire de la compression (au sens "audio" = réduire les pics) que du lissage.

    En cherchant "peak compression" sur un moteur de recherche, tu trouveras des explications.
    Et si tu rajoutes "median" et "tanh" à ta recherche, tu peux même avoir de la chance.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci à tous les deux pour vos réponses !

    Citation Envoyé par souviron34 Voir le message
    Bonjour et bienvenue sur ce forum


    tu as déjà une moyenne glissante simple...


    par exemple sur 5 points (en construisant un nouveau tableau, pour que la moyenne glissante ne soit pas perturbée par la moyenne des points précédents) :


    moyenne[i] = (pt[i-2] + pt[i-1] + pt[i] + pt[i+1] + pt[i+2]) / 5.0


    Lors de ce calcul, tu peux calculer les écarts entre la moyenne trouvée et la valeur réelle.
    Ensuite, tu peux faire une passe en éliminant dans les points originaux tout point dont l'écart est supérieur à X, soit les eliminer directement..

    Le premier calcul te donnera une courbe beaucoup plus "lisse" (tu as remplacé les points par la moyenne des 5 points autour).

    Les 2 ensembles t'élimineront les valeurs aberrantes (mais aussi les points corrects entourés de 2 valeurs aberrantes, à moins que ta détermination du X soit correcte)
    Technique très intéressante, je te remercie. J'ai essayé de la mettre en place sur un petit exemple fait rapidement sur Excel. J'ai volontairement mis une valeur aberrante à 100, case en rouge.

    Nom : excel.JPG
Affichages : 37
Taille : 47,7 Ko

    Mais comme tu le vois, j'ai 2 problèmes :

    1) Les moyennes mobile à 5 points autours de la valeur aberrante sont toutes un peu faussées. Faudrait-il faire une MM sur 7 ? 9 ? 11 points ?

    2) C'est la même chose pour l'écart (en valeur absolu) entre la valeur réelle et la moyenne mobile : cet écart est grand pour les points situés autour d'une valeur aberrante. Du coup quand j'essaie de filtrer ces points (dernière colonne) si ils dépassent un certain écart X, je me retrouve à filtrer un peu n'importe quoi ! Et surtout, si je considère qu'une valeur doit être écartée, par quoi je la remplace ?


    Citation Envoyé par pseudocode Voir le message
    Bonsoir,

    j'ai l'impression que tu cherches davantage à faire de la compression (au sens "audio" = réduire les pics) que du lissage.

    En cherchant "peak compression" sur un moteur de recherche, tu trouveras des explications.
    Et si tu rajoutes "median" et "tanh" à ta recherche, tu peux même avoir de la chance.
    Effectivement réduire les pics est l'une de mes priorités (et lisser le reste des données est encore mieux!).

    Je suis tombé sur cette page, sans doute que c'était celle-ci à laquelle tu pensais : http://dsp.stackexchange.com/questio...formula-needed

    Nom : median.JPG
Affichages : 37
Taille : 53,4 Ko

    J'ai une question : à quoi correspond le "median of the absolute value over a sliding window as a "typical level" detection" ?

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 993
    Points : 15 931
    Points
    15 931

    Par défaut

    Citation Envoyé par vmbbb Voir le message
    J'ai une question : à quoi correspond le "median of the absolute value over a sliding window as a "typical level" detection" ?
    C'est ce qu'a indiqué Souviron : on remplace chaque valeur par une fonction des valeurs voisines (=la fenêtre).


    La formule qu'a donné Souviron c'est la moyenne des valeurs sur une fenêtre glissante de taille 5:
    moyenne[i] = (pt[i-2] + pt[i-1] + pt[i] + pt[i+1] + pt[i+2]) / 5.0

    Le lien que tu cites suggère d'utiliser la médiane, c'est à dire la valeur qui partage l'ensemble des valeurs en deux parties égales.
    Médiane = la valeur la moins "extrême" = la valeur centrale de l'ensemble trié.

    {10, 4, 8, 9, 3} --trié--> {3, 4, 8, 9, 10} --> médiane=8

    La médiane glissante à l'avantage de supprimer les valeurs extrêmes, c'est à dire les valeurs aberrantes.
    Elle a l'inconvénient de ne pas lisser les données, car on choisit une valeur de l'ensemble de départ.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci à toi, je comprend mieux l’intérêt de la méthode !

    Par contre je ne vois pas à quoi sert le calcul avec tanh ? Est-ce que cela s'applique qu'avec certains types de données ? (en sinus ?)

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 513
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 513
    Points : 16 915
    Points
    16 915
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par vmbbb Voir le message
    1) Les moyennes mobile à 5 points autours de la valeur aberrante sont toutes un peu faussées. Faudrait-il faire une MM sur 7 ? 9 ? 11 points ?

    2) C'est la même chose pour l'écart (en valeur absolu) entre la valeur réelle et la moyenne mobile : cet écart est grand pour les points situés autour d'une valeur aberrante. Du coup quand j'essaie de filtrer ces points (dernière colonne) si ils dépassent un certain écart X, je me retrouve à filtrer un peu n'importe quoi ! Et surtout, si je considère qu'une valeur doit être écartée, par quoi je la remplace ?
    • La réponse à ta dernière question est : par la moyenne des voisins compte non-tenu de cette valeur

    • Pour les autres c'est aussi assez simple : soit tu fais le calcul comme suggéré dans la méthode donnée par pseudocode, soit simplement tu refais une passe de moyenne sur l'écart entre la valeur réelle et la moyenne :

      • première passe : calcul d'un tableau "moyenne" et "écart" sur 5

      • seconde passe : calcul du tableau "moyenne des écarts" sur 5 et élimination des pics

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
          si écart[i] <= moyenne des écarts[i]
             val[i] = moyenne[i]   /* ou valeur[i] */
          sinon
             val[i] = moyenne[i] recaculée sans i
          fin si
        Si ci-dessus tu gardes valeur[i] dans la première partie (si), tu auras la courbe originale où simplement les pics seront lissés. Tu peux alors finaliser par faire une troisième passe de moyenne sur 5 qui lissera défintivement la courbe en ayant auparavant lissé les pics
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 993
    Points : 15 931
    Points
    15 931

    Par défaut

    Citation Envoyé par vmbbb Voir le message
    Par contre je ne vois pas à quoi sert le calcul avec tanh ? Est-ce que cela s'applique qu'avec certains types de données ? (en sinus ?)
    Non, pas de rapport direct avec la trigonométrie ou les phénomènes oscillatoires.

    C'est simplement qu'elle à une forme intéressante pour les valeurs x>=0:
    - elle est quasi linéaire (y=x) pour les "petites" valeurs de x (0<x<0.5)
    - elle "compresse" progressivement les valeurs "moyennes" de x (0.5<x<2)
    - et enfin qu'elle limite les valeurs "hautes" de x (x>2)



    C'est donc assez adapté pour faire de la compression en douceur, pour peu qu'on se ramène sur un intervalle [0,2+]
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par pseudocode Voir le message
    Non, pas de rapport direct avec la trigonométrie ou les phénomènes oscillatoires.

    C'est simplement qu'elle à une forme intéressante pour les valeurs x>=0:
    - elle est quasi linéaire (y=x) pour les "petites" valeurs de x (0<x<0.5)
    - elle "compresse" progressivement les valeurs "moyennes" de x (0.5<x<2)
    - et enfin qu'elle limite les valeurs "hautes" de x (x>2)



    C'est donc assez adapté pour faire de la compression en douceur, pour peu qu'on se ramène sur un intervalle [0,2+]
    D'accord, et sur le site que je t'ai indiqué ils utilisent plutôt la forme k*tanh(x/k) pour que x/k soit compris entre 0 et 2 si j'ai bien compris. (ou 0,5 et 2 ?). Mais justement, comment choisir ce k ? Est-ce judicieux de le prendre comme étant la moyenne de toutes mes données ?

    Car si je le prend comme étant la moyenne de mes données (ici j'ai pris un exemple avec des température dont une valeur aberrante), je me retrouve avec une courbe (en verte) assez basse par rapport à ma courbe originale (en bleue) :

    Nom : kpetit.JPG
Affichages : 23
Taille : 32,4 Ko

    Et bien sur si je prend un k très grand, je retrouve la courbe originale :

    Nom : kgrand.JPG
Affichages : 23
Taille : 27,6 Ko

    Citation Envoyé par souviron34 Voir le message
    • La réponse à ta dernière question est : par la moyenne des voisins compte non-tenu de cette valeur

    • Pour les autres c'est aussi assez simple : soit tu fais le calcul comme suggéré dans la méthode donnée par pseudocode, soit simplement tu refais une passe de moyenne sur l'écart entre la valeur réelle et la moyenne :

      • première passe : calcul d'un tableau "moyenne" et "écart" sur 5

      • seconde passe : calcul du tableau "moyenne des écarts" sur 5 et élimination des pics

        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
          si écart[i] <= moyenne des écarts[i]
             val[i] = moyenne[i]   /* ou valeur[i] */
          sinon
             val[i] = moyenne[i] recaculée sans i
          fin si
        Si ci-dessus tu gardes valeur[i] dans la première partie (si), tu auras la courbe originale où simplement les pics seront lissés. Tu peux alors finaliser par faire une troisième passe de moyenne sur 5 qui lissera défintivement la courbe en ayant auparavant lissé les pics
    Bon, j'ai gardé mon exemple et je te montre ce que j'ai fais :

    Nom : moyenneglissante.JPG
Affichages : 24
Taille : 173,2 Ko

    Les filtres de 4 et 10 correspondent à nos X, je les ai pris au hasard pour l'instant.
    Et j'ai également mis les 2 formules qui me permettent de calculer mes 2 filtrages.
    Est-ce que cela correspond bien à ce que tu m'expliquais ?

    Par contre j'ai un doute : si l'écart est plus grand que X, à la première passe je prend comme valeur (pour la valeur correspond à la valeur aberrante) la moyenne des températures réelles ou la moyenne des moyennes des points autours du point aberrant ? (j'espère que je me fais bien comprendre, cf formule filtrage 1) Et même question à la deuxieme passe ?

    Je trouve que c'est assez intéressant comme méthode et pour avoir un filtrage optimale, ne serait-il pas possible de définir un X comme étant par exemple un certain % de la moyenne des températures et de continuer le filtrage tant que nos écarts dépassent ce X ? En gros ce serait la même chose mais avec dans une grande boucle tant que (pas envisageable sur Excel mais comme je vais coder les méthodes ce serait envisageable).

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 993
    Points : 15 931
    Points
    15 931

    Par défaut

    Citation Envoyé par vmbbb Voir le message
    Car si je le prend comme étant la moyenne de mes données (ici j'ai pris un exemple avec des température dont une valeur aberrante), je me retrouve avec une courbe (en verte) assez basse par rapport à ma courbe originale (en bleue)
    Si ta courbe filtrée est visiblement plus basse, c'est que k n'est pas assez grand. Pour ce ramener "en moyenne" sur l'intervalle [0,0.5], il faut diviser par 2 fois la moyenne.

    Sur le site en question, ils ont choisis "k = 2 x median of the absolute value".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Base de donnée personnelle & recherche
    Par remy67 dans le forum MySQL
    Réponses: 3
    Dernier message: 04/01/2009, 21h31
  2. Lissage de données importées
    Par Invité dans le forum MATLAB
    Réponses: 10
    Dernier message: 05/02/2008, 16h49
  3. Réponses: 1
    Dernier message: 05/07/2007, 09h34
  4. Structure de données pour recherche rapide
    Par socrate dans le forum C
    Réponses: 1
    Dernier message: 18/06/2006, 15h49
  5. Réponses: 2
    Dernier message: 10/11/2005, 17h59

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