Algorithm 1. Hierarchical Fuzzy C-Means Clustering

Input: Initialize list of data X = { X 1 , , X n } with size n, threshold t, number of cluster c

Output: List of c cluster centers C = { C 1 , , C c }

1. for c = 1 to n

2. List candidateList = arg min c i = 1 n j = 1 c w i j m x i c j 2

3. Apply Silhouette Width on candidateList, give value q

4. end for

5. Choose optimal q, List finallist = candidateList

6. for each cluster set s in finallist

7. int clusterSize = s.size()

8. if(clusterSize > t)

9. n = c

10. do 1-18

11. end if

12. else if All clusterSize <= t

13. return C

14. end else if

15. else if All clusterSize doesn’t change

16. return C

17. end else if

18. end for