您的位置:首页 > 其它

bisecting k-means 算法

2014-04-13 18:21 281 查看
    最近在研究data minging 中的bisecting k-means算法,发现网上的中文材料很少,而且仅有的几篇代码都是一模一样-_-!    后来直接查英文材料了,然后大致了解bisecting k-means的基本原理。算法主要分为以下步骤,一开始是把所有数据初始化为一个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 the

clustering with the highest overall similarity.

4. Repeat steps 1, 2 and 3 until the desired number of clusters is reached.

 

在这篇文章中,作者说到了选取cluster有两种策略,第一种就是每次选的时候,都对已有的cluster计算误差和(SSE),然后选一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息