Das Folgende ist ein ein vollständiges Beispiel für Clustering:
%% 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)
Welche Ausgabe erwarten Sie? – SilentGhost
Nehmen wir an, meine Cluster sind p1..p19. und ich habe einen Testdatenpunkt, den ich aus Testdaten, die ich beim Clustering verwende, zufällig auswähle. Ich möchte so etwas sehen; "Meine Testdaten gehören zu p5" – tguclu
Ich fand einen Weg, aber nicht sicher, ob das stimmt. ctrs enthält die Zentren jedes Clusters. Wenn ich die euklidische Distanz btw Elemente von ctrs und meine Testdaten berechne und den minimalen Index erhalte, dann gebe ich den Clusterindex, zu dem meine Testdaten gehören. irgendwelche Ideen? – tguclu