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

R Discussion :

Cassification, Méthode des Centres Mobiles


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut Cassification, Méthode des Centres Mobiles


    bonsoir
    je veux faire un petit programme qui généralise l'exemple ( ici k=2 )

    tout d'abord mes données sont en tableau "individus x variable" "n x p" (quantitative)

    choisir k tq 1>k>n

    regrouper les individu au tour des k classes "distance euclidienne"

    calculer le centre de gravité des nouvelle classe et regrouper les individus au tour des centres de g

    et répéter l'itération jusqu'à ce la distance euclidienne entre les centres de gravité soit <t


    je veux juste un petit coup de main pour bien démarrer

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 32
    Par défaut
    Bonjour tocki.
    Pour cela tu as la fonction "kmeans" dans le package "stats" qui normalement est livré avec la version R de base.
    C'est une fonction simple à utiliser:
    resultats<-kmeans(<tes données>,<le nombre de classes à créer>)

    Deux choses cependant,

    1) L'algo des centres mobiles a besoin d'un nombre de classes fixé a priori, mais si tu ne le connais pas, tu peux toujours boucler (exemple sur 1:10):
    resultats=list()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (classe in 1:10)
    {
         resultats[[classe]]<-kmeans(<données>,classe)
    }
    puis évaluer la qualité des 10 partitions créées

    2) Le résultat final peut dépendre (en fonction de tes données) des individus choisis comme centres de gravité fictifs à la première étape. Aussi tu peux répéter l'algo en conservant le même nombre de classe, et en évaluant la stabilité des résultats pour n répétitions de l'algorithme des kmeans. (ça s'appelle les nuées dynamiques il me semble)

    Cordialement

  3. #3
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour tocki,
    Citation Envoyé par tocki Voir le message
    je veux juste un petit coup de main pour bien démarrer
    OK, s'il s'agit de ça on peut discuter des pistes !
    Je t'aurais bien proposé de regarder du côté des fonction pour k-means, mais il s'agit visiblement d'un exo.

    J'imagine que tu choisis les points de départ au hasard... Pour ça tu peux utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sample(x=1:n, size=2, replace = FALSE)  # pour n points et 2 groupes
    Après, c'est à toi de faire tes choix de programmation mais je pense qu'il te faudra créer :
    1. une fonction qui prennent comme argument les coordonnées des centres de classes (points dans un premier temps, barycentres ensuite), tes coordonnées de points et te retourne pour chaque point le numéro du centre pour lequel la distance est minimale. À toi de voir sous quelle forme tu souhaites passer les coordonnées de tes centres... le plus judicieux me semble une data.frame ou une matrice (plus facile de faire une fonction indépendante du nombre de centres choisis).
      Voir les fonctions dist et celles de la famille de apply (pour optimiser les calculs dans ta fonction en évitant les boucles for).
    2. une fonction qui te re-calcul les barycentres des groupes et retourne leurs coordonnées en fonction des coordonnées de points (invariables) et du résultat de la précédente fonction (groupe de chaque point).
    3. une fonction qui teste la "qualité" de la nouvelle partition*. Voir ma remarque si dessous, mais à mon avis, ce sera calculer la somme des distances intra-groupes et la comparer à l'ancienne.


    Le tout dans une boucle avec condition d'arrêt (ou bien peut-être dans une fonction récursive**).

    Citation Envoyé par tocki Voir le message
    et répéter l'itération jusqu'à ce la distance euclidienne entre les centres de gravité soit <t
    Heu, là tu m'étonnes !
    Ce ne serait pas plutôt jusqu'à ce que la variation de distance intra-groupes soit < t ?

    Edit:
    * Le terme est un peu impropre, il s'agit de tester l'amélioration. Mais je pense que pour aller au bout de la démarche, tu devras également réitérer l'opération complète plusieurs fois pour tenir compte de l'influence des points de départ.

    ** À vérifier mais ça me semble une approche plus élégante (une fonction qui s'appelle elle-même tant que le critère d'amélioration n'est pas atteint, et qui retourne soit son résultat, soit celui de la nouvelle instance d'elle-même => t'as directement le "bon" résultat en sortie de ta fonction sans utiliser de while ou que sais-je !).

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    tout d'abord, merci pour vos réponse.

    j'ai déjà commencé le programme en utilisant la même méthode car
    avec la fonction kmeans n'utilise pas le mémé procédé "je suppose "
    1. une fonction qui prennent comme argument les coordonnées des centres de classes (points dans un premier temps, barycentres ensuite), tes coordonnées de points et te retourne pour chaque point le numéro du centre pour lequel la distance est minimale. À toi de voir sous quelle forme tu souhaites passer les coordonnées de tes centres... le plus judicieux me semble une data.frame ou une matrice (plus facile de faire une fonction indépendante du nombre de centres choisis). Voir les fonctions dist et celles de la famille de apply (pour optimiser les calculs dans ta fonction en évitant les boucles for).
    2. une fonction qui te re-calcul les barycentres des groupes et retourne leurs coordonnées en fonction des coordonnées de points (invariables) et du résultat de la précédente fonction (groupe de chaque point).
    3. une fonction qui teste la "qualité" de la nouvelle partition*. Voir ma remarque si dessous, mais à mon avis, ce sera calculer la somme des distances intra-groupes et la comparer à l'ancienne.
    la première fonction est terminé mais pas optimisé "elle contient pas mal de boucles for "

    merci pour ces informations, je me retrouve mieux maintenant
    et je vous tiens au courant

Discussions similaires

  1. Modele GL d'un GUI pour des "agents" mobiles
    Par fabgamer dans le forum Graphisme
    Réponses: 3
    Dernier message: 01/08/2006, 17h32
  2. [PHPTAL] gestion des méthodes des Objets
    Par ronio dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/03/2006, 14h29
  3. Utiliser les méthodes des boutons crées en rafale.
    Par kabouns dans le forum Composants
    Réponses: 8
    Dernier message: 03/12/2004, 10h48
  4. Réponses: 4
    Dernier message: 02/07/2004, 10h31

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