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 :

Clustering d'un ensemble de données de différentes dimensions


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Clustering d'un ensemble de données de différentes dimensions
    Bonjour,

    J'ai un dataset de n données, où chaque donnée est représenté par un ensemble d'attributs que d’extrait à partir de la donnée. Généralement, les algorihmes de clustering ont besoin que les données soient de même dimensions (le même nombre d'attributs), c'est à dire, les données en entrées sont représentés par une matrice X de n*d (de "n" donnée, et chaque donnée a "d" attributs). Dans mon cas, j'ai préalablement extrait des attributs à partir de mes données, mais le nombre d'attributs extraits à partir de chaque donnée est différent (j'ai donc un dataset X où les données n'ont pas le même nombre d'attributs). Y'a il une façon quelconque de les adapter afin de les classer en utilisant des algorithmes de clustering classiques qui requiers que données en entrée soient de même dimensions (pour pouvoir calculer une distance entre eux).

    Pour mieux comprendre, je précise que chaque donnée de mon dataset est une image contenant un mot manuscrit. J'extrais toujours "m" attributs à partir de chaque composante connexe (une sorte de pseudo-mots) du mot, donc si le mot contiens "c" composantes connexes, le nombre d'attributs extraits à partir de ce mot est d = m*c. Le nombre d'attributs extraits pour chaque donnée (mot) de mon dataset dépend donc de "c" (le nombre de composantes connexes que ce mot contiens) et "c" peut être différent d'un mot à un autre (même pour 2 mots de la même classe, mais bon moins souvent que 2 mots de classes différentes).

    Merci d'avance,

  2. #2
    Membre expérimenté
    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
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    un problème de clustering est posé dans un espace (vectoriel) et suppose donc que les données appartiennent à cet espace et soient par conséquent de même dimension. Il faut donc intervenir en amont, i.e. modifier le codage des données.

    Si j'ai deux vecteurs de dimensions respectives n et m, avec n différent de m, comment puis-je les sommer? La réponse à cette question est : "la somme en question n'est pas définie" (cf la définition des espaces vectoriels si tu ne vois pas pourquoi). Il est possible qu'on te propose du bidouillage, par exemple du "padding", mais le pragmatisme ne doit pas prévaloir en sciences.

    Ton problème de clustering est directement lié à ce problème de somme et adapter des algorithmes a une situation qui n'a pas lieu d'être n'est donc pas recommandée.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Bonsoir,

    un problème de clustering est posé dans un espace (vectoriel) et suppose donc que les données appartiennent à cet espace et soient par conséquent de même dimension. Il faut donc intervenir en amont, i.e. modifier le codage des données.

    Si j'ai deux vecteurs de dimensions respectives n et m, avec n différent de m, comment puis-je les sommer? La réponse à cette question est : "la somme en question n'est pas définie" (cf la définition des espaces vectoriels si tu ne vois pas pourquoi). Il est possible qu'on te propose du bidouillage, par exemple du "padding", mais le pragmatisme ne doit pas prévaloir en sciences.

    Ton problème de clustering est directement lié à ce problème de somme et adapter des algorithmes a une situation qui n'a pas lieu d'être n'est donc pas recommandée.
    Oui je comprends bien que les données à classer doivent normalement être de même dimensions, mais vous proposez quoi par rapport à ce que j'ai expliqué à la fin de mon premier poste ? i.e. une donnée est segmenté en "C" parties (C est souvent différent d'une donnée à une autre), et un nombre fixe "CONST" de features est extrait sur chaque partie. Et notez dans ce cas, qu'un padding des données n'est non seulement pas une bonne idée, mais ne réglera pas le problème, vu qu'il donnera lieu à une somme (ou distance ...) erroné entre deux vecteurs.
    Notez que je ne peux pas vraiment changer la manière dont j'extrait ces valeurs (CONST valeurs fixes et de signification connu sont extraits sur chaque partie du mot qui représente presque une lettre) parceque c'est "la" façon de procéder dans le contexte de mots manuscrits. Notez aussi que ces données de dimensions C*CONST (C étant variable) peuvent être utilisés directement en entrée pour faire du clustering via un HMM (le modèle de markov caché tolère que le nombre de valeurs par donnée soit différent), mais bon ce n'est pas un HMM que je veux utiliser.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Il faudrait savoir si le nombre de composantes "c" est significatif, ou alors s'il est possible de fusionner/séparer arbitrairement les c*m valeurs afin d'obtenir un vecteur de taille quelconque "k".

    Auquel cas, ca revient a "resampler" un signal de longueur "c" (composé de "m" canaux), afin d'obtenir un signal de longueur "k" (composé de "m" canaux). Et donc, de resampler chaque canal.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Il faudrait savoir si le nombre de composantes "c" est significatif, ou alors s'il est possible de fusionner/séparer arbitrairement les c*m valeurs afin d'obtenir un vecteur de taille quelconque "k".
    Il est significatif, je ne peux pas fusionner/séparer arbitrairement les c*m valeurs.

    Cependant, j'ai une autre question à laquelle si vous pouvez répondre, ça pourrait m'aider à régler le problème initiale:
    Supposant que j'ai un dataset éparse, où chaque donnée est décrite par un vecteur de 1000 éléments, chaque élément de ce vecteur peut être soit 0 ou 1 (un vecteur contiendra plein de "zéros" et quelque "uns" éparpillés); Auriez-vous (connaitriez-vous) une fonction de distance qui sera convenable dans cette situation, pour les clusterer ?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par klandah Voir le message
    Supposant que j'ai un dataset éparse, où chaque donnée est décrite par un vecteur de 1000 éléments, chaque élément de ce vecteur peut être soit 0 ou 1 (un vecteur contiendra plein de "zéros" et quelque "uns" éparpillés); Auriez-vous (connaitriez-vous) une fonction de distance qui sera convenable dans cette situation, pour les clusterer ?
    Tout dépend de ta définition de ce qui est "proche" et "éloigné".

    Sans plus d'information je dirais le "Dynamic Time Warping"...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Tout dépend de ta définition de ce qui est "proche" et "éloigné".
    Sans plus d'information je dirais le "Dynamic Time Warping"...
    Bon j'explique mieux alors. Comme déjà dit, je peux extraire m features à partir de chaque composante connexe contenu dans un mot. Pour régler le problème initiale, je compte faire un clustering de toutes les composantes connexes de tous les mots confondus. Disant qu'avec ça j'aurai 1000 représentants (de composantes connexes), soit C = [C1, C2, ..., C1000], où chaque Ci est un vecteur de m dimensions.
    Il serait ensuite possible de classer les mots vis à vis des composantes connexes préalablement classé. Pour ce faire, chaque mot w sera représenté par un vecteur Xw = [x1, x2, ..., x1000], où chaque xi prend la valeur 1 si le mot contiens une composante connexe correspondant à Ci, 0 sinon, (en gros je prend chaque composante connexe du mot w et je cherche le représentant 'Ci' le plus proche d'elle, et je met 1 à la position i correspondante dans Xw, le reste sera à 0).
    J'aurai donc un dataset représentatif des mots (chaque mot représenté par un vecteur binaire, où les 1 dans ce vecteurs représentent les composantes connexes de ce mot).

    P.S. dans l'absolu, les mots qui sont identiques sont sensés avoir les mêmes composantes, mais ce n'est pas toujours le cas à cause de l'écriture manuscrite (si on a deux personnes qui écrivent un même mot, l'un peut laisser un espace entre deux lettres où normalement il ne faut pas le faire, même si c'est rare) ...

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Le DTW reste un bon candidat pour ton problème.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Le DTW reste un bon candidat pour ton problème.
    Supposons que j'utilise une distance de DTW (ou euclidienne ou Hamming ou tout autre distance) comment pourrai-je apprendre le vecteur représentant de chaque groupe de vecteurs. C'est à dire, disant que j'ai deux vecteurs 1= 0100100001100 et v2 = 0001100001100, ils sont proche d'un de l'autre vu qu'ils différent seulement en 2 éléments (à la 2eme et 3eme position), le problème c'est: que sera le vecteur représentant de v1 et v2 ? Comment ajuster (apprendre) les valeurs du vecteur qui devrait représenter v1 et v2 et tout autre vi proche d'eux ?

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par klandah Voir le message
    Supposons que j'utilise une distance de DTW (ou euclidienne ou Hamming ou tout autre distance) comment pourrai-je apprendre le vecteur représentant de chaque groupe de vecteurs. C'est à dire, disant que j'ai deux vecteurs 1= 0100100001100 et v2 = 0001100001100, ils sont proche d'un de l'autre vu qu'ils différent seulement en 2 éléments (à la 2eme et 3eme position), le problème c'est: que sera le vecteur représentant de v1 et v2 ? Comment ajuster (apprendre) les valeurs du vecteur qui devrait représenter v1 et v2 et tout autre vi proche d'eux ?
    Tu ne pourrais pas prendre comme représentant le vecteur qui est "globalement" le plus proche de tous les autres vecteurs du groupe ?

    Un truc du genre : Vr = ArgMin{ somme_i( distance(V,Vi) ) }

  11. #11
    Membre éclairé
    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
    Points : 752
    Points
    752
    Par défaut
    Juste une petite remarque. Si tu veux faire du clustering basé sur une distance non euclidienne, tu devrais voir du côté des versions "kernelisées" des algorithmes comme kernel K-means.

    Pour la distance de Hamming tu peux aussi directement appliquer ton algo sur ton vecteur binaire d'origine concaténé avec son complément, dans ce cas la distance euclidienne correspondante correspond à deux fois la distance de hamming

Discussions similaires

  1. "copie" de l'ensemble de données entre 2 DataSet
    Par jakouz dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/08/2005, 11h34
  2. ensemble de données pas en mode edition
    Par XloX dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/06/2005, 12h17
  3. [DBGrid] Affichage d'un sous-ensemble de données
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2004, 16h31
  4. ensemble de données fermées...
    Par vasaldo dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/06/2004, 16h58
  5. Ensemble de données temporaires
    Par pascalT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/03/2003, 07h22

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