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 :

Recherche des plus proches voisins dans un espace variable à K dimensions parmis N


Sujet :

Algorithmes et structures de données

  1. #21
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Ok, si j'ai bien compris:

    - Notons A= {0,1,...,N-1}
    - On a un ensemble E de points M de coordonnées (Mx0,...,Mx(N-1)), chaque point M ayant une propriétés P(M)
    - Décomposons arbitrairement A en deux sous-ensembles disjoints K et K', et notons E(K) l'ensemble des points de coordonnées obtenues à partir de celles de M en passant à zéro les coordonnées xi de M pour i appartenant à K'
    - Pour chaque M de E(K) on recherche ses 8 voisins et on compte le nombre nb(M) de ses voisins ayant la même propriété P(M) que M
    - Score est la somme des nb(M) pour tout M de E(K)

    On cherche à maximiser Score en fonction de K

    J'ai bon?

  2. #22
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    OUI

  3. #23
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    le plus simple semble d'iterer en enlevant(ou ajoutant) qu'une dimension a la fois ce qui rend le calcul de distance et la recherche des points voisins plus rapides.

  4. #24
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par JeromeBcx Voir le message
    OUI

    Désolé, je suis complêtement débordé en ce moment...

    Je te suggère un algorithme génétique, ça devrait bien fonctionner et rapidement converger vers une solution acceptable.

  5. #25
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Merci Nemerle

    C'est effectivement dans le cadre de l'optimisation d'un algorithme génétique que je cherche à calculer le plus rapidement possible les plus proches voisins...

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Jérôme, pourquoi ne pas segmenter ton espace ?

    Par exemple si on découpe chaque dimension en n intervalles Ii, sur cette dimension, un point donné d'un intervalle i, ne peut être proche que de ceux de Ii-1, Ii, Ii+1 (... c'est vrai en dimension n ... ?).

    Ceci te rajoute de l'ordre de 10Mo (si les i < 256). Et sans doute, il faudrait adapter le nombre et la "position" des intervalles sur chaque axe en fonction des valeurs concrètes des points sur l'axe.

    Dans cette représentation, trouver les points proches d'un point revient à sélectionner les points correspondant aux intervalles proches (Ii-1, Ii, Ii+1) sur chaque dimension parmi celles choisies. Cette sélection devrait être beaucoup plus rapide que le calcul de distances.

    Si la sélection te ramène le nombre requis de voisins... c'est gagné sans calcul de distance. S'il y en a plus il faudrait les calculer mais donc sur beaucoup moins de points.

    Il se peut aussi que la sélection ne ramène pas le nombre de voisins requis (entre 3 et 8). Il faudrait alors l'élargir à (Ii-2, Ii+2) ou bien simplement en déduire que ce "manque de proximité" signifie que les propriétés ne sont pas à vérifier... ?

  7. #27
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Citation Envoyé par Alikendarfen Voir le message
    Bonjour,

    Jérôme, pourquoi ne pas segmenter ton espace ?

    Par exemple si on découpe chaque dimension en n intervalles Ii, sur cette dimension, un point donné d'un intervalle i, ne peut être proche que de ceux de Ii-1, Ii, Ii+1 (... c'est vrai en dimension n ... ?).

    Ceci te rajoute de l'ordre de 10Mo (si les i < 256). Et sans doute, il faudrait adapter le nombre et la "position" des intervalles sur chaque axe en fonction des valeurs concrètes des points sur l'axe.

    Dans cette représentation, trouver les points proches d'un point revient à sélectionner les points correspondant aux intervalles proches (Ii-1, Ii, Ii+1) sur chaque dimension parmi celles choisies. Cette sélection devrait être beaucoup plus rapide que le calcul de distances.

    Si la sélection te ramène le nombre requis de voisins... c'est gagné sans calcul de distance. S'il y en a plus il faudrait les calculer mais donc sur beaucoup moins de points.

    Il se peut aussi que la sélection ne ramène pas le nombre de voisins requis (entre 3 et 8). Il faudrait alors l'élargir à (Ii-2, Ii+2) ou bien simplement en déduire que ce "manque de proximité" signifie que les propriétés ne sont pas à vérifier... ?
    L'idée me plait bien, je creuse dans ce sens et posterait mes résultats prochainement, merci

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    Attention, rien n'est parfait : un point de Ii (sur un axe donné) peut être plus proche d'un point de Ii-2 que d'un point de Ii+1.

    Une question Jérôme : on est d'accord que tes points sont fixes (pas d'ajout de points) pour une recherche donnée ?

  9. #29
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    en fait, ça revient à faire un histogramme multi-dimensions...

    Mais après, on peut raffiner en repassant à travers chacun et en groupant les points dans les bins adjacents...

    Mais c'est une bonne idée...

  10. #30
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Citation Envoyé par Alikendarfen Voir le message
    Attention, rien n'est parfait : un point de Ii (sur un axe donné) peut être plus proche d'un point de Ii-2 que d'un point de Ii+1.

    Une question Jérôme : on est d'accord que tes points sont fixes (pas d'ajout de points) pour une recherche donnée ?
    L'ensemble des points est bien fixe (ouf), c'est le nombre de dimensions qui peut varier.
    Lidée de l'histogramme mulit dimensionnel est très interressante.
    Par rapport à la définition des voisins, effectivement, l'exemple que tu sites peut arriver très fréquement, mais l'intérêt est de regarder l'ensemble des voisins proches, donc au lieu de fixer par exemple K voisins, on peut très bien imaginer prendre comme critère : l'ensemble des points des cellules voisines. Il faudra par contre controler le nombre de points par intervalle et surement passer par des intervalles de tailles variables

    Citation Envoyé par souviron34 Voir le message
    en fait, ça revient à faire un histogramme multi-dimensions...
    JE vois cela comme ça aussi : en terme de temps de calcul, on peut faire des merveilles (de plus je normalise mes données en début de calcul, donc je peux créer les histogrammes dans la foulée.

    Citation Envoyé par souviron34 Voir le message
    Mais après, on peut raffiner en repassant à travers chacun et en groupant les points dans les bins adjacents..
    Euh ... là j'avoue ne pas comprendre comment tu veux regrouper les points...


    Encore merci à tous.
    Bonne fin de journée

  11. #31
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
             |---|
    ---      |   |
       |     |    ----|
       ------|        |---|
    Le "patatoide" (les 2 bins consecutifs) du milieu peut-etre considere comme un seul... Tu ne peux pas vraiment determiner si un point tombant a l'extremite droite du bin de gauche n'est pas plus pres de la mesure du bin droite... Car tout depend du demarrage (le point 0).

    Mais dans ton cas ca ne s'applique pas forcement....

    Mais c'etait pour expliquer...

  12. #32
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    Encore une question, Jérôme ! (juste pour comprendre)

    Ton problème est en fait un problème de data mining : quels sont les éléments discriminants, significatifs de propriétés données... donc quelles sont les causes de quelque chose. Je me trompe ?

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut
    ... si c'est le cas : ce lien http://fr.wikipedia.org/wiki/Analyse...es_principales

    et notamment :

    Le choix de réduire ou non le nuage de points (i.e. les K réalisations de la variable aléatoire (X1, …, XN)) est un choix de modèle :

    * si on ne réduit pas le nuage : une variable à forte variance va « tirer » tout l'effet de l'ACP à elle ;
    * si on réduit le nuage : une variable qui n'est qu'un bruit va se retrouver avec une variance apparente égale à une variable informative.
    ... juste pour contribuer (je suis peut être totalement hors sujet)

  14. #34
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Merci souviron34 pour les explications.

    Alikendarfen,

    Oui effectivement, c'est dans le cadre de data-mining.
    l'ACP, je connais bien, mais dans notre domaine, les résultats de cette méthode sont plutot .
    Par contre, l'algorithme génétique nous donne des résultats très interressants. Seulement, la fonction d'évaluation nous prend un temps fou, donc un peu d'optimisation ne fait pas de mal...

    Encore merci à vous tous.

  15. #35
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Bon pas de techniques miracles... mais une nette amélioration en calculant une carte des distances et en optimisant le code (float plutot que double, pas de racines, ...)

    Encore merci pour vos différentes propositions et remarques

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Algorithme KD-Tree de recherche du plus proche voisin .
    Par mobi_bil dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 11/05/2014, 11h54
  2. Point d'intérêt :Recherche des plus proches voisins
    Par Yannok dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/07/2012, 22h25
  3. Recherche de n plus proches voisin dans un espace de 2 dimension.
    Par mobi_bil dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/05/2009, 10h56
  4. Rechercher la plus proche valeur dans un tableau
    Par neoMatrix dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/05/2007, 11h45
  5. rechercher la plus proche valeur dans un tableau ?
    Par Slumpy dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/04/2007, 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