您的位置:首页 > 其它

层次聚类(二)

2014-10-31 10:06 260 查看
一、层次聚类

首先考虑欧式空间下的层次聚类。该算法仅可用于规模相对较小的数据集。层次聚类用于非欧式空间时,还有一些与层次聚类相关的额外问题需要考虑。因此,当不存在簇质心或者说簇平均点时,可以考虑采用簇中心点(clustroid)来表示一个簇。

1.1 欧式空间下的层次聚类

首先,每个点看作一个簇,通过不断的合并小簇而形成大簇。我们需要提前确定

(1) 簇如何表示?

(2) 如何选择哪两个簇进行合并?

(3) 簇合并何时结束?

对于欧式空间,(1)通过簇质心或者簇内平均点来表示簇。对于单点的簇,该点就是簇质心。可以初始化簇数目为欧式空间点的数目Cnumber=n。簇之间的距离为质心之间的欧式距离,(2)选择具有最短距离(或者其他方式)的两个簇进行合并。

1.2 层次聚类算法的效率

基本的层次聚类算法效率不高。第一步时间开销为O(n^2),后续步骤的时间开销(n-1)^2, (n-2)^2。最终从1到n求和得到O(n^3)。在此基础,可以按照以下方式提高效率。

(1) 必须计算所有点对之间的距离,时间复杂度为O(n^2)

(2) 将这些距离对存放在优先队列中(最小堆栈),有限队列或者最小堆的复杂度为O(n^2)。

(3) 当决定合并簇D合并到簇C时,C变成了一个新的簇,D变成了需要删除了簇,所以我们需要删除簇D到各簇的距离,再计算新簇C到其余各簇的距离。优先队列删除的操作时间是O(logn),整个的删除时间开销为O(nlogn)。

(4) 然后计算新簇到所有剩余簇的所有距离,由于每次最多有n个元素被插入到优先队列中,而每次插入的时间开销依然是O(logn),所以时间开销同样是O(nlogn)。

(5) 由于最后两步最多执行n次,而第一步只执行1次,所以总的时间开销为O(n^2logn)。尽管优于O(n^3)。但是仍然对n有很强的上界限制。

1.3 控制层次聚类的其他规则

合并规则:

(1) 定义两个簇的距离为两个簇中所有点的最短距离(min(all dB and all dP))。

(2) 定义两个簇的距离为两个簇中所有点对之间距离的平均值(mean(all dB and all dP))。

前提是假设将A和B合并成一个新簇C

(3) 簇的半径(radius)是指簇内所有点到新簇C的质心的最大距离。Max(6 points to centroid of C)。到时谁的距离结果簇半径最小就合并谁。可以修改为:选择簇内所有点到质心的平均距离最短的两个簇进行合并,mean(d
6 points to centroid of C)。另一个修改为选择结果簇内所有点到质心的距离平方和最短的两个簇进行合并 。

(4) 簇的直径(diameter)是指簇内任意两个点之间的最大距离。可以将结果簇具有最小直径的两个簇进行合并。

合并过程的停止:

(1) 预先设定停止的k值。

(2) 当最佳合并得到的簇的直径/半径超过某个阀值时停止聚类。

(3) 当最佳合并得到的簇的密度(density)(簇的单位体积中点的数目,可以通过点数目/直径(或者半径)的某个幂来估计)超过某个阀值时停止聚类。幂可以是空间的维数或者1,2。

(4) 当有证据表明下一次簇对合并会产生很糟糕的结果时停止聚类。比如可以跟踪所有当前簇的平均直径,如果我们合并两个确实不该合并的簇时,平均直径会突然大幅度的增加。

1.4 非欧空间下的层次聚类

在非欧空间,使用基于点进行计算的距离测度,如Jaccard距离,余弦距离或编辑距离等。所以在非欧空间下,当无法合并簇中的点时,我们仅有的选择是从簇中选择一个点来代表簇。理想情况下,该点非常接近簇内的所有点,因此在某种意义上说可以认为该点处于簇的“中心”。该代表点称为簇中心点(clusteroid)。选择簇中心点的方法如下:

(1) 该点到簇中所有其他点的距离之和(求和);

(2) 该点到簇中另外一点的最大距离(最大值);

(3) 该点到簇中其他所有点的距离平方和(平法和)。

上面的各种簇间距离计算方法同样适用于非欧空间,只不过这里用簇中心点代替簇的质心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: