Could always try a silhouette score, although it may not perform well on high dimensional data.
Silhouette scores compare a datapoint's placement relative to its own cluster to its placement relative to other cluster/clusters. The values returned will range between -1 (indicating a poor clustering) to +1 (indicating "good" clustering). Using Wikipedia's example, use 2 clusters and assume there is an observation i that has been placed in Cluster 1. The Silhouette score uses distance measures (Euclidean, for example, but others can also be used) to determine the average distance of i' to every other point in Cluster 1. Then it determines the average distance of i to every point in Cluster 2. The silhouette formula for point i would be:
silhouette(i) = $\frac{b(i)-a(i)}{Max\left \{ a(i), b(i) \right \}}$
Remembering for this example that i is in Cluster 1, then:
- If an object is closer, on average, to the points in Cluster 1 than
Cluster 2, then a(i) < b(i) and silhouette score is positive for that
point.
- If an object is closer, on average, to the points in Cluster 2 than
Cluster 1, then a(i) > b(i) and silhouette score is negative for that
point.
Run this comparison across all points and all clusters, then average, and you will obtain a global silhouette score.
You will see most people capture silhouette score in a for loop where they vary the number of clusters; this allows quick comparison of a range of clusters.