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 :

Classification/Classement sur très grosse base de données


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut Classification/Classement sur très grosse base de données
    Bonjour tout le monde,

    Je reviens vers vous pour savoir si quelqu'un avait déjà traité de très grande base de données sous R.
    En ce moment j'ai une matrice de presque 30 millions d'individus pour 10 variables qualitatives (environ 4 modalités par variable) et avec R ça plante quasiment à chaque fois dès que je fais une opération sur ce jeu de données (après l'avoir chargé via la librairie RMySql).

    Du coup je me retrouve à "bidouiller" comme suit:
    - tirage aléatoire de 5000 individus (après ça rame bien trop)
    - une ACM pour avoir des données "numériques" (i.e. les coordonnées de mes individus sur tous les axes factoriels)
    - un CAH via la fonction HCPC de FactoMineR

    Mais après ... ? Comment classer du coup mes autres individus dans les 2 groupes ainsi obtenus?
    Utiliser une méthode de prédiction (arbre de décision) avec comme variable à prédire l'appartenance à mes classes obtenues?

    D'ailleurs est-ce une bonne méthode de ne sélectionner que 5000 individus et de "généraliser" comme ça?

    Si quelqu'un avait un "tuyau" ou même une autre méthode à me conseiller je suis preneur!
    Peut être qu'ici R atteint des limites et je devrais peut être coder ça sur quelque chose de plus "robuste"?

    Cordialement,

    Hollow

    PS: je suis sous Ubuntu 12.10 avec un processeur 4x Intel(R) Core(TM) i5-2500 CPU @3.3GHz avec 16Gb de RAM sur un SSD de 115 Gb si jamais ça peut aider

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Par défaut
    Re coucou,
    Commence par lancer ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memory.limit(size = NA)
    qui renvoit la limite max de ram allouée à R

    Si c'est inférieur à tes 16000 de ram tu as encore de l'espoir puisque tu peux allouer plus (pour R 64bit) en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memory.limit(size = 16000)
    Si tu ne peux pas allouer plus, bon courage


    Aha, non serieusement si ca suffit pas, un échantillonage intelligent reste une bonne solution (par intelligent j'entend que tu dois reflechir un minimum à la façon dont tu selectionnes tes individus et faire des testz pour vérifier que tu ne loupes pas des catégories spécifiques en gros).

    Minimum syndical: tu fais un modèle avec un échantillonage.
    Tu refais le même modèle avec genre 100 simulations d'echantillonages différents et tu verifies que les résultats sont les mêmes. (ou très proches).


    Autre chose très importante: quand tu commences à être ric rac niveau mémoire, c'est vraiment le moment de coder proprement les choses et d'avoir un workspace propre, à savoir:

    -on efface au fur et à mesure les données crées qui ne servent plus
    avec rm() puis un gc() pour le ramasse miette.
    -quand on doit garder des résultats pour la suite (genre le-mega-modèle-super-lourd-qui-prend-toute-la-ram) on les sauvegarde en dur sur le disque avec la fonction save(x, file), et on les efface de la ram (rm();gc()).
    Quand on en a rebesoin on les rappelle dans la ram avec load(file).


    Bonne chance

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    Citation Envoyé par Sengar Voir le message
    Re coucou,
    Commence par lancer ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memory.limit(size = NA)
    qui renvoit la limite max de ram allouée à R

    Si c'est inférieur à tes 16000 de ram tu as encore de l'espoir puisque tu peux allouer plus (pour R 64bit) en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memory.limit(size = 16000)
    Si tu ne peux pas allouer plus, bon courage


    Aha, non serieusement si ca suffit pas, un échantillonage intelligent reste une bonne solution (par intelligent j'entend que tu dois reflechir un minimum à la façon dont tu selectionnes tes individus et faire des testz pour vérifier que tu ne loupes pas des catégories spécifiques en gros).

    Minimum syndical: tu fais un modèle avec un échantillonage.
    Tu refais le même modèle avec genre 100 simulations d'echantillonages différents et tu verifies que les résultats sont les mêmes. (ou très proches).


    Autre chose très importante: quand tu commences à être ric rac niveau mémoire, c'est vraiment le moment de coder proprement les choses et d'avoir un workspace propre, à savoir:

    -on efface au fur et à mesure les données crées qui ne servent plus
    avec rm() puis un gc() pour le ramasse miette.
    -quand on doit garder des résultats pour la suite (genre le-mega-modèle-super-lourd-qui-prend-toute-la-ram) on les sauvegarde en dur sur le disque avec la fonction save(x, file), et on les efface de la ram (rm();gc()).
    Quand on en a rebesoin on les rappelle dans la ram avec load(file).


    Bonne chance
    Hey Sengar,

    Malheureusement est réservé à Windows ... mais je pense que mon directeur technique a allouer 16Gb de RAM max à R.

    Je fais régulièrement des rm(), gc() et comme tu dis l'option save() et load() est utile.

    Mais là je parle d'un environnement "vierge" lorsque ça "rame" trop. Bref seule solution l'échantillonnage comme tu dis.

    En revanche ici l'échantillonnage est compliqué à réalisé puisque je cherches justement des comportements homogènes au travers de ce grand jeu de données ...
    D'où ma question car à mon avis tu y as répondu ... je fais mon modèle en échantillonnant ma population ... puis je fais la même chose 100 fois (environ) en vérifiant la stabilité?

    Mais justement ici je ne vois pas comment vérifier cette stabilité pour mes groupes car j'ai du mal à analyser les sorties via la librairie FactoMineR.
    Je suppose que l'idée c'est de voir si les modalités qui contribuent à la variabilité (et donc à la conception de mes groupes) ne changent pas trop en fonction de l'échantillon?

    Typiquement voici une sortie que j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    res.hcpc$desc.var
    $test.chi2
                            p.value df
    Var1                 0.000000e+00  3
    Var2                 0.000000e+00  4
    Var3                 2.762328e-33  1
    Var4                 3.490518e-03  2
    Var5                 1.338222e-02  1
    où res.hcpc est ici de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res.mca <- MCA(datacah, ncp = 20, quali.sup = c(6), graph = TRUE)
    res.hcpc<-HCPC(res.mca,nb.clust = 2, consol = TRUE, kk = Inf)
    Donc là j'ai "forcé" à couper en 2 groupes mais bon j'aurai pu laisser une coupure "optimale".
    Dans datacah (mes données originales avec mes modalités) j'ai bien 7 variables qualitatives dont une que je considère comme "supplémentaire".
    Déjà j'ai du mal à comprendra comment une de mes variables ne participent pas à ma classification (res.hcpc) et surtout les p-value à 0.00000 pour les 2 premières variables (qui à l'issu de mon ACM sont effectivement les variables qui sont les plus aux extrémités sur mes axes factoriels - les 2 premiers -).

    Puis j'ai logiquement une information sur la description des axes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $category
    $category$`1`
                                                   Cla/Mod    Mod/Cla Global p.value v.test
    Var2Mod1                                  99.25880 76.3057930  64.76  0.000000e+00 Inf
    Var1Mod3                                 100.00000 95.0142450  80.04   0.000000e+00 Inf
    Mais là encore j'ai du mal à voir ...
    Pourtant quand je représentes mes groupes sur les axes du clustering (dimension 1 = 17%, dim 2 = 15% environ) c'est assez clair comme séparation ... séparation linéaire d'ailleurs) mais j'ai du mal à quoi correspondent ces axes justement.

    Bref un peu l'impression d'avoir biaisé mon approche et d'avoir perdu beaucoup d'information au final ...

    Si tu as des conseils je suis plus que preneur

    Amicalement,

    Hollow

  4. #4
    Membre chevronné
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Par défaut
    Bonjour,

    Ma seule expérience similaire a été d'ouvrir un fichier de 35 millions de lignes, mais juste pour appliquer des filtres et faire des summary. La seule différence est que j'avais 24 Go de RAM... Vous n'avez pas accès à un cluster?

    Sinon, vous pouvez aller voir du côté des Task Views (http://cran.cict.fr/web/views/HighPe...Computing.html). Il y a peut-être un package qui vous aidera...

    HTH

    Vincent

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    Bonjour,

    Merci pour le lien j'irai jeter un coup d’œil!

    Je n'ai pas accès à un cluster ... enfin avec échantillonnage mais après je suis confronté au problème que je cite au dessus.

    Merci,

    Hollow

  6. #6
    Membre chevronné
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Par défaut
    Citation Envoyé par hollowdeadoss Voir le message
    Hey Sengar,

    En revanche ici l'échantillonnage est compliqué à réalisé puisque je cherches justement des comportements homogènes au travers de ce grand jeu de données ...
    D'où ma question car à mon avis tu y as répondu ... je fais mon modèle en échantillonnant ma population ... puis je fais la même chose 100 fois (environ) en vérifiant la stabilité?

    Mais justement ici je ne vois pas comment vérifier cette stabilité pour mes groupes car j'ai du mal à analyser les sorties via la librairie FactoMineR.
    Je suppose que l'idée c'est de voir si les modalités qui contribuent à la variabilité (et donc à la conception de mes groupes) ne changent pas trop en fonction de l'échantillon?
    Effectivement avec une CAH c'est un peu moins évident qu'avec un modèle ou tu peux comparer des coefficients (genre regression).

    Mais tu peux toujours vérifier que l'importance de chaque variable dans la création de tes axes est stable suivant l'echantillonage.

    Tu peux aussi construire un modèle 1 sur un échantillon 1, construire un modèle i sur un échantillon i, et voir si ton modèle 1 regroupe les même individus de échantillon i que modèle i. (et tu fais varier i de 2 à 100).

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Par défaut
    Citation Envoyé par Sengar Voir le message
    Effectivement avec une CAH c'est un peu moins évident qu'avec un modèle ou tu peux comparer des coefficients (genre regression).

    Mais tu peux toujours vérifier que l'importance de chaque variable dans la création de tes axes est stable suivant l'echantillonage.

    Tu peux aussi construire un modèle 1 sur un échantillon 1, construire un modèle i sur un échantillon i, et voir si ton modèle 1 regroupe les même individus de échantillon i que modèle i. (et tu fais varier i de 2 à 100).
    Merci bien pour l'information.

    En revanche je n'ai pas bien saisi le coup de tes échantillons.
    Je peux effectivement créer plusieurs modèles sur des échantillons différents et ainsi avoir chaque échantillon divisé en un nombre (fixé) de clusters.

    Mais j'ai du mal justement à voir, après une CAH (peut être que je m'y prends mal) quel est le modèle derrière!
    Par exemple je n'ai pas quelque chose comme "si l'individu à la modalité i pour la variable j et la modalité k pour la variable l alors il appartient à la classe 2".

    C'est ça qui me bloque le plus en fait. Et une CAH c'est également bien nouveau pour moi

    Hollow

  8. #8
    Membre éprouvé
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Par défaut
    Bonjour,

    Tout d'abord, merci Sengar pour ces conseils avisés, et Hollodeadoss pour cette discussion plaisante. ^^

    Mais j'ai du mal justement à voir, après une CAH (peut être que je m'y prends mal) quel est le modèle derrière!
    Si tu cherches une classification en 2 catégories la régression logistique semble être un bon choix d'étape suivante. Elle permet de prédire l'appartenance d'un individu à l'une ou l'autre des classes.
    Une fois ta CAH réalisée, l'avantage (et finalement son rôle dans le processus est principalement celui-ci) est que cela t'a permis d'étiqueter tes individus avec leur classe d'appartenance. (Ce qui revient à ajouter en fin de tableau une nouvelle colonne "cluster" pouvant être égale à 1 ou 2) Et de considérer cet échantillon comme base d'apprentissage pour un modèle de régression logistique, qui doit exister dans le package FactoMineR.

    Que tu peux ensuite appliquer sur le reste de tes données, et enfin observer les classes prédites. Sans oublier que l'ACM t'aura permis de caractériser ces classes.

    Sinon, plusieurs fois évoqué dans d'autres posts, le package bigdata pourrait-il être une solution ?

    En tout cas bon courage ,

    Guinue

Discussions similaires

  1. Très grosses bases de données en XML
    Par Childerique dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 18/11/2014, 12h07
  2. Classification sur grosse base de données
    Par Souplixx dans le forum SAS STAT
    Réponses: 5
    Dernier message: 07/11/2014, 14h06
  3. Utiliser LEFT JOIN sur une grosse base de données
    Par bractar dans le forum Requêtes
    Réponses: 20
    Dernier message: 11/01/2014, 07h32
  4. rechercher rapidement sur une très grande base de données access
    Par unja2010 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2013, 15h16
  5. [Crystal] Performance sur grosses base de données
    Par Nico118 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 14/11/2003, 15h27

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