zoukankan      html  css  js  c++  java
  • [论文]CA-Tree: A Hierarchical Structure for Efficient and Scalable Coassociation-Based Cluster Ensembles

    作者:Tsaipei Wang, Member, IEEE

    发表:IEEE TRANSACTIONS ON SYSTEMS, MAN, AND CYBERNETICS—PART B: CYBERNETICS, VOL. 41, NO. 3, JUNE 2011

      这是一遍关于聚类集成的论文,作者提出了一种聚类集成方法,命名为:CA-Tree,,基于层次结构(dendogram),这个结构的大致与hierarchical cluster 相同,当然是比hc 效果好,同时该方法适合用于数据样本比较大的时候,在数据样本量大时也能保证整个process 时间上的高效,接近于O(N),且有准确率有保证。

      论文中主要的思想是,用一个代表一群样本,然后对代表进行类标识,代表中的样本就属于该类了。

      该方法的优点有:

    1. 只需要样本的聚类结果,不需要获取样本的属性,比基于原型的方法,节省了一定的步骤。
    2. 对比 基于原型的算法,不需要先验知识(分多少个类),而是一个临界值,同时实验证明这个临界值可以在不同数据集中使用。
    3. 时间复杂度 趋向于N (样本数量)。
    4. CA-Tree 内包括一个限制最终聚类数的方法。

     下面是一下参数的论文中的描述,尽量用相同的符号,可以先跳过,直接看我写的:

    下面是算法的描述:

      对于有N个样本的数据集:X = {x1, x2, . . . ,xN}。

      对其分别进行H 次的聚类,h-th次的聚类结果记为:Ph= {C1, C2, . . . , Ck},k是该h-th 聚类算法类的个数,可以知道每个是不同的,这里下标就不标了,这里的C 就是类标号了。

      那么对于一个样本xi,给他一个 1xH 的 λ向量,表示在h-th 聚类算法中他属于哪个类,eg: H=2, λ=<4,10>,表示第一聚类算法中其属于第4个类,第二聚类算法中其属于第10个。

      样本之间的距离使用海明距离(Hamming),即两向量中不同的位标记位1,同的标记位0,之和,记为:d(λ)。

      上面的基础介绍,竟然知道了两个样本之间的距离那么可以算一下相似度矩阵了,注意的是该相似度矩阵只是作者提出的计算方法,在算法中不需要用到:

    相似度矩阵:

      对于一个聚类算法结果,计算一个相似度矩阵,这个是原始的相似度矩阵,最终结果的相似度矩阵会有不同,对于同属于一类的标记为1,不同为0:

      然后对于H 个相似度矩阵求个平均便是最终的相似度矩阵:

       这个公式与下面等价:

     构建CA-TREE:

      回顾上面们说的,CA-TREE的思想是 用一个代表一群,这个一个怎么来下面说,来一个例子,下图是100个样本,真实分类如下:

      

      在初始介绍的时候,我们知道了每个样本都有一个label vector λi,一个聚类算法中的类属,那么我们我们对上面这个初始数据k-means 下,k=3,4,5,6(上又),这就有4个聚类算法的结果了,这样100个样本的λ,可以知道这100个λ 里面有一些是完全相同的, 这样我们将完全相同的λ 对应的样本划分为一组,以论文的例子来这样一共划分了9组,表格如下,第一行数组号,第二行是该组的λ,第三行可以忽略。

       在图上的反映如下:

     

       通过简单的划分,便将100个样本划分成9个组,每组的用λ 作为标识,这样复杂度就降下来了,当然还有后面的。这里我们获得了9个组,接着就是构建树,我们有9个λ ,然后是构建树,论文中有算法流程,但是阅读起来很费经,我做一个理解转述:

     

     

      看这个表中的label vactor,第一行,一共有3个不同的(1 2 3),那么节点便有3个子节点,每个子节点分配了符合的index,即1分支获得:1-4,2分支获得:5-6,3分子获得8-9;然后进入分支自己来,然后看第二行,1-4中的第二行的不同有2 3 ,所以该点分成两个分支,其他分支一样,直到4行聚类结果都用上了,生成一个5层的树,最底层的叶子只有一个index,如下右边:

     

       这个树还需要"变形"一下,不过可以先描述一下的,树中的节点包括其分支中的所有叶子的index,例如第一行的根节点包括1-9 index,第二行的左边节点包括1-4 index,我们用z 来表示一个节点,这个有可能是分支节点,也有可能是叶子,那么X(z) 表示z有的样本,而G(z) 表示z有的全部label vector,G(z)需要搞明白,z 为叶子时候,那么G(z) 就是该index 的label vector,如果z 为根节点,那么G(z) 则为 1-9 index 的label vector。

      搞清楚了G(z)的含义后,我们定义节点的 size,这个size 计算如下,首先我们定义一个label vector (λ) 与G(z) (一组λ)  的距离:

     

       知道了一个label vector 与一组label vector 的距离计算,我们每个节点z 都有一组label vector G(z),那么每个节点需要选出一个label vector 作为其代表,方法就是遍历一下,选取是的上面这个最小的那个:

       节点z 有了代表的label vector,那么节点的size 就选用,其实就是最小的那个距离:

     

      既然有了节点的size,那么这个树可以改成如下,使用节点的size 作为层的选择,其实就是上面那颗树的中右分支拉下来了:

      然而上面的构建方法是全遍历,时间复杂度随着节点高度上升,时间变长(节点的label vector 多了,遍历时间长了),而且可能出现多个多个满足的代表λ,例如 index 7,8,选7的label vector 作为代表那么 与 index 9 的结合的size 为2,选择8作代表那么size 为1 ,所以需要改进。

    改进方法

      上面的方法主要原因是上层节点确认代表的label vector 时候遍历时间长,可以发现其实不需要全遍历,从这方面入手,减少需要遍历的label vector,我们记Z'(z)为z 节点的孩子及孙子节点,当然不是全部的子孙节点都包括,不然就不能提速了,这个怎么选,后面会描述,同时注意到d(,)公式使用的是海明距离,那么其是有上界 H的,那么上面的公式一个 label vector 与节点的距离可以修改为:

      {} 中左边其实就是距离的上界,右边的是从Z'(z)  中选择节点的代表计算其距离加上该节点的size,可以知道只要限制了Z'(z) 的个数,那么这个计算时间上便有上界,此时z 节点的代表选择方法如下,其中G'(z)为Z'(z)的中全部节点的代表label vector:

     ,

      此时的z 节点的size 便如下:

      可以看出只要限制了 Z'(z)的个数,便能够提高效率,下 Z'(z) 的确定方法:将z 节点的全部孩子节点(不包括孙子)放入篮中,然后对篮子中的最大的节点取出,放入其的孩子节点,循环这个步骤直到篮中的全部节点都为叶子,或者篮中的节点数超出阀值。

      例子说明:假如我们求 z为1 的时候,我们设阀值=2,那么Z'(z)  包括的节点有 2,3,符合要求了。假如我们设阀值为3,那么初始时候包括的节点为2,3,然后2会被取出来,放入其孩子节点 4,5,此时便有 4,5,3。 论文中选择的阀值为ndes=32.

      可以看出这样的改进是从下往上的,上层计算基于下次的结果,同时Z'(z)  会有上界,因为其符合:

    切割:

      通过上面的方法,我们有效地构建了这颗CA-tree,到确定类划分,跟hc 的方法类似,上面我们提到需要一个临界值来划分,如何这样我们选取后,如下图的虚线,那么虚线下的每一个分支便作为一类,如图的划分类数变为5,通过调整这个临界值,可以划分成不同的类数,临界值记为τ,切割方法记为Z(τ),类个数记为Nz(τ)

      

      更新的相似度矩阵计算方法:

      下图是临界值不同选择的结果,上面的对应结果为b 图,当临界为2时候,便与真实结果一样,abcd 对应的类数为 6543

    限制:

      注意到,例如上面的a图,其中的组的sample 占了很多,所以对于选择临界值选择后,进行进一步的限制,减少类数,Nz(τ) 成一个系数γ,变行,例如下图,我们选择为虚线切割,那么会分成5个类,如果γ=0.8,那么 最终的类数=4,加入节点4的sample 数最少,那么其变被排除在外,另外4个分支各成为1类。

     

      好了,现在的问题是怎么确定4节点对应的样本(们)的类标号,我们知道节点4的label vector,按论文的说法是:对于确定的分支节点(上图有箭头除了4的4个节点),即他们的祖先们,构建一棵树,然后确定4的类标号时候,从这颗树的根节点触发,迭代寻找其孩子节点与4 的了label vector 最相似的节点,迭代到这棵树的叶子,便用这叶子节点的类数,上图中的4类标号用的是5节点的类标号。

      我感觉或许会有多个的情况,但不深究这个了。

      到此ca-tree聚类集成算法描述完毕,实验结果看论文吧,论文中有时间分析。

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/Azhu/p/4173023.html
Copyright © 2011-2022 走看看