Let me say I have a data of shape (100, 580, 10) where 100 is the different samples with 580 points and 10 features. I would like to use kmeans to find the silhouette score for all the 10 features across the 100 data samples and plot the silhouette score and the number of clusters.
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# shape of feature vector
feature_vector = (100,580,10)
nr_clusters = range(2,10)
silhouette_avg = {}
# loop throth the data samples in the feature vector
for data_sample in range(len(feature_vector)):
feature_data = feature_vector[data_sample]
print(f'Here1'+ str(feature_data.shape))
for feature in range(len(feature_vector[0])):
silhouette_avg[spectra, feature] = []
for num_clusters in nr_clusters:
kmeans = KMeans(n_clusters=num_clusters, max_iter=50)labels = kmeans.labels_
silhouette_avg[data_sample, feature].append(silhouette_score(feature_data, labels))
print(f'Silhouette score for data sample {data_sample} and feature {feature} with {num_clusters} clusters is {silhouette_score(feature_data, labels)}')
plt.plot(nr_clusters, silhouette_avg[data_sample, feature], label=f'Data sample {data_sample}')
plt.ylabel('Silhouette Score')
plt.xlabel('Number of Clusters')
plt.title('Silhouette Score for each feature')
plt.legend()
I tried that but that rather gives me the silhouette score per data sample rather than the silhouette scores of all the 10 features across the 100 data samples.