层次聚类(二)
2014-10-31 10:06
260 查看
一、层次聚类
首先考虑欧式空间下的层次聚类。该算法仅可用于规模相对较小的数据集。层次聚类用于非欧式空间时,还有一些与层次聚类相关的额外问题需要考虑。因此,当不存在簇质心或者说簇平均点时,可以考虑采用簇中心点(clustroid)来表示一个簇。
(1) 簇如何表示?
(2) 如何选择哪两个簇进行合并?
(3) 簇合并何时结束?
对于欧式空间,(1)通过簇质心或者簇内平均点来表示簇。对于单点的簇,该点就是簇质心。可以初始化簇数目为欧式空间点的数目Cnumber=n。簇之间的距离为质心之间的欧式距离,(2)选择具有最短距离(或者其他方式)的两个簇进行合并。
(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) 定义两个簇的距离为两个簇中所有点的最短距离(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) 该点到簇中所有其他点的距离之和(求和);
(2) 该点到簇中另外一点的最大距离(最大值);
(3) 该点到簇中其他所有点的距离平方和(平法和)。
上面的各种簇间距离计算方法同样适用于非欧空间,只不过这里用簇中心点代替簇的质心。
首先考虑欧式空间下的层次聚类。该算法仅可用于规模相对较小的数据集。层次聚类用于非欧式空间时,还有一些与层次聚类相关的额外问题需要考虑。因此,当不存在簇质心或者说簇平均点时,可以考虑采用簇中心点(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) 该点到簇中其他所有点的距离平方和(平法和)。
上面的各种簇间距离计算方法同样适用于非欧空间,只不过这里用簇中心点代替簇的质心。
相关文章推荐
- 层次聚类 Hierarchical Clustering Algorithms
- Agglomerative Hierarchical Algorithms(凝聚式层次聚类)
- 层次聚类
- 聚类算法之层次聚类(Java实现)
- 层次聚类
- 浅谈聚类&层次聚类
- 读书笔记 -- 008_数据挖掘_聚类_基于层次的方法
- 层次聚类与分类规则
- 层次聚类之高斯混合模型聚类算法原理的介绍
- 『sklearn学习』沃德结构层次聚类的浣熊脸图像的演示
- python中做层次聚类,使用scipy.cluster.hierarchy.fclusterdata方法
- R语言将层次聚类中的树分成簇
- 层次聚类 Hierarchical Clustering
- 机器学习(层次聚类)
- 《Python数据分析与挖掘实战》第14章——层次聚类
- 基于层次的聚类----AGNES算法使用(R语言)
- 机器学习(6): 层次聚类 hierarchical clustering
- 层次聚类简介
- R语言之系统聚类(层次)分析之图谱形式完整版
- 数据挖掘 凝聚层次聚类