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

Algorithmes et structures de données Discussion :

Détection de phases dans une courbe [K-Means sans connaître le k]


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Détection de phases dans une courbe [K-Means sans connaître le k]
    Bonjour tout le monde !

    Tout d'abord je tiens à préciser que je "code" en PHP, mais il me semble que ma question est plutôt une question d'algorithmie que de syntaxe de codage alors je la poste ici.

    Voilà mon problème, j'ai une courbe (une suite de valeurs Y (les X étant 1,2,3,4,5)) et je cherche les grosses variations. Je m'explique les différentes phases de cette courbe. Lorsqu'elle est plus vers le 4.1, lorsqu'elle monte directement à 5.3, et y stagne pendant une dizaine de points, puis redescend à 4.4 pendant 3-4 points... etc...

    J'ai de suite pensé à un K-Means, sauf que je ne connais pas à l'avance le nombre de clusters K, ici le nombre de phases que va prendre la courbe.

    Quelqu'un a t'il une idée de comment trouver ses variations (d'un point de vue K-Means, c.à.d le nombre de K et après les différents clusters) ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Les variations brutales sont plutôt repérées par un gradient.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci pour ta réponse.

    Tu pourrais un peu plus détailler ?
    Pour moi un gradient est une mesure d'angle comme le degrés (rappel de mes cours de lycée xD).

    Je ne vois pas ici, comment il pourrait me permettre de trouver les différentes phases de ma courbe, de trouver en fait les différents clusters parmi ma série de valeurs.

    Merci.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Bon j'ai étudié le truc, et je ne veux pas que détecter le changement brutale de variation de la courbe. Je voudrais aussi toute la plage de cette variation. Et pour cela j'ai bien peur que les gradients soient inutiles.

    En fait il faut que je trouve les clusters des points des ordonnées de cette courbe. Pour synthétiser ^^

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    tu as toujours l'algorithme des mean shift si tu veux obtenir les clusters sans en connaitre le nombre à l'avance à toi de trouver les bon paramètres mais ça a pas l'air trop compliqué.

    mais tu peux faire plus simple avec le gradient
    tu calcules ton vecteur gradient, tu cherche ta première variation brute. (donc la tu viens de passer de 4.1 à 5.3 ) puis tu cherche la prochaine variation brute (5.3 à 4.1 ou 5.3 a 6.6 par exemple) tous tes points entre ces deux valeurs appartiennent à ton cluster autour de 5.3.

    après je sais pas si tu peux rajouter une étape pour fusionné deux liste avec des moyenne proche
    exemple : tu es a 4.1 tu passe a 5.3 tu redescent a 4.2 et tu remonte a 6, si tu veux fusionner les 4.1 et 4.2 tu compares les moyennes / mediane (ce dont tu as besoin) pour les fusionners

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci !

    Tu as tout à fait cerné mon cas, c'est déjà ça.

    Merci pour les deux aiguillages, mais autant je suis plutôt doué en programmation, autant mes heures glorieuses de mathématiques datent un peu.

    Tu peux expliciter cette phrase là "tu calcules ton vecteur gradient, tu cherches ta première variation brute." s'il te plaît ^^
    Je ne sais pas comment m'y prendre pour, à partir d'une liste de points, récupérer le gradient, puis ensuite se servir de celui ci pour détecter la variation brutale.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Personne n'a d'autres idées ou explications ?

    Ou alors le code de l'algo du Mean SHIFT ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    Citation Envoyé par 0.GeGe.0 Voir le message
    Merci !

    Tu as tout à fait cerné mon cas, c'est déjà ça.

    Merci pour les deux aiguillages, mais autant je suis plutôt doué en programmation, autant mes heures glorieuses de mathématiques datent un peu.

    Tu peux expliciter cette phrase là "tu calcules ton vecteur gradient, tu cherches ta première variation brute." s'il te plaît ^^
    Je ne sais pas comment m'y prendre pour, à partir d'une liste de points, récupérer le gradient, puis ensuite se servir de celui ci pour détecter la variation brutale.
    ici quand on parle de gradient c'est la différence entre 2 points qui se suive. ton vecteur gradient a donc nécessairement une valeur de moins que ton vecteur y
    pour calculé ton vecteur gradient tu parcours donc ton vecteur y de 1 à taille-1 et tu aura gradient(i)=y(i+1)-y(i).

    tu as donc 2 vecteurs y et gradient.


    variation brute :

    tu commence avec un vecteur de liste (chaque liste du vecteur représente un cluster )
    tu initialises ton premier element de ton tableau et ton premier element de ta liste avec ton premier point y(1)

    tu parcours ton vecteur gradient.

    si abs(gradient(i))<1 ( je suppose ici que une grande variation est une variation supérieur ou égal à 1. le abs signifie valeur absolue)

    ici tu est toujours dans un cluster
    tu ajoute donc le point de y correspondant à l'indice du gradient à la liste

    sinon ( donc abs(gradient(i))>=1 ) tu viens de détecté une variation brute

    tu ajoute un élement a ton vecteur de liste et tu initialise cette liste avec le point en cours


    voila c'est pas plus compliqué que ça ^^



    pour le mean shift je te renvoie vers ce cours http://www.creatis.insa-lyon.fr/~gre...anShift_TG.pdf
    tu peux sauter la première partie
    dans ton cas le meanshift est très simple a faire mais c'est toujours plus compliqué et plus long que les gradients

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci.

    A va falloir que je lisse ma courbe copieux alors, parce qu'au sinon la technique des gradients va pas m'être d'un grand secours, le bruit va tout fausser.
    Après je me plonge aussi dans le PDF en lien.

    Un grand merci en tout cas !

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    oui ^^
    après ce n'ai qu'un exemple basic mais tu peux aussi considéré qu'une liste de 1 c'est juste un defaut et la fusionner avec la liste d'avant

    tu peux aussi avoir des transition moins net du genre si la somme de tes 3 prochain gradient est supérieur a ...


    mais si tes données sont bruités les mean shift c'est peu etre la solution. moi je l'utilise pour du debruitage sur de certaines images c'est très pratique.
    tu as un exemple de signal que l'on puisse se faire une idée?

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2014, 14h39
  2. Réponses: 7
    Dernier message: 01/05/2007, 21h55
  3. Détection de visages dans une image en niveaux de gris
    Par bert_ dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/04/2007, 18h04
  4. algorithme detection de pics dans une courbe
    Par bfb dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 31/03/2006, 11h08
  5. [D6] Algo de détection de zones dans une image
    Par DMO dans le forum Langage
    Réponses: 4
    Dernier message: 25/11/2005, 15h15

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