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 :

Algorithme tableau creux => tableau plein


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut Algorithme tableau creux => tableau plein
    Bonjour,

    Je ne sais pas si je suis dans la bonne rubrique mais je vous expose tout de même mon problème.

    J'ai un tableau où il y x individus et y variables, et ce tableau est creux, ie il y a beaucoup de cases vides.
    Je cherche à obtenir à partir de ce tableau, un tableau plein de taille x'<x et y'<y, qui soit le plus grand possible.
    L'algorithme doit donc permettre de supprimer certaines lignes et certaines colonnes de manière à obtenir un tableau plein de taille maximale.

    Si quelqu'un à une idée de comment faire, ça m'aiderai énormément.

    Merci.

  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 : 37
    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
    Peux-tu donner un exemple stp ? Car si le tableau transformé ne doit contenir aucune case vide, alors il n'y a aucune garantie qu'on puisse en faire un : cela nécessite d'avoir pour hypothèse que le nombre de cases creuses est le même sur chaque ligne et chaque colonne.

    De même, je vois pas ce que tu entends par "le plus grand possible".

    Egalement, comment avoir l'assurance que x'<x et y'<y ? On peut très bien avoir x'<x et y'==y non ?

    J'ai aussi quelques autres questions, mais c'est plus simple que tu donnes un exemple je pense

  3. #3
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut
    Oui pour la taille du tableau à obtenir on peut prendre des bornes plus larges x'<=x et y'<=y.

    Ce que j'entends par "le plus grand possible", c'est maximiser la taille x'y' avec éventuellement comme contraintes:
    - un nombre minimal d'individus
    - un nombre minimal de variables

    Exemple, avec NA=case vide:


    Idéalement par la suite il faudrait un paramètre d=%de cases vides autorisées. Cela sera un paramètre pour l'algorithme. (en pratique d<5%)
    Pour d=0 => tableau plein.

    J'ai besoin de construire cet algo, car par la suite je vais devoir appliquer des méthodes statistiques, qui soit fonctionnent uniquement que lorsqu'il n'y aucune valeur manquante, soit peuvent être utilisées mais avec un nombre restreint de valeurs manquantes

  4. #4
    Membre très actif
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Par défaut
    Ce que tu viens de faire :
    - renoncer à étudier v4 car elle a trop de cases vides
    - renoncer aux individus à qui il reste une case vide
    tu peux adapter le trop et le une à ton goût

  5. #5
    Membre éclairé
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Par défaut
    Re,

    Bien que ce ne soit pas de l'ordre de l'algorithme, j'aimerais faire remarquer qu'en statistiques il est généralement mauvais d'enlever des individus ou variables car il manque quelques données.
    (Il y a des tests statistiques pour vérifier que justement ces suppressions sont cohérentes et ne faussent pas le tests.)
    L'absence de données est un problème récurrent en statistiques et nécessite souvent une réflexion (pourquoi la donnée est absente, pourquoi ne pas mettre la moyenne des données à la place, mettre une valeur arbitraire, etc.).

    @+.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut
    Citation Envoyé par Tidus159 Voir le message
    Re,

    Bien que ce ne soit pas de l'ordre de l'algorithme, j'aimerais faire remarquer qu'en statistiques il est généralement mauvais d'enlever des individus ou variables car il manque quelques données.
    (Il y a des tests statistiques pour vérifier que justement ces suppressions sont cohérentes et ne faussent pas le tests.)
    L'absence de données est un problème récurrent en statistiques et nécessite souvent une réflexion (pourquoi la donnée est absente, pourquoi ne pas mettre la moyenne des données à la place, mettre une valeur arbitraire, etc.).

    @+.
    Oui je suis bien d'accord. En fait j'ai plusieurs fichiers à analyser, et dans certains il y a presque 80% de données manquantes inégalement réparties suivant les variables et les individus.
    Il est donc nécessaire de réaliser une première étape de suppression, avant d'utiliser par exemple les méthodes d'imputation.
    Certains fichiers ont plus de 200 variables, donc j'aimerai éviter de tout faire à la main.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    euh...

    Bêtement un histogramme pour chaque dimension...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    pour i = 0 jusqu'à NLignes
     
        HistoLigne[i] = 0 
     
        pour j = 0 jusqu'à NColonnes
            si  case (i,j) différent de 0
                  HistoColonne(j) = 1
                  HistoLigne(i) = 1
            fin si
        fin pour
     
    fin pour 
     
    newNLignes = 0
    pour i = 0 jusqu'à NLignes
         si HistoLigne(i) différent de 0
             newNLignes = newNLignes + 1
         fin si
    fin pour
     
    newNColonnes = 0
    pour i = 0 jusqu'à NColonnes
         si HistoColonne(i) différent de 0
             newNColonnes = newNColonnes + 1
         fin si
    fin pour
     
     
    New Matrice = (newNLignes, NewNColonnes)

    PS: et ensuite pour remplir cette nouvelle matrice :

    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
    17
    18
    19
    20
    21
     
    iligne = 0
     
    pour i = 0 jusqu'à NLignes
     
        si HistoLigne(i) différent de 0
     
              icolonne = 0
     
              pour j = 0 jusqu'à NColonnes
                 si  case (i,j) différent de 0
                     newcase(iligne, icolonne) = case(i,j)
                     icolonne = icolonne + 1
                fin si
              fin pour
     
              iligne = iligne + 1
     
         fin si
     
    fin pour

  8. #8
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut
    Merci pour vos réponses.
    En fait le plus simple c'est d'utiliser le logiciel R.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    > data <- matrix(1:50, ncol = 5)
    > dimnames(data) <- list(paste(1:10, sep = ""), paste("v", 1:5, sep = ""))
    > data[c(5, 12, 23, 35, 37, 38, 50)] <- NA
    > 
    > data
       v1 v2 v3 v4 v5
    1   1 11 21 31 41
    2   2 NA 22 32 42
    3   3 13 NA 33 43
    4   4 14 24 34 44
    5  NA 15 25 NA 45
    6   6 16 26 36 46
    7   7 17 27 NA 47
    8   8 18 28 NA 48
    9   9 19 29 39 49
    10 10 20 30 40 NA
    > data <- data[,colSums((!is.na(data))/dim(data)[1])>0.75 ]
    > data <- data[rowSums((is.na(data))/x)==0,]
    > data
      v1 v2 v3 v5
    1  1 11 21 41
    4  4 14 24 44
    6  6 16 26 46
    7  7 17 27 47
    8  8 18 28 48
    9  9 19 29 49
    >

  9. #9
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    pour trouver un bon compromis entre ce que dis Tidus et ce que tu souhaites faire, je te conseille d'éliminer uniquement des lignes et surtout pas les colonnes (je pars du principe que les variables sont en colonne et les exemples en ligne). Tu vas réduire la taille de ton échantillon mais pas la dimension de ton problème : ça te permettra de mieux conserver la quantité d'information dont tu disposes.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    cela est-il valable si toute une ligne (ou toute une colonne) manque ?

  11. #11
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    La question n'a pas de sens puisque si une ligne ou une colonne ne contient que des valeurs manquantes, elle ne contient aucune information.

Discussions similaires

  1. Problème algorithme construction d'un tableau
    Par Cuve9 dans le forum Fortran
    Réponses: 4
    Dernier message: 12/05/2013, 14h46
  2. [XL-2003] Algorithme de Tri pour Tableau multidimension
    Par rabbitnator3000 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/06/2012, 10h56
  3. tableau creux => tableau plein
    Par tbagwell dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2011, 17h47
  4. Algorithme de Tri pour Tableau multidimenssion
    Par nnadine2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/11/2009, 17h58
  5. Réponses: 0
    Dernier message: 07/08/2007, 07h42

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