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 :

kmeans: la fonction objectif qui augmente!


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut kmeans: la fonction objectif qui augmente!
    bonjour,
    je travaille avec les k-means pour la segmentation d'images et je rencontre quelque chose qui me semble un peu bizarre ; je calcule à chaque itération la fonction objectif mais je remarque que celle-ci peut augmenter, est ce normal ???? n'est elle pas sensée uniquement décroître ???

  2. #2
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    quelle est ta fonction objectif?

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    et bien c'est la fonction à minimiser classique du kmeans; la somme des distance des centre des clusters aux points

  4. #4
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Normalement, k-means converge de façon monotone, donc oui, ça ne fait que décroître.

    Si tu nous montrait un peu le type de données que tu as, et ta procédure ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    voici mon code en pièce jointe, il est en c++. ça fait un bon moment que je me casse tète dessus, tout me semble concorder avec le coté théorique mais il peut arriver que la fonction à minimiser augmente d'une itération à une autre. pour l'instant je n'utilise que l'intensité de l'image dans mes vecteurs
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    C'est la fête du memory leak ton code...

  7. #7
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    ahhh, j'ai oublié de préciser que je débute en c++, mon code est donc loin d'etre parfait, mais qu'en est il pour le problème principal!!!!?

  8. #8
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    A vue de nez, j'ai pas regardé précisément dans le détail, mais il semblerait que ta réinitialisation aléatoire de clusters vides pose problème.

    Si je ne me trompe pas, tu te retrouves avec des points qui overlappent sur plusieurs clusters.
    Tu ferais mieux de totalement zapper cette partie. Elle n'est généralement même pas implémentée ou discutée dans les papiers de recherche sur le sujet.

  9. #9
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    mais le traitement concernant les clusters vides n'arrive que très rarement dans mes tests. Est ce que vous auriez une démo ou une implémentation de de kmeans histoire de tenter de comprendre mes résultats

  10. #10
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Même s'il y a des clusters vides, cela n'affecte en rien le fait que la fonction de coût (plutôt qu'énergie me semble t-il) doivent systématiquement décroitre.

    Tu as un exemple java basique dans la rubrique contribuez.
    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.

  11. #11
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    merci toto. j'avais oublié de dire que l'année passée j'avais programmé le Fuzzy-C-Means en JAVA et que j'ai rencontré exactement le même problème de fonction objectif qui s’accroît

  12. #12
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    A priori il est normal que ta fonction de coût puisse croître au moment où tu ré-initialise les vecteurs-code orphelins mais seulement à ce moment là.

  13. #13
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Pour revenir à la réinitialisation des vecteurs-codes orphelins, si tes données sont très structurées (dimension intrinsèque faible par rapport à la dimension brute) tu risques de réinitialiser sans arrêt car tes nouveau vecteurs codes seront toujours orphelins. Une solution (toujours discutable) consiste à réinitialiser le vecteur code sur un des points de données.

    Sinon si tu veux un peu de déboggage il serait sympa de donner un exemple prêt à compiler pour pouvoir le faire tourner car (ne le prend pas mal) ton code est un peu abscons.

  14. #14
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Tu t'es trompé de fonction de coût. La fonction de coût optimisé par l'algo correspond à la somme des erreurs quadratiques (carré de la distance au centroide) et non la somme des distances.

    Or les deux ne croissent pas dans la même direction. Par exemple prenons deux vecteurs qui contiennent pour deux points la distance euclidienne à un autre point:

    v1 : [1.0,0.0]
    v2 : [0.9,0.15]

    SumDistances(v1) = 1.0
    SumDistances2(v1) = 1.0

    SumDistances(v2) = 1.05
    SumDistances2(v2) = 0.8325

    Dans un cas la fonction de coût a augmenté dans l'autre elle à diminué

  15. #15
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut
    comment est ce que j'ai pu passer à coté d'un truc pareil... un grand merci à toi Alexis tu es effectivement un membre très éclairé ;, ça fonctionne parfaitement maintenant, encore merci

  16. #16
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    D'où ma première question.

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

Discussions similaires

  1. [PHP 4] fonction qui augmente le nombre du caractéres
    Par king_soft dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2010, 00h52
  2. [MFC] fonction ReadFile qui bloque
    Par r0d dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2005, 13h21
  3. fonction javascript qui rassemble une date
    Par Dizystorm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2004, 10h03
  4. Fonction utilisateur qui renvoie la date du jour
    Par falcon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2004, 11h03
  5. fonction postgresql qui delete un enr
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/11/2003, 14h44

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