# Validate different unsupervised learning algorithms and by combination of parameters

I am applying various clustering algorithms on a given data set:

CH: Calinski-Harabasz

DB: Davies-Bouldin

For each algorithm, I first want to obtain the best combination of parameters:

| Algorithm           | silhouette  |  CH        | DB     |
| ------------------- | ----------- | ---------- | ------ |
| KMeans  clusters=2  | 0.90895     | 644.666834 | 0.2624 |
| KMeans clusters=3   | 0.870049    | 670.666834 | 0.3884 |
| KMeans  clusters=4  | 0.866955    | 634.666834 | 0.3892 |
| KMeans clusters=5   | 0.854041    | 567.503623 | 0.3928 |


Which of the above metrics do you recommend I use to validate each algorithm separately? (KMeans, Meanshift, DBSCAN, Agglomerative) If there are better metrics for any of them, let me know. And that it is included in a Python package (scikit-learn preference).

And finally make a table with the best solution for each algorithm:

| Algorithm               | silhouette |  CH        | DB     |
| ----------------------- | ---------- | ---------- | ------ |
| KMeans                  | 0.87895    | 644.666834 | 0.2624 |
| MeanShift               | 0.860049   | 6211.48005 | 0.3884 |
| DBSCAN                  | 0.916955   | 115.955760 | 1.0983 |
| Agglo. Clustering       | 0.914041   | 567.503623 | 0.1429 |


And given the comparison table, which is the best algorithm of the 4? Or can they not be compared because they are partitioning, density, hierarchical?