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

Langage Java Discussion :

la décomposition en valeurs singulières(SVD)


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de naima2005
    Inscrit en
    Février 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 340
    Par défaut la décomposition en valeurs singulières(SVD)
    Bonjour,
    aucours de mes recherche , j'aimerai appliquer la LSA , c'est une méthose de classification sémantique qui se base essentiellement sur la décompsition en valeurs sigulières d'une matrice qu'on définit .
    pour cela je demande si vous connaissez l'algorithme en java (ou tout autre langage) sur la décomposition en valeurs singulières(SVD) d'une matrice carré (n*n).

    je vous remercie d'avance de votre aide.

  2. #2
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Un algorithme n'est en aucun cas lié à un langage, tu n'es pas dans la bonne catégorie

  3. #3
    Membre éclairé Avatar de naima2005
    Inscrit en
    Février 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 340
    Par défaut
    oui bien sur tu as raison, mais moi je cherche un code source en java ou en un autre langage pour la SVD.
    Normalement ma question doit être posée dans une catégorie reliée au maths et à l'algèbre linéaire plus exactement.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  5. #5
    Invité1
    Invité(e)
    Par défaut
    Salut,

    Je suis aussi sur un projet d'analyse sémantique latente (LSA), en Java.
    Cette technique repose sur la décomposition en valeurs singulières d'une matrice, typiquement termes par documents, les coeffs étant les fréquences de chaque terme dans chaque document.

    Une petite biblio appelée JAMA, pour Java Matrix Package, propose, en autres et en plus d'une classe Matrix bien utile, une classe SingularValueDecomposition qui fait, comme son nom l'indique, de la décomposition en valeurs singulières.

    Voici le lien :
    http://math.nist.gov/javanumerics/jama/
    Les téléchargements sont vers le bas de la page.
    Ou sur google : "java matrix" donne le lien en première position. Tu peux aussi le trouver en cinquième sur le lien de sinok

    Ça devrait être un bon point de départ. Mais malheuresement, JAMA n'a pas été conçu spécialement pour la LSA, et n'est donc pas "optimisée" pour. Par exemple, la classe Matrix est implémentée de façon "classique". Elle ne prend pas en compte le fait que la matrice des fréquences termes par documents sur laquelle LSA est typiquement appliquée est une matrice creuse généralement de très grande taille. Il y a de meilleurs façons pour stocker ce genre de matrice que d'utiliser un tableau double[][].

    Tu parlais de l'algorithme... Celui de JAMA est assez long et peu commenté, difficile à comprendre. Il vaut mieux essayer de comprendre les algorithmes mathématiques avant de se pencher sur l'implémentation JAMA. D'après ce que j'ai vu, il en existe plusieurs. Va voir sur wikipedia si tu cherches plus d'info. Aussi, l'algo de SVD implémenté dans LAPACK (Linear Algebra PACKage, en fortran) ou celui de la GSL (Gnu Scientific Library, en C++) sont peut-être plus clairs que celui de JAMA.

    Un autre problème pour LSA avec JAMA est que toutes les valeurs singulières sont calculées (les min(m,n) valeurs, m et n étant les dimensions de la matrice), en pratique ça peut aller jusqu'à plus de 10 000. Or, pour LSA, seules les k premières valeurs sont intéressantes, en général entre 100 et 200.

    Il faut donc adapter l'algo de JAMA pour pouvoir avoir une implémentation de LSA efficace. Si tu avances dans tes recherces sur ce point, merci de m'en faire part !

    Martin


    PS : Puisque c'est mon premier message sur ce forum, j'en profite pour dire bonjour à toute la communauté développez.com dont les tutoriaux et autres articles sont souvent d'une aide précieuse !

  6. #6
    Membre éclairé Avatar de naima2005
    Inscrit en
    Février 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 340
    Par défaut
    Bonjour martin.bouladour,

    je vous remercie de vos explications ainsi que vos indications.
    vous, vous voulez appliquer la LSA à des corpus de grandes tailles n'est ce pas? moi, je m'interesse à la classification de petits textes (paragraphes par exemple) et je pense que les paragraphe n'ont pas d'abitudes une grande taille, et peut être des valeurs entre 100 et 200 que propose JAMA me semble interessantes (reste à voir).
    j'en profite aussi de vous demander apropos de la normalisation , car avant d'appliquer la SVD à ma matrice d'origine, il faut une étape de normalisation à M1 qui me donnera une matrice M2 mais il y a 2 méthodes de normalisation:
    1ère-Calcul du log de chaque fréquence +1 ==>log(xi+1)
    Puis, calcul de l'entropie de chaque ligne (mot) et division de chaque cellule de la ligne par cette entropie.
    dans ce 1er cas je ne vois pas la notion d'entopie. et me semble que la 2ème méthode est plus claire à comprendre:
    2ème-Utilisation de la méthode du «TF X IDF» pour normaliser.
    Une formule tf*idfcombine deux critères :
    –l'importance du terme pour un document (par tf)
    –le pouvoir de discrimination de ce terme (par idf)
    et ainsi wij=tfij*log(N/n) avec :
    •wij= poids du terme Tjdans le document Di
    •tfij= fréquence du terme Tjdans le document Di
    •N = nombre de documents dans la collection
    •n = nombre de documents où le terme Tjapparaît au moins une fois

    pour ensuite appliquer la SVD à M2 pour trouver la matrice cible.
    qu'en pensez -vous?

    Très cordialement.

  7. #7
    Invité1
    Invité(e)
    Par défaut
    Pour la normalisation, je ne sais pas trop, je ne me suis pas penché sur le sujet, désolé.

Discussions similaires

  1. Algorithme de Décomposition en valeur singulière
    Par guinda dans le forum Mathématiques
    Réponses: 3
    Dernier message: 03/03/2014, 09h58
  2. Décomposition en valeur singulière en Java
    Par guinda dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 01/03/2014, 12h39
  3. Décomposition en valeurs singulières
    Par Anduriel dans le forum MATLAB
    Réponses: 6
    Dernier message: 27/02/2013, 16h09
  4. Réponses: 3
    Dernier message: 15/06/2009, 00h17

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