做者:钱烽html
基于定义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算法首先找到距离其最近的非孤立点邻居,而后将其合并至该邻居所在的类簇中.spa
(4) 返回合并聚类结果(第1六、17行): 上述算法流程执行完毕后,若是全部的样本点都已合并至类簇集合GS中的惟一类簇,咱们直接将其做为系统树图的根节点返回给用户.不然,咱们使用ALINK算法对集合GS中的剩余类簇作进一步合并操做并返回最终的系统树图结果.为了保证一致性,咱们使用类簇间的样本间距均值来记录所返回系统树图中的节点高度。操作系统
本节中,咱们将更加具体地描述ACMOM算法的实现细节,从而详细分析其时间复杂度和空间复杂度.4时间复杂度分析.net
准备工做: 为了计算类簇间类似度以及使用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).3d
算法步骤(1): 根据文献[28]的描述,在已知k最近邻列表的前提下对n个样本点进行LOF检测的时间复杂度为O(n).而将数据集中的全部样本点加入基本类簇集合GS或孤立点集合OS的时间复杂度也是O(n).所以,算法步骤(1)的整体时间复杂度是O(n).orm
算法步骤(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)。
从上面的分析能够得出,ACMOM算法实际执行过程当中须要存储以下一些结构:(1) 包含有n个样本点的k-d树结构,空间复杂度为;(2) 全部样本点的最近k邻居列表,空间复杂度为
;(3) 全部样本点的MkNN链接集,空间复杂度为
;(4) 最多n个相邻类簇列表,空间复杂度为
;(5) 包含全部类簇的最类似类簇信息的最大堆结构,空间复杂度为
.
综上所述,ACMOM算法的空间复杂度为,主要集中于存储全部样本点的最近k邻居列表以及与此相关的其余结构中。
本节中,咱们将从聚类有效性和算法运行效率两个方面详细比较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.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算法生成的系统树图对于保证合并聚类过程当中类簇之间的距离递增顺序具备必定的做用。
网易云产品免费体验馆,无套路试用,零成本体验云计算价值。
本文来自网易实践者社区,经做者钱烽受权发布
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试
【推荐】 八月暑期福利,10本Python热门书籍免费送!
【推荐】 数据迁移的应用场景与解决方案Hamal