[论文]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),且有准确率有保证。
论文中主要的思想是,用一个代表一群样本,然后对代表进行类标识,代表中的样本就属于该类了。
该方法的优点有:
- 只需要样本的聚类结果,不需要获取样本的属性,比基于原型的方法,节省了一定的步骤。
- 对比 基于原型的算法,不需要先验知识(分多少个类),而是一个临界值,同时实验证明这个临界值可以在不同数据集中使用。
- 时间复杂度 趋向于N (样本数量)。
- CA-Tree 内包括一个限制最终聚类数的方法。
下面是一下参数的论文中的描述,尽量用相同的符号,可以先跳过,直接看我写的:



下面是算法的描述:
对于有N个样本的数据集:X = {x1, x2, . . . ,xN}。
对其分别进行H 次的聚类,h-th次的聚类结果记为:Ph= {C1, C2, . . . , Ck},k是该h-th 聚类算法类的个数,可以知道每个是不同的,这里下标就不标了,这里的C 就是类标号了。
那么对于一个样本xi,给他一个 1xH 的 λi 向量,表示在h-th 聚类算法中他属于哪个类,eg: H=2, λi =<4,10>,表示第一聚类算法中其属于第4个类,第二聚类算法中其属于第10个。
样本之间的距离使用海明距离(Hamming),即两向量中不同的位标记位1,同的标记位0,之和,记为:d(λi ,λj )。
上面的基础介绍,竟然知道了两个样本之间的距离那么可以算一下相似度矩阵了,注意的是该相似度矩阵只是作者提出的计算方法,在算法中不需要用到:
相似度矩阵:
对于一个聚类算法结果,计算一个相似度矩阵,这个是原始的相似度矩阵,最终结果的相似度矩阵会有不同,对于同属于一类的标记为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的更多相关文章
- [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding
[论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...
- 论文笔记:Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation
Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation2019-03-18 14:4 ...
- 论文笔记之: Hierarchical Convolutional Features for Visual Tracking
Hierarchical Convolutional Features for Visual Tracking ICCV 2015 摘要:跟卢湖川的那个文章一样,本文也是利用深度学习各个 layer ...
- 论文阅读笔记七: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 ...
- 论文笔记系列-Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation
Pytorch实现代码:https://github.com/MenghaoGuo/AutoDeeplab 创新点 cell-level and network-level search 以往的NAS ...
- 论文阅读之: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 ...
- [论文]Coordination of Cluster Ensembles via Exact Methods
作者:Ioannis T. Christou, Member, IEEE IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, ...
- 【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 ...
- 【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 ...
随机推荐
- forEach 以及 IE兼容
语法 array.forEach(function(currentValue, index, arr), thisValue) 参数 参数 描述 function(currentValue, in ...
- Codeforces Round #464 (Div. 2) C. Convenient For Everybody
C. Convenient For Everybody time limit per test2 seconds memory limit per test256 megabytes Problem ...
- L1-049 天梯赛座位分配 (20 分)
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
- Leetcode 106. 从中序与后序遍历序列构造二叉树
题目链接 https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/descri ...
- oracle 11g 版本自带移除,省时省力
---oracle删除 app\Administrator\product\11.2.0\dbhome_1\deinstall.bat 指定要取消配置的所有单实例监听程序 [LISTENER]: En ...
- Redis实现之字符串
简单动态字符串 Redis中的字符串并不是传统的C语言字符串(即字符数组,以下简称C字符串),而是自己构建了一种简单动态字符串(simple dynamic string,SDS),并将SDS作为Re ...
- Spring进阶-怎样集成定时调度Quartz
在一些项目里面比如进销存系统,对一些过期图片的定时清理或者库存不足发出预警提示,就需要用到定时调度技术. 每当经过一段时间,程序会自动执行,就是定时调度.如果要使用定时调度,则必须保证程序始终运行才行 ...
- IOS开发---菜鸟学习之路--(十)-实现新闻详细信息浏览页面
前面已经将了上下拉刷新 实现了上下拉刷新后我们的第一级界面就做好,接下来我们就需要实现 新闻详细信息浏览了 我个人认为一般实现新闻详细页面的方法有两种(主要是数据源的不同导致了方法的不同) 第一种是本 ...
- BugKu 杂项-这么多数据包
前边的都是些无关紧要,只要有点网络的基础我想应该都能懂,往下看,一直到NO104,这是在干什么? 源ip138一直向目标ip159发送syn握手包,想要建立连接,其实就是端口扫描,原理就是,想和你某个 ...
- PostgreSQL 配置内存参数
对于任何数据库软件,内存配置项都是很重要的配置项.在 PostgreSQL 主要有以下几个内存配置参数. shared_buffers: integer 类型,设置数据库服务器将使用的共享内存缓冲区数 ...