| input: dataset, k_values, eps_values = [10, 25], min_p = 10 |
| output: best_k, macro_clusters, best_eps (idx), micro_clusters |
| for k = k_values |
| kmeans = fitckmeans (dataset, k) |
| labels = predict (kmeans, dataset) |
| evaluation indicator = [WCSS, Silhouette coefficient] |
| end |
| best_k = k_values(best_k_idx)//choose the best k value |
| kmeans = fitckmeans(data, best_k)//k-means macroclustering |
| micro_clusters = cell (best_k, 1) |
| for cluster_label = 1 : best_k |
| for eps = eps_values |
| dbscan_labels = dbscan(cluster_data, eps, 10) |
| evaluation indicator = [ WCSS, Silhouette coefficient, CH index] |
| end |
| best_eps = eps_values(best_eps_idx)//choose the best eps value |
| dbscan_labels = dbscan(cluster_data, best_eps, 10)//dbscan microclustering |
| micro_clusters{cluster_label} = dbscan_labels; |
| end |