本文介绍基于最小生成树(MST)的单连接聚类算法,分为凝聚和分裂两种,都十分简单。
(基于MST的单连接凝聚算法)
step 1. 假设有n个待聚类的对象,把每个对象都当做一个独立的簇,画出
这n个点的完全图
G(∞)
,根据
G(∞)
得到最小生成树,每条边的权重就是对象之间的距离,重复第二步和第三步直到只剩下一个簇。
step 2. 找出MST中权重最小的一条边(如果有多条边权重相同,任取
一条,不影响结果),将这条边对应的点(簇)合并成一个簇。
step 3. 把步骤2中选中的那条边的权重替换成一个足够大的值(比所有权重大)
现在找个例子演示一遍:
这个矩阵包含所有不同对象之间的距离。
首先构造
G(∞)
和MST
左边的是
G(∞)
,所有的点之间都相连。右边的是相应的最小生成树。
接着进行第二步,合并簇3,5为一个新的簇,用(3,5)表示
第三步,合并1,4
第四步,合并簇2和簇(1,4)
第五步,合并簇(3,5)和(1,2,4),此时只剩下一个簇,算法停止。
(基于MST的单连接分裂算法)
step 1. 假设有n个待聚类的对象,把所有对象都划分到同一个簇,画出
这n个点的完全图
G(∞)
,根据
G(∞)
得到最小生成树,每条边的权重就是对象之间的距离。
step 2. 找出MST中权重最大的一条边(如果有多条边权重相同,任取
一条,不影响结果),将这条边剪断,被分开的两部分分别构成两个新簇。
step 3. 重复step 2直到每个对象分别属于一个簇。
还是使用上面那个例子,首先构造
G(∞)
和MST:
接下来的步骤如下图所示,很简单就不赘述了。
最后是一张表示聚类结果的树状图:
详细内容请参考jain和Dubes的《Algorithms for Clustering Data》