09 聚类算法 - 层次聚类 - CF-Tree、BIRCH、CURE
转载:https://www.jianshu.com/p/6025344ceb45
0.4142018.12.09 22:16:08字数 1,767阅读 5,583
五、层次聚类概述
层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:
1、凝聚的层次聚类:AGNES算法 (AGglomerative NESting)==>采用自底向上的策略。最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定;聚类的合并过程反复进行直到所有的对象满足簇数目。
2、分裂的层次聚类:DIANA算法 (DIvisive ANALysis)==>采用自顶向下的策略。首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值);
AGNES和DIANA算法优缺点:
1、简单,理解容易。
2、合并点/分裂点选择不太容易。
3、合并/分类的操作不能进行撤销。
4、大数据集不太适合。
5、执行效率较低O(t*n2),t为迭代次数,n为样本点数。
AGNES算法中簇间距离:
1、最小距离(SL聚类)
两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法);
最终得到模型容易形成链式结构。
2、最大距离(CL聚类)
两个聚簇中最远的两个样本的距离(complete-linkage聚类法);
如果存在异常值,那么构建可能不太稳定。
3、平均距离(AL聚类)
两个聚簇中样本间两两距离的平均值(average-linkage聚类法);
两个聚簇中样本间两两距离的中值(median-linkage聚类法);
AGNES层次聚类 - 不同合并策略
建议使用word策略对样本进行分类。
六、层次聚类优化算法
1、CF-Tree:
CF-Tree(Cluster Feature Tree):每个节点是由三个聚类特征组成。这三个聚类特征构成一个三元组,用(N, LS, SS)来表示。
其中:
N 表示这个CF中包含的样本数量;
LS 表示这个CF中包含的样本点的向量和;
SS 表示这个CF中包含的样本点各个特征的平方和。
CF-Tree中父节点的某个CF值等于其指向的所有子节点CF值的总和。
CF-Tree 的几个关键超参数:
B: 每个内部节点最大的CF个数。
L: 每个叶节点最大的CF个数。
T: 新样本若被分到某一CF中,其到该CF中心的距离最大值。
CF-Tree构建步骤:
1、初始状态,CF树是空的,无任何样本。读入第一个样本x(a,b),生成一个CF三元组,此处N=1,LS=(a,b),SS=a2+b2,我们令其为CF1。
2、读入第二个样本,若到CF1的距离小于T,那么这个样本也归入CF1,更新三元组数据;如果大于T,则新划分出一个CF,这个样本作为CF2当中的首个样本,生成一个CF三元组。
注意:此时都是在节点内进行CF的建立,而非产生新的节点。
3、分裂:如果新数据进入该节点后,距离所有CF中心的距离都大于T,且Cf个数在生成新CF后大于B,则该节点需要进行划分。
4、找到该分支内各个CF之间的距离最大的两个CF,分别作为两个新叶子结点的CF,再计算剩余CF到这两个CF之间的距离,距离近的分到一个节点当中。
5、如果节点分裂过后叶子节点个数超过L,则该节点要进行分裂,分裂方式和上一步相同。
6、生成CF和分裂过程直至所有样本均进入CF树后停止。
CF-Tree 详解
2、BIRCH算法
BIRCH算法 (平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树(CF-Tree)来求聚类,聚类特征树其实是一个具有两个参数分枝因子(B、L)和类直径(T)的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
对应生成的结果就是一个簇(聚类特征 - CF);
BIRCH算法的过程就是建立CF-Tree的过程。
优缺点:
1、适合大规模数据集,线性效率;
层次聚类算法的复杂度为 OT(n2);
优化后的BIRCH算法构建聚类特征树(CF-Tree)的时间复杂度为O(n) ;
2、只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数;
3、CURE算法
CURE算法(使用代表点的聚类法):是一种凝聚算法(AGNES)。该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、分布较好的点作为此类的代表点,并将这些代表点(一般10个)乘以一个适当的收缩因子(一般设置0.2~0.7之间),使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响。
代表点 不是原来的点,而是那些需要重新计算的点。
分析CURE算法
参考论文:https://wenku.baidu.com/view/32b7390cbe1e650e53ea9904.html
优点:
能够处理非球形分布的应用场景
采用随机抽样和分区的方式可以提高算法的执行效率