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).
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)
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) :
Voici le résultat obtenu :
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; %%%%%
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
Partager