Voici un exemple complet sur le regroupement:
%% generate sample data
K = 3;
numObservarations = 100;
dimensions = 3;
data = rand([numObservarations dimensions]);
%% cluster
opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = kmeans(data, K, 'options',opts, ...
'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);
%% plot data+clusters
figure, hold on
scatter3(data(:,1),data(:,2),data(:,3), 50, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')
%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);
%% Assign data to clusters
% calculate distance (squared) of all instances to each cluster centroid
D = zeros(numObservarations, K); % init distances
for k=1:K
%d = sum((x-y).^2).^0.5
D(:,k) = sum(((data - repmat(clusters(k,:),numObservarations,1)).^2), 2);
end
% find for all instances the cluster closet to it
[minDists, clusterIndices] = min(D, [], 2);
% compare it with what you expect it to be
sum(clusterIndices == clustIDX)
quelle sortie espérez-vous? – SilentGhost
Disons que mes clusters sont p1..p19. et j'ai un point de données de test que je choisis au hasard parmi les données de test que j'utilise en cluster. Je veux voir ça comme ça; "mes données de test appartiennent à p5" – tguclu
J'ai trouvé un moyen mais je ne suis pas sûr que ce soit correct. ctrs contient les centres de chaque cluster. Si je calcule la distance euclidienne btw éléments de ctrs et mes données de test et obtenir l'indice du minimum puis il me donnera l'indice de cluster auquel mes données de test appartient. des idées? – tguclu