Découvrez le score de silhouette
Formule pour le i ème point de données
(b(i) - a(i)) / max(a(i),b(i))
où b (i) -> dissimilarité du cluster voisin le plus proche
a (i) -> dissimilarité entre les points d'un cluster
Cela donne un score entre -1 et +1.
Interprétation
+1 signifie un très bon ajustement
-1 signifie une classification erronée [aurait dû appartenir à un autre cluster]
Après avoir calculé le score de silhouette pour chaque point de données, vous pouvez prendre un appel sur le choix du nombre de clusters.
Exemple de code
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
X, y = make_blobs(n_samples=500,
n_features=2,
centers=4,
cluster_std=1,
center_box=(-10.0, 10.0),
shuffle=True,
random_state=1) # For reproducibility
range_n_clusters = [2, 3, 4, 5, 6]
for n_clusters in range_n_clusters:
# Initialize the clusterer with n_clusters value and a random generator
# seed of 10 for reproducibility.
clusterer = KMeans(n_clusters=n_clusters, random_state=10)
cluster_labels = clusterer.fit_predict(X)
# The silhouette_score gives the average value for all the samples.
# This gives a perspective into the density and separation of the formed
# clusters
silhouette_avg = silhouette_score(X, cluster_labels)
print("For n_clusters =", n_clusters,
"The average silhouette_score is :", silhouette_avg)
# Compute the silhouette scores for each sample
sample_silhouette_values = silhouette_samples(X, cluster_labels)