作者: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聚类集成算法描述完毕,实验结果看论文吧,论文中有时间分析。

[论文]CA-Tree: A Hierarchical Structure for Efficient and Scalable Coassociation-Based Cluster Ensembles的更多相关文章

  1. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

  2. 论文笔记:Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation

    Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation2019-03-18 14:4 ...

  3. 论文笔记之: Hierarchical Convolutional Features for Visual Tracking

    Hierarchical Convolutional Features for Visual Tracking  ICCV 2015 摘要:跟卢湖川的那个文章一样,本文也是利用深度学习各个 layer ...

  4. 论文阅读笔记七:Structure Inference Network:Object Detection Using Scene-Level Context and Instance-Level Relationships(CVPR2018)

    结构推理网络:基于场景级与实例级目标检测 原文链接:https://arxiv.org/abs/1807.00119 代码链接:https://github.com/choasup/SIN Yong ...

  5. 论文笔记系列-Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation

    Pytorch实现代码:https://github.com/MenghaoGuo/AutoDeeplab 创新点 cell-level and network-level search 以往的NAS ...

  6. 论文阅读之:Deep Meta Learning for Real-Time Visual Tracking based on Target-Specific Feature Space

    Deep Meta Learning for Real-Time Visual Tracking based on Target-Specific Feature Space  2018-01-04  ...

  7. [论文]Coordination of Cluster Ensembles via Exact Methods

    作者:Ioannis T. Christou, Member, IEEE IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, ...

  8. 【HEVC帧间预测论文】P1.6 A Fast HEVC Inter CU Selection Method Based on Pyramid Motion Divergence

    A Fast HEVC Inter CU Selection Method Based on Pyramid Motion Divergence <HEVC标准介绍.HEVC帧间预测论文笔记&g ...

  9. 【HEVC帧间预测论文】P1.5 Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule

    Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule <HEVC标准介绍.HEVC帧间预测论文笔记&g ...

随机推荐

  1. 【PHP】Thinkphp 七牛云API对接

    访问一个网站,图片的流量占的比例是非常高的!在你的服务器硬盘上,图片占的容量也是非常高的. 如果要搞一个图片非常多,用户量又很庞大的网站,那么,得花多少钱烧在服务器上? 这种时候,当然要用第三方图片存 ...

  2. php与js的crc32(支持中文)

    代码: <?php function myCrc32($string, $crc = 0) { $table = "00000000 77073096 EE0E612C 990951B ...

  3. Linux 用户行为日志记录

    工作中我们常常遇到,有的员工不安于被分配的权限,老是想sudo echo "ziji" /usr/bin/visudo NOPASSWD:ALL来进行提权,造成误删了数据库某条重要 ...

  4. 子窗体与父窗体调用对方js方法

    有时候为了减少一个页面内的代码量,会将部分内容放到子窗体中,如后台管理中用iframe来进行管理 <div> <iframe id="dviframe" src= ...

  5. datatime来计算代码段运行时长

    小知识点:编程中一般都是先乘后除,这样结果更为精确 先定义 DataTime startTime = DataTime.Now; 中间是运行代码 最后TimeSpan ts = DataTime.No ...

  6. 批处理文件执行cmd命令

    @echo offstart "wumin" "C:\Windows\System32\cmd.exe" osk taskkill /f /im cmd.exe ...

  7. P3116 [USACO15JAN]会议时间Meeting Time

    P3116 [USACO15JAN]会议时间Meeting Time 题目描述 Bessie and her sister Elsie want to travel from the barn to ...

  8. 创建 PSO

    TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 浏览 Windows Server 技术 Active ...

  9. vue知识

    https://juejin.im/post/5af16a2cf265da0b8636353b

  10. css的float和position属性

    (1)float的简单用法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...