My understanding of silhouette in the context of k-means clustering is that its equal to:

$$\frac{\mbox{Av. distance to subjects in hearest neighboring cluster} - \mbox{Av. distance to subjects in my cluster}}{\mbox{max. of the two above}}$$

So, assume really good clustering, Av. distance to subjects in neighbouring cluster is really big and average distance to subjects in my cluster is really small (numerator becomes approx. the first term), divide by the max, so the silhouette becomes 1 --> Good clustering.

But if I have as many clusters as I have items, then will not the average distance to subjects in neighbouring cluster always be greater than the distance to the current cluster (since the item is sitting on it)? Then I should always get silhouette = 1, no?

  • 1
    $\begingroup$ By convention, the silhouette index for any singleton object is set to 0. Alternatively, you may set it to missing (no value). We can never say how well a singleton is clusrtered because there are no other points in its cluster, to compare the distance to them with that to the neighbouring cluster. $\endgroup$
    – ttnphns
    Sep 3, 2016 at 21:42
  • $\begingroup$ @ttnphns intuitively that convention doesn't make much sense to me. The distance to every point in a singleton cluster seems like it should be zero, because the distance between any point and itself is zero. $\endgroup$ Sep 3, 2016 at 22:28
  • $\begingroup$ @ssdecontrol, In clustering indices such as silhouette, comparing within and between cluster densities, the distances and their averages serve as indicators of density. Singleton object is formally a cluster, yet it has undefined (and not zero or 1) density within. It is difficult to say if a singleton object alone is clustered "well" or "bad". Therefore Silhouette index is set to 0 (neither any good nor completely bad), or is set to missing. It makes clear sense. $\endgroup$
    – ttnphns
    Sep 3, 2016 at 22:48

1 Answer 1


A problem with silhouette is that it is not well defined for 1 element clusters. Because the average distance to other cluster members then is an average over 0 values and thus undefined.

In the original Silhouette work, IIRC the author suggested to use 0 for such "clusters".

So by (complete) definition, a data set (with no duplicates) where every object is its own cluster will have a Silhouette of 0.

Because of this anomaly, Silhouettes can be a bit unreliable sometimes. They really punish outliers and noise, so in the presence of such data, avoid Silhouette.

There is another unresolved corner case in Silhouette: Assuming we have points 0, 0, 0, and 0 and cluster them as 0,0 and 0,0. Then the average distance within is 0, the average distance across is 0, and we compute 0/0.

  • $\begingroup$ +1, Btw thanks to pointing to the last problem (4 identical point belonging to 2 clusters). Would you suggest to assign silhouette value 0 in such a case? $\endgroup$
    – ttnphns
    Sep 4, 2016 at 17:50
  • $\begingroup$ I think so, but I don't have a 'proof' or anything. I would argue that if the distance to the own cluster is the same as to the other cluster, then the value should be 0. For practical purposes, the simplified Silhouette may often be the better choice (also because of performance). Which uses the distance to the centroid rather than the average distance. But it suffers from the same problem. $\endgroup$ Sep 4, 2016 at 17:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.