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

MATLAB Discussion :

Classification par les K-means


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Classification par les K-means
    Bonjour à tous,

    Pour commencer je tiens à vous préciser que je suis un utilisateur novice de Matlab. Ensuite, je ne sais pas du tout si je poste ce message dans la bonne section du forum, si ce n'est pas le cas je m'excuse par avance. En revanche ce que je suis sur c'est que je rencontre des difficultés dans l'utilisation de la fonction K-means :)

    Je vous présente mon problème. Expérimentalement, j'ai obtenu une courbe qui présente l'évolution des potentiels en fonction de la hauteur de mesure (potentiel moyen.jpg).
    Nom : potentiel moyen.jpg
Affichages : 286
Taille : 54,5 Ko

    Je sais (par recherche bibliographique) que cette courbe est en fait un ensemble de 3 droites. Donc pour identifier ces 3 droites, j'ai regardé l'évolution de la pente entre 2 points de mesure en fonction de la hauteur (pente.jpg)
    Nom : pente.jpg
Affichages : 282
Taille : 32,3 Ko

    Maintenant, en utilisant la fonction kmeans de Matlab je cherche à classer ces points de pente dans 3 groupes, dans l'espoir qu'ensuite je puisse fitter les points expérimentaux correspondants par des droites. Voici le code que j'ai utilisé actuellement mais sans succès (il est très fortement inspiré de celui que l'on trouve sur le site Matlab) :

    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
    X=[Xpente2,pente2]; % Xpente2 correspond aux hauteurs de mesure et pente2 correspond aux potentiels correspondants
    plot(X(:,1),X(:,2),'k*','MarkerSize',5);
    %
    [idx,C] = kmeans(X,3,'Distance','sqeuclidean');
    x1 = min(X(:,1)):0.05:max(X(:,1));
    x2 = min(X(:,2)):0.05:max(X(:,2));
    [x1G,x2G] = meshgrid(x1,x2);
    XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot
    idx2Region = kmeans(XGrid,3,'MaxIter',1,'Start',C); % Assigns each node in the grid to the closest centroid
    figure;
    gscatter(XGrid(:,1),XGrid(:,2),idx2Region,[0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],'..');
    hold on;
    plot(X(:,1),X(:,2),'k*','MarkerSize',5);
    plot(C(:,1),C(:,2),'r*','MarkerSize',10);
    title 'Fisher''s Iris Data';
    xlabel 'Petal Lengths (cm)';
    ylabel 'Petal Widths (cm)';
    legend('Region 1','Region 2','Region 3','Data','Location','SouthEast');
    hold off;
    %%%%%
    Voici le résultat obtenu :
    Nom : classification.jpg
Affichages : 268
Taille : 135,9 Ko

    Cette classification ne me convient pas, et de plus je pense qu'elle n'est pas bonne. En effet, si je regarde le point situé le plus à gauche dans la région 3, j'ai l'impression (mesure à la règle sur l'écran de l'ordi ...) qu'il est nettement plus proche du centre de la région 2. Tout comme le point situé le plus à droite dans la région 3, qui est plus proche du centre de la région 1. Et encore le point situé le plus à gauche de la région 1 qui est plus proche du centre de la région 3.
    Vous remarquerez qu'en effectuant ces modifications, le résultats me conviendrait parfaitement :)

    J'ai regardé sur internet, sur différents forums, sur le site d'aide de Matlab ... Mais je n'ai pas trouvé de réponse. Et je vous avoue que je suis un peu désespéré.
    Pouvez-vous m'aider ?
    Je vous en serai très reconnaissant et je vous remercie par avance de l'aide que vous m'apporterez.

    Cordialement,

    Lucas

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Hahaha je pense avoir trouvé tout seul
    Il suffisait de normaliser les données entre 0 et 1 par exemple.
    Voici le résultat final, qu'en pensez-vous ?

    Nom : classification2.jpg
Affichages : 300
Taille : 48,4 Ko

Discussions similaires

  1. Classification par les K-means
    Par Décembre dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 18/10/2012, 23h44
  2. Débogage corrompu par les optimisations du compilateur
    Par petitcoucou31 dans le forum EDI
    Réponses: 6
    Dernier message: 17/12/2003, 00h30
  3. [JVM] Connaitre la taille mémoire utilisé par les dif classe
    Par sur_uix dans le forum Général Java
    Réponses: 4
    Dernier message: 18/09/2003, 09h17
  4. Copies de flots en passant par les itérateurs
    Par Christophe Brun dans le forum C++
    Réponses: 7
    Dernier message: 02/07/2003, 11h41
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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