作者:钱烽
三、合并聚类算法
基于定义2所提出的相似度定义,我们在图2中给出最小化局部边际的合并聚类算法详细执行过程.首先,针对数据集中可能存在的噪声数据,我们对所有样本点进行孤立点检测.然后,作为ACMOM算法的主要过程,我们采用基于MkNN关系的相似度对检测结果为非孤立的样本点进行合并聚类.接着,为了构建完整的系统树图,我们将其余孤立样本点赋予距离它最近的类簇.最后,对于不存在任何MkNN连接的少数剩余类簇集合,我们使用ALINK算法进行合并操作并输出系统树图形式的聚类结果.
该算法的具体执行步骤如下:
(1) 初始化基本类簇(第1~6行): 算法首先初始化类簇集合GS和孤立点集合OS为空集,然后遍历数据集中的样本点.为了避免噪声数据的影响,ACMOM算法对于每一个样本点都使用了LOF技术[28]来检测其是否为孤立点.其中,由于LOF检测也涉及样本点的最近k邻居计算,我们使用了相同的最近邻参数k值.对于检测结果为孤立点的样本点,我暂时将其加入孤立点集合OS中.而对于其余样本点,我们初始化每个样本点自成一类,并将它们加入到类簇集合GS中,使之成为系统树图的叶子节点.
(2) 合并最相似类簇对(第7~11行): 接着,算法开始执行合并操作.在每次合并操作开始时,ACMOM算法首先根据定义2更新所有可能的类簇间相似度,并从中找出最大值.对于满足相似度最大值的类簇对和,我们将其合并为一个新的类簇,并在系统树图中将其赋为和的父亲节点.最后,我们在类簇集合中用新类簇替换原来的子类簇和.ACMOM算法将不断重复上述合并操作直至任意类簇间相似度都为0或所有样本点都合并至同一类簇为止。
(3) 合并孤立样本点(第12~15行): 对于剩余的每个孤立样本点,ACMOM算法首先找到距离其最近的非孤立点邻居,然后将其合并至该邻居所在的类簇中.
(4) 返回合并聚类结果(第16、17行): 上述算法流程执行完毕后,如果所有的样本点都已合并至类簇集合GS中的唯一类簇,我们直接将其作为系统树图的根节点返回给用户.否则,我们使用ALINK算法对集合GS中的剩余类簇做进一步合并操作并返回最终的系统树图结果.为了保证一致性,我们使用类簇间的样本间距均值来记录所返回系统树图中的节点高度。
四、复杂度分析
本节中,我们将更加具体地描述ACMOM算法的实现细节,从而详细分析其时间复杂度和空间复杂度.4时间复杂度分析
准备工作: 为了计算类簇间相似度以及使用LOF技术对样本点进行孤立点检测,我们需要事先为每个样本点计算其最近k邻居集合.ACMOM算法通过构建k-d树结构来实现这一操作.根据文献[29,30]的描述,构建k-d树的时间复杂度为O(nlogn),而为任意样本点查找k个最近邻居需要O(dn1-1/d+k)时间.其中,n表示数据集中样本点的个数,表示样本点的维度.因此,为数据集中的n个样本点构建k最近邻列表的总体时间复杂度为O(dn2-1/d+kn).
算法步骤(1): 根据文献[28]的描述,在已知k最近邻列表的前提下对n个样本点进行LOF检测的时间复杂度为O(n).而将数据集中的所有样本点加入基本类簇集合GS或孤立点集合OS的时间复杂度也是O(n).因此,算法步骤(1)的总体时间复杂度是O(n).
算法步骤(2): 算法从O(n)个基本类簇开始,每次选择两个现有类簇合并为一个新类簇,执行过程最多包含O(n)次合并操作.在此之前,ACMOM算法通过扫描样本点的k最近邻列表来构建数据集的MKNN连接集.这需要O(kn)的时间复杂度.基于所得的连接集,我们为每个基本类簇保存一个哈希表结构[31],其中存储了与其相邻的类簇序号.与序号一起保存的还有参与类簇之间MKNN连接的边界样本点集合(即定义2中的PK和PL).这些操作可以通过扫描一遍MKNN连接集完成,因而时间复杂度也是O(kn).在每次进行合并操作时,我们需要找到满足相似度最大的类簇对.为了加速算法执行,我们将与每个类簇最相似的类簇序号以及对应相似度存储在一个最大堆结构[32]中.构建最大堆结构的时间复杂度是O(nlogn),而每次从其中查找满足最大相似度的类簇对仅需要常数项时间.在进行合并操作时,除了使用常数项时间将原有类簇的样本点合并至新的类簇外,我们还需要将原有类簇的邻居列表进行合并,并且更新其最相似邻居.由于这一列表存储在哈希表结构中,而类簇的平均邻居数为O(k),因而所需的时间复杂度也是O(k).此外,我们还需要更新与被合并类簇相邻的其他类簇.假设这些相关类簇的平均数量为个,则对它们的邻居列表进行更新的时间复杂度为.最后,在最大堆结构中更新这些相关类簇以及新合并类簇的最近邻信息需要时间.综上所述,对数据集进行O(n)此合并操作的时间复杂度为,这也是算法步骤(2)的总体时间复杂度.
算法步骤(3): 为了对每个孤立样本点查找其最近非孤立点邻居,我们首先在它的最近k邻居列表中进行搜索,这需要最多O(kn)时间.而对于剩余的孤立样本点,我们通过进一步查询k-d树进行判断.设这些剩余样本点的个数为,查询的最坏时间复杂度为.之后,将所有孤立样本点合并至最近类簇的时间复杂度为O(n).因而算法步骤(3)的总体时间复杂度为.
算法步骤(4): 假设类簇集GS中还剩余个未被合并的类簇,使用ALINK算法对其进行合并的时间复杂度为,这也是算法步骤(4)的总体时间复杂度.
综上所述,ACMOM算法的时间复杂度为.根据第五节中的实验结果,在实际算法执行过程中的值都要远远小于样本点个数n.因此,在高维数据中ACMOM算法的时间复杂度主要集中于k最近邻样本点的查询操作O(dn2-1/d)。
4.1空间复杂度分析
从上面的分析可以得出,ACMOM算法实际执行过程中需要存储如下一些结构:(1) 包含有n个样本点的k-d树结构,空间复杂度为;(2) 所有样本点的最近k邻居列表,空间复杂度为;(3) 所有样本点的MkNN连接集,空间复杂度为;(4) 最多n个相邻类簇列表,空间复杂度为;(5) 包含所有类簇的最相似类簇信息的最大堆结构,空间复杂度为.
综上所述,ACMOM算法的空间复杂度为,主要集中于存储所有样本点的最近k邻居列表以及与此相关的其他结构中。
4.2实验结果与分析
本节中,我们将从聚类有效性和算法运行效率两个方面详细比较ACMOM算法与其他两类合并聚类算法.对于经典合并聚类技术,我们选取满足单调递减特性的CLINK算法、SLINK算法、ALINK算法和WARD算法作为其代表方法.对任意形状的合并聚类技术,我们选取目前公认表现最好的CHAMELEON算法作为其代表方法.此外,我们还将具体分析算法参数k值的变化对于聚类有效性和算法运行效率的影响.
在算法实现方面,我们通过调用Matlab软件中的linkage等函数来使用CLINK算法、SLINK算法、ALINK算法和WARD算法.另外,我们还通过调用算法作者所提供的CLUTO软件包(C++语言)[33]来使用CHAMELEON算法.CHAMELEON算法的主要参数采用作者建议的-clmethod=graph、-sim=dist、-agglofrom=30 (其他参数采用软件默认设置).最后,我们的ACMOM算法采用C++语言编写实现.所有的实验程序都运行在一台Intel i7-2.8GHz包含有8G内存和安装有Windows 7操作系统的计算机上。
4.3有效性实验
4.3.1任意形状聚类分析
第一组实验中,我们考察ACMOM算法对于任意形状类簇的聚类能力。所采用的数据集是文献[16]中用于测试CHAMELEON算法的数据集DS1.1-1.4[33]。其中,数据集DS1.1-1.3各包含有8000个样本点,数据集DS1.4包含有10000个样本点.根据文献[16]的实验结果展示和分析,采用标准参数设定的CHAMELEON算法能够较好地聚类上述数据集,而CURE算法对于这几个数据集都出现了较大程度的错误划分.图3展示了原始数据集以及ACMOM算法的聚类结果,表明其对于任意形状类簇具有良好的聚类效果。本组实验中,我们设置ACMOM算法参数k = 28,图3中具体描述了展示所截取的类簇数目C.
另外,Linkage Metric算法的测试结果对于上述几个数据集都出现了明显的错误划分,这来自于其严格单调递减的理论特性。限于篇幅原因,我们省略了对其聚类结果的展示.
4.3.2聚类质量分析
第二组实验中,我们进一步使用DS2.1-2.4等真实数据集来测试比较ACMOM算法与其他几种合并聚类算法的聚类质量.上述数据集都来自于UCI Machine Learning Repository[34],它们中的样本点都事先贴有所属类别标签.表2对这些数据集的名称、应用领域、大小、维度和真实类别数目分别做了介绍和统计.作为衡量标准,我们选取NMI (Normalized Mutual Information)和purity两种常用尺度进行判断[35].
当算法给出聚类结果为而真实类簇集合为时, NMI衡量了这两组划分的信息一致性,具有如下定义.
其中I是互信息函数, H是熵函数.
上式中n是数据集中样本点的总数,并且和.另外, purity表示了算法输出类簇包含真实类簇最大比例的累积程度,具有如下定义.
NMI和purity的取值范围都是[0,1],它们的值越大则说明聚类效果越好.表3显示了几种合并聚类算法对于数
据集DS2.1-2.4的聚类结果.其中,我们选择算法的目标聚类数目为数据集包含的真实类簇数,即上式中M = L. 本组实验中,我们设置ACMOM算法的参数k = 22.
Table 2 Statistics of datasets DS2.1-2.4
表2 数据集DS2.1-2.4的统计信息
Datasets | Name | Application Domain | # of points | # of dimensions | # of real clusters |
DS2.1 | Iris | Biology | 150 | 4 | 3 |
DS2.2 | Breast Cancer Wisconsin | Medicine | 683 | 9 | 2 |
DS2.3 | Vehicle Silhouettes | Transportation | 846 | 18 | 4 |
DS2.4 | Image Segmentation | Image Processing | 2100 | 16 | 7 |
Table 3 NMI/purity score of agglomerative clustering algorithms
表3 测试不同合并聚类算法的NMI/purity值
Algorithm | Linkage Metric | CHAMELEON | ACMOM | |||
SLINK | CLINK | ALINK | WARD | |||
DS2.1 | 0.72/0.68 | 0.72/0.84 | 0.81/0.91 | 0.77/0.89 | 0.70/0.73 | 0.80/0.92 |
DS2.2 | 0.01/0.65 | 0.64/0.93 | 0.68/0.94 | 0.78/0.97 | 0.04/0.65 | 0.84/0.98 |
DS2.3 | 0.01/0.26 | 0.18/0.46 | 0.17/0.38 | 0.18/0.45 | 0.12/0.36 | 0.20/0.44 |
DS2.4 | 0.35/0.29 | 0.50/0.53 | 0.49/0.49 | 0.55/0.56 | 0.59/0.59 | 0.68/0.67 |
如表3中所示, ACMOM算法对于不同领域的真实数据集都表现出较好的聚类效果.特别对于数据集DS2.2和DS2.4, ACMOM算法相比其他几种合并聚类算法表现出明显优势.
4.3.3系统树图质量分析
系统树图作为合并聚类算法的输出结果,表达了具体聚类模型下样本点间的层次性相似关系.为了衡量系统树图是否真实反映了数据集样本点间的内在联系,相似矩阵P、共表矩阵Pc和共表相关系数CPCC(Cophenetic Correlation Coefficient)常被用于判断其质量[12,36].对于一个给定的数据集,相似矩阵P中的元素表示了样本点和间的欧氏距离.而共表矩阵Pc中的元素表示了系统树图中样本点和首次被合并至同一类簇时的节点高度.共表相关系数CPCC则用于衡量这两个矩阵之间的相关程度,具有如下定义。
其中,而和分别定义为
CPCC的取值范围为[-1,1],它的值越大则系统树图越能反映出数据集的真实状况.
第三组实验中,为了比较合并聚类算法所生成系统树图的质量,我们采用不同类簇数目和不同维度的球形数据集DS3.1-DS3.8[37]进行测试,并使用CPCC作为衡量标准.其中,数据集DS3.1-3.3包含类簇数量不断递增的2维高斯分布样本点;而数据集DS3.4-3.8则都来自于相同的高斯分布生成器,它们的样本点维度依次递增.这些数据集的二维或三维形状如图4所示,表4中描述了它们的详细信息.
我们选择将ACMOM算法与满足单调递减特性的Linkage Metric算法族进行比较.这些算法在理论上能够保证类簇间距离排序的严格保持,不易陷入局部最优的困境,因而对于球形类簇具有良好的聚类效果.此外,由CHAMELEON不能生成完整的系统树图结构,因而无法对其计算CPCC值.本组实验中,我们设置ACMOM算法的参数k = 22.具体的实验结果如表5所示.
Table 4 Statistics of datasets DS3.1-3.5
表4 数据集DS3.1-3.5的统计信息
Datasets | DS3.1 | DS3.2 | DS3.3 | DS3.4 | DS3.5 | DS3.6 | DS3.7 | DS3.8 |
# of points | 3000 | 5250 | 7500 | 2026 | 2701 | 4051 | 5401 | 6751 |
# of dimensions | 2 | 2 | 2 | 3 | 4 | 6 | 8 | 10 |
# of clusters | 20 | 35 | 50 | 10 | 10 | 10 | 10 | 10 |
Table 5 CPCC of dendrograms by agglomerative clustering algorithms
表5 测试不同合并聚类算法下系统树图的CPCC值
Algorithm | DS3.1 | DS3.2 | DS3.3 | DS3.4 | DS3.5 | DS3.6 | DS3.7 | DS3.8 |
SLINK | 0.61 | 0.58 | 0.52 | 0.79 | 0.86 | 0.91 | 0.92 | 0.88 |
CLINK | 0.72 | 0.72 | 0.67 | 0.79 | 0.90 | 0.84 | 0.92 | 0.87 |
ALINK | 0.74 | 0.70 | 0.66 | 0.83 | 0.92 | 0.92 | 0.94 | 0.91 |
WARD | 0.74 | 0.68 | 0.64 | 0.81 | 0.82 | 0.90 | 0.91 | 0.87 |
ACMOM | 0.74 | 0.70 | 0.68 | 0.83 | 0.92 | 0.92 | 0.93 | 0.91 |
从表5中可以看出, ACMOM算法的聚类结果一直保持有几乎最高的CPCC值.相比大部分经典合并聚类技术,它能更好地反映出样本点间的真实距离.因而说明ACMOM算法生成的系统树图对于保证合并聚类过程中类簇之间的距离递增顺序具有一定的作用。
网易云产品免费体验馆,无套路试用,零成本体验云计算价值。
本文来自网易实践者社区,经作者钱烽授权发布
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 13本热门书籍免费送!(Python、SpingBoot、Entity Framework、Ionic、MySQL、深度学习、小程序开发等)