Hi Seemant,
I understand that you want to find the optimal number of clusters using the Silhouette Method with Fuzzy c-means as the clustering function.
You can refer the code below to achieve the same in MATLAB.
% Generate dummy data
data = [randn(100,2)+2; randn(100,2)-2];
% Set the range of cluster numbers to evaluate
minClusters = 2;
maxClusters = 10;
% Initialize variables to store optimal number of clusters and maximum silhouette score
optimalNumClusters = 0;
maxSilhouetteScore = -Inf;
% Perform fuzzy c-means clustering for different numbers of clusters
for k = minClusters:maxClusters
options = fcmOptions(NumClusters=2,Verbose=false);
[centers, U] = fcm(data, options);
% Calculate the fuzzy membership values
[~, labels] = max(U);
% Calculate the silhouette values for each data point
silhouetteValues = silhouette(data, labels);
% Calculate the average silhouette score
avgSilhouetteScore = mean(silhouetteValues);
% Update the optimal number of clusters if a higher silhouette score is found
if avgSilhouetteScore > maxSilhouetteScore
maxSilhouetteScore = avgSilhouetteScore;
optimalNumClusters = k;
end
end
% Display the optimal number of clusters
disp("Optimal number of clusters = " + optimalNumClusters);
Please find below the documentation links of the functions used in the code:
- fcm - https://www.mathworks.com/help/fuzzy/fcm.html
- silhouette - https://www.mathworks.com/help/stats/silhouette.html
You can also refer to the following documentation on "Silhouette criterion clustering evaluation object" to use the silhouette method with other clustering functions.
Hope this helps.