聚类-birch(层次方法的平衡迭代规约和聚类)

birch简述

birch全名利用层次方法的平衡迭代规约和聚类。
birch只需要单遍扫描数据集就可以进行聚类,它最小化IO,天生来应对大数据。brich是通过聚类特征树(CF-tree/ClusterFeature-tree)实现的,单遍扫描数据集后建立一棵存放于内存中的CF-tree,可以看作是数据的多层压缩。
聚类特征
每一个CF是一个三元组,可以用(N,LS,SS)表示。其中N代表这个CF中拥有的样本点的数量;LS代表了这个CF中拥有的样本点各特征维度的和向量,SS代表了这个CF中拥有的样本点各特征维度的平方和。
CF有一个很好的性质,就是满足线性关系,也就是CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)。
一棵CF树,还需要几个重要参数:
B:内部节点平衡因子,每个内部节点的子节点最大个数
L:叶子节点平衡因子,每个叶子节点的子节点最大个数
T:簇直径阈值,每个簇直径最大阈值,超过后,簇分裂

聚类特征树构造

一个聚类特征树样例:
CF-tree

  1. 算法最初,扫描数据集,拿到第一个数据点,创建一个空的Leaf和MinCluster,MinCluster座位Leaf的一个孩子。
  2. 当后续点需要插入树中时,把这个点封装为一个MinCluster,把新到的数据点记为CF_new,从树的根节点开始,根据D2(欧式距离)来找到CF_new与那个节点最近,就把CF_new加入那个子树上面去。这是一个递归的过程。递归的终止点是要把CF_new加入到一个MinCluster中,如果加入之后MinCluster的直径没有超过T,则直接加入,否则CF_new要单独作为一个簇,成为MinCluster的兄弟结点。插入之后注意更新该节点及其所有祖先节点的CF值。
  3. 插入新节点后,可能有些节点的孩子数大于了B(或L),此时该节点要分裂对于Leaf,它现在有L+1个MinCluster,我们要新创建一个Leaf,使它作为原Leaf的兄弟结点,同时注意每新创建一个Leaf都要把它插入到双向链表中。L+1个MinCluster要分到这两个Leaf中,怎么分呢?找出这L+1个MinCluster中距离最远的两个Cluster(根据D2),剩下的Cluster看离哪个近就跟谁站在一起。分好后更新两个Leaf的CF值,其祖先节点的CF值没有变化,不需要更新。这可能导致祖先节点的递归分裂,因为Leaf分裂后恰好其父节点的孩子数超过了B。

代码描述

private ClusteringFeature buildCFTree() {
        NonLeafNode rootNode = null;
        LeafNode leafNode = null;
        Cluster cluster = null;

        for (
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值