Les centroïdes ne correspondent pas aux coordonnées de l'image, mais aux coordonnées dans l'espace caractéristique. Il y a deux façons de tester la performance des kméens. Dans les deux cas, vous voulez associer les points avec leur cluster le plus proche. Vous obtenez cette information de la première sortie de kmeans.
(1) Vous pouvez visualiser le résultat du regroupement en réduisant l'espace à 6 dimensions en espace à 2 ou 3 dimensions, puis en traçant les coordonnées classées différemment dans différentes couleurs.
En supposant que les vecteurs de caractéristiques sont rassemblées dans un tableau appelé featureArray
, et que vous avez demandé nClusters
clusters, vous feriez l'intrigue comme suit en utilisant mdscale pour transformer les données à, par exemple, l'espace 3D:
%# kmeans clustering
[idx,centroids6D] = kmeans(featureArray,nClusters);
%# find the dissimilarity between features in the array for mdscale.
%# Add the cluster centroids to the points, so that they get transformed by mdscale as well.
%# I assume that you use Euclidean distance.
dissimilarities = pdist([featureArray;centroids6D]);
%# transform onto 3D space
transformedCoords = mdscale(dissimilarities,3);
%# create colormap with nClusters colors
cmap = hsv(nClusters);
%# loop to plot
figure
hold on,
for c = 1:nClusters
%# plot the coordinates
currentIdx = find(idx==c);
plot3(transformedCoords(currentIdx,1),transformedCoords(currentIdx,2),...
transformedCoords(currentIdx,3),'.','Color',cmap(c,:));
%# plot the cluster centroid with a black-edged square
plot3(transformedCoords(1:end-nClusters+c,1),transformedCoords(1:end-nClusters+c,2),...
transformedCoords(1:end-nClusters+c,3),'s','MarkerFaceColor',cmap(c,:),...
MarkerEdgeColor','k');
end
(2) vous pouvez, alternativement, créer une image pseudo-couleur qui vous montre quelle partie de l'image à laquelle appartient groupe
en supposant que vous avez nRows
par nCols
blocs, vous écrivez
%# kmeans clustering
[idx,centroids6D] = kmeans(featureArray,nClusters);
%# create image
img = reshape(idx,nRows,nCols);
%# create colormap
cmap = hsv(nClusters);
%# show the image and color according to clusters
figure
imshow(img,[])
colormap(cmap)