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 :

Kmeans pour créer des groupes homogènes


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut Kmeans pour créer des groupes homogènes
    Bonjour,

    Je dispose d'une base de données qui répertorie des noms de communes, ainsi que des facteurs.

    Je souhaiterais créer 4 groupes, avec une homogénéité (distance moyenne des observations au centre de leur classes respective) la plus basse, et une dispersion (distance moyenne des classes entre elles) la plus élevée. Je sais qu'un logiciel de statistique comme Sphinx permet d'extraire ces scores (exemple d'un rendu ici : https://zupimages.net/viewer.php?id=20/36/khlr.png). Mes recherches m'ont permis de sortir un bon début d’algorithme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    library(truncnorm)
    library(tidyverse)
     
    #Je crée mon dataframe (reproductible)
    data = data.frame(nom_commune = paste("commune", 1:700, sep = ''), facteur1 = rtruncnorm(700, a = 0, b = 100, mean = 50, sd = 20), facteur2 = rtruncnorm(n = 700, a = 10, b = 70, mean = 60, sd = 2), facteur3 = rtruncnorm(n = 700, a = 0, b = 100, mean = 20, sd = 5), facteur4 = rtruncnorm(700, a = 0, b = 100, mean = 60, sd = 20))
     
    #Je synchronise mon index
    rownames(data) = data$nom_commune 
    data = data %>% select(-nom_commune )
     
    #J'homogénéise l'échelle de mes facteurs
    data_cr = scale(data, center = TRUE, scale = TRUE)
     
    #Je crée mes groupes
    groupes_kmeans = kmeans(data_cr,centers=4,nstart=5)
    Est-il possible d'extraire ces score dans R ?
    Merci beaucoup.

  2. #2
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Les composants withiss et betweenss de l'objet renvoyé par kmeans (ici group_kmeans) devraient répondre à ta question (voir la page d'aide de kmeans).

    Quelques remarques de programmation :
    - Si tu utilises : data = data %>% select(-nom_commune ), alors reste homogène et écrit : data_cr = data %>% scale(center = TRUE, scale = TRUE) et groupes_kmeans = data_cr %>% kmeans(centers=4,nstart=5). Il n'y a aucune justification pour utiliser une fois une écriture et une autre fois dans le même script une autre écriture. De plus, quand la ligne de commande ne contient qu'un appel à une fonction, l'écriture %>% n'a aucune justification, c'est beaucoup plus lourd et consomme beaucoup plus de ressources en temps et en mémoire.
    - Puisque la colonne 'nom_commune' est la première par construction, une écriture beaucoup plus simple, élégante et moins gourmande en ressources est de remplacer l'appel à select par : data <- data[,-1]

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut
    Merci pour ta réponse et pour tes conseils

    Et comment puis-je optimiser au mieux ces deux valeurs (Minimiser l'homogénéité et maximiser la dispersion) ? J'ai cru comprendre que l’algorithme kmeans prenait la "meilleure" combinaison parmi les "nstart" fois où on lui demande de relancer l’algorithme. Mais sur quels critères se base t-il pour choisir cette "meilleure" combinaison ?

    Merci.

Discussions similaires

  1. Kmeans - Créer des groupes homogènes ?
    Par preliator dans le forum Général Python
    Réponses: 3
    Dernier message: 02/09/2020, 13h29
  2. créer des groupes de lignes pour chaque onglet de façon automatique
    Par cindy1808 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/07/2009, 19h50
  3. pb pour créer des index [too many keys]
    Par Issam dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2005, 20h58
  4. [CR] Version nécessaire pour créer des fichiers DSR ?
    Par aysse dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/11/2003, 09h01
  5. quel langage pour créer des "applications" sur 1 s
    Par jaribu dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 30/07/2003, 14h06

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