--good
算法主要分为以下步骤,一开始是把所有数据初始化为一个cluster,第二步从所有cluster 中选其中一个出来用基本k-means算法(k设为2)再划分成两个cluster(初始时只有一个cluster).然后是一直重复第二步的划分(选一个cluster划成两个)直到得到k个cluster算法停止。
从算法可以知道每次划分都是用k-means划分,可是问题是从已有的cluster中应该选哪个cluster出来进行划分呢。从网上较多人转载Michael Steinbach的文章“A Comparison of Document Clustering Techniques”摘抄以下算法:
Basic Bisecting K-means Algorithm for finding K clusters.
1. Pick a cluster to split.2. Find 2 sub-clusters using the basic K-means algorithm. (Bisecting step)3. Repeat step 2, the bisecting step, for ITER times and take the split that produces theclustering with the highest overall similarity.4. Repeat steps 1, 2 and 3 until the desired number of clusters is reached.
在这篇文章中,作者说到了选取cluster有两种策略,第一种就是每次选的时候,都对已有的cluster计算误差和(),然后选一个SSE最大的一个cluster来进行划分。第二种是每次都挑数据最多的那个cluster来进行划分。一般都是采取第一种策略。除此以外,每次不只用一次k-means来划分,而是预先设置一个ITER 值,然后对这个cluster进行Iter次循环执行k-means算法。因为k-means每次一开始都是随机选k个质心来执行,所以一般来说 ITER次执行k-means,每次都会得到不同的两个cluster。那么应该选哪对cluster来作为划分以后的cluster呢?答案就是在每次循环中,每次都计算通过当次k-means划分出来的两个cluster的SSE和,那么最后就选SSE和最少的那对cluster作为划分以后的cluster。
算法如下:
1. 把所有数据作为一个cluster加入cluster list
2. Repeat
3. 从cluster list中挑选一个SSE[最大]的cluster出来
4. for i=1 to 预设的循环次数
5. 用k-means算法把挑出来的cluster划分成两个子cluster
6. 计算两个子cluster的SSE和
7. end for
8. 把for循环中 [sse和最小的] 那两个子cluster加入cluster list
9. until cluster list 拥有k 个cluster