BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)详解 第三十次写博客,本人数学基础不是太好,如果有幸能得到读者指正 这一篇作为可伸缩聚类(Scalable Clustering)算法的第三篇,主要是对BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies 图8 分裂根节点产生非叶节点 BIRCH算法 BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)算法主要分为以下四步 ---- 参考资料 【1】《机器学习》周志华 【2】文中CF-Tree图片来自BIRCH:使用聚类特征树(CF-树)的多阶段聚类算法 【3】《Birch: An efficient data clustering
这里我们再来看看另外一种常见的聚类算法BIRCH。BIRCH算法比较适合于数据量大,类别数K也比较多的情况。 BIRCH算法 上面讲了半天的CF Tree,终于我们可以步入正题BIRCH算法,其实将所有的训练集样本建立了CF Tree,一个基本的BIRCH算法就完成了,对应的输出就是若干个CF节点,每个节点里的样本点就是一个聚类的簇 当然,真实的BIRCH算法除了建立CF Tree来聚类,其实还有一些可选的算法步骤的,现在我们就来看看 BIRCH算法的流程。 BIRCH算法小结 BIRCH算法可以不用输入类别数K值,这点和K-Means,Mini Batch K-Means不同。 最后总结下BIRCH算法的优缺点: BIRCH算法的主要优点有: 1) 节约内存,所有的样本都在磁盘上,CF Tree仅仅存了CF节点和对应的指针。
2核2G云服务器 每月9.33元起,个人开发者专属3年机 低至2.3折
章节目录 BIRCH概述 聚类特征CF与聚类特征树CF Tree 聚类特征树CF Tree的生成 BIRCH算法 BIRCH算法小结 01 BIRCH概述 BIRCH的全称是利用层次方法的平衡迭代规约和聚类 04 BIRCH算法 上面讲了半天的CF Tree,终于我们可以步入正题BIRCH算法,其实将所有的训练集样本建立了CF Tree,一个基本的BIRCH算法就完成了,对应的输出就是若干个CF节点,每个节点里的样本点就是一个聚类的簇 也就是说BIRCH算法的主要过程,就是建立CF Tree的过程。 当然,真实的BIRCH算法除了建立CF Tree来聚类,其实还有一些可选的算法步骤的,现在我们就来看看 BIRCH算法的流程。 05 BIRCH算法小结 BIRCH算法可以不用输入类别数K值,这点和K-Means,Mini Batch K-Means不同。 最后总结下BIRCH算法的优缺点: BIRCH算法的主要优点有: 1) 节约内存,所有的样本都在磁盘上,CF Tree仅仅存了CF节点和对应的指针。
BIRCH算法全称如下 Balanced Iterative Reducing and Clustering Using Hierarchies 属于树状结构的层次聚类算法的一种,其树状结构的构建是自上而下的 对于BIRCH算法而言,主要的步骤就是构建CF tree, 树状结构构建好之后,后续还可以有些可选步骤,常见的可选步骤如下 1. 去除异常的CF点,通常是包含样本较少的CF 2. 利用CF节点的质心,对样本点进行聚类 在scikit-learn中,使用BIRCH聚类的代码如下 >>> from sklearn.cluster import Birch >>> X = [[0, 1 ], [0.3, 1], [-0.3, 1], [0, -1], [0.3, -1], [-0.3, -1]] >>> brc = Birch(n_clusters=None) >>> brc.fit( X) Birch(n_clusters=None) >>> brc.predict(X) array([0, 0, 0, 1, 1, 1]) BIRCH算法的优点是节约内存,聚类速度快,可以不用指定聚类的类别数目
在BIRCH聚类算法原理中,我们对BIRCH聚类算法的原理做了总结,本文就对scikit-learn中BIRCH算法的使用做一个总结。 1. scikit-learn之BIRCH类 在scikit-learn中,BIRCH类实现了原理篇里讲到的基于特征树CF Tree的聚类。 可以说BIRCH的调参就是调试B,L和T。 BIRCH类参数 在scikit-learn中,BIRCH类的重要参数不多,下面一并讲解。 BIRCH运用实例 这里我们用一个例子来学习BIRCH算法。
这里再来看看另外一种常见的聚类算法BIRCH。BIRCH算法比较适合于数据量大,类别数K也比较多的情况。它运行速度很快,只需要单遍扫描数据集就能进行聚类。 BIRCH只需要单遍扫描数据集就能进行聚类,那它是怎么做到的呢? BIRCH算法 将所有的训练集样本建立了CF Tree,一个基本的BIRCH算法就完成了,对应的输出就是若干个CF节点,每个节点里的样本点就是一个聚类的簇。 也就是说BIRCH算法的主要过程,就是建立CF Tree的过程。 当然,真实的BIRCH算法除了建立CF Tree来聚类,其实还有一些可选的算法步骤的,现在我们就来看看 BIRCH算法的流程。 BIRCH算法总结 BIRCH算法可以不用输入类别数K值,这与K-Means,Mini Batch K-Means不同。
image.png 模型构建 #创建不同的参数(簇直径)Birch层次聚类 birch_models = [ Birch(threshold=1.7, n_clusters=100), , info) in enumerate(zip(birch_models, final_step)): t = time() birch_model.fit(X) time_ = time() - t # 获取模型结果(label和中心点) labels = birch_model.labels_ centroids = birch_model.subcluster_centers 并不需要存储原始数据信息,内存开销上更优; (3)BIRCH算法只需要遍历一遍原始数据,而Agglomerative算法在每次迭代都需要遍历一遍数据,所以BIRCH在性能也优于Agglomerative ; (4)支持对流数据的聚类,BIRCH一开始并不需要所有的数据; 小结 本章主要介绍了聚类中的其他聚类算法的思想—层次聚类,着重介绍了算法—Agglomerative算法,BIRCH算法。
第一部分:字符串 1 检测字符串长度 x = "The birch canoe slid on the smooth planks." str_length(x) [1] "The birch canoe slid on the smooth planks." length(x) [1] 1 2 字符串拆分 str_split(x," ") [[1]] "The" "birch" "canoe x2 = str_split(x," ")[[1]];x2 [1]"The" "birch" "canoe" "slid" "on" "the" "smooth" "planks." 3 按位置提取字符串 str_sub(x,5,9) [1]"birch" str_sub(x,6,9) [1]"irch" 4 字符检测 str_detect(x2,"h") [ " "planks." 6 字符删除 x [1]"The birch canoe slid on the smooth planks."
Sklearn包中调用方法如下: from sklearn.cluster import Birch X = [[1],[2],[3],[4],[3],[2]] clf = Birch(n_clusters Birch聚类算法称为平衡迭代归约及聚类算法,它是一种常用的层次聚类算法。 在Sklearn机器学习包中,调用cluster聚类子库的Birch()函数即可进行Birch聚类运算,该算法要求输入聚类类簇数。 Birch类构造方法如下: sklearn.cluster.Birch(branching_factor=50 , compute_labels=True , copy=True , n_clusters 该Birch算法很好的将数据集划分为三部分。
BIRCH算法的核心思想是:通过对数据集进行分级聚类,逐步减小数据规模,最终得到簇结构。 with and without the final clustering step # and plot. birch_models = [ Birch(threshold=1.7, n_clusters clustering"] for ind, (birch_model, info) in enumerate(zip(birch_models, final_step)): t = time () birch_model.fit(X) print("BIRCH %s as the final step took %0.2f seconds" % (info, (time() - t))) # Plot result labels = birch_model.labels_ centroids = birch_model.subcluster_centers
str_sub(x,5,9) #取x字符串第五到第九位[1] "birch"4)str_detect() 查找字节x2 = str_split(x," ")[[1]];x2[1] "The" " birch" "canoe" "slid" [5] "on" "the" "smooth" "planks." "smAAth" "planks."6) str_remove() / str_remove_all () 字符删除> x[1] "The birch canoe slid on the smooth "> str_remove(x,"o") #只删一个字符[1] "The birch cane slid on the smooth planks. "> str_remove_all(x,"o")[1] "The birch cane slid n the smth planks."
基本用法 查看长度 x <- "The birch canoe slid on the smooth planks." length(x) str_length(x) > length(x) [1] x <- "The birch canoe slid on the smooth planks." str_split(x," ") x2 = str_split(x," ")[[1]] # 此时x2 x <- "The birch canoe slid on the smooth planks." str_sub(x,5,9) 大小写转换 upper 大写,lower 大写,title 首字母大写 > x <- str_subset(x2,"h") > x [1] "The" "birch" "the" "smooth" ps:匹配和检测支持正则: 字符计数 计算字符串内指定字符出现次数 str_replace(x2,"o","A") str_replace_all(x2,"o","A") > str_replace(x2,"o","A") [1] "The" "birch"
一、字符串 library(stringr) x <- "The birch canoe slid on the smooth planks. "; x ## [1] "The birch canoe slid on the smooth planks." 1.检测字符串长度:str_length(x) str_length(x)#从左到右,所有字符数 2.字符串拆分:str_split(x," ", simplify = T) str_split(x," ")#以空格分割,结果返回为一个列表 ## [[1]] ## [1] "The" "birch x2 = str_split(x," ")[[1]];x2#不想返回列表就取[[1]] ## [1] "The" "birch" "canoe" "slid" "on" str_replace(x2,"o","A")#一个字符中出现两次只替换第一次出现 ## [1] "The" "birch" "canAe" "slid" "An" ##
average", affinity="cityblock", n_clusters=params['n_clusters'],connectivity=connectivity) birch =cluster.Birch(n_clusters=params['n_clusters']) gmm=mixture.GaussianMixture( n_components SpectralClustering', spectral),('Ward', ward),('AgglomerativeClustering', average_linkage),('DBSCAN',dbscan),('Birch ',birch),('GaussianMixture',gmm)) for name, algorithm in clustering_algorithms: t0=time.time plot_num+=1 plt.show() 算法:聚类算法比较是包括MiniBatchKMeans、AP聚类、MeanShift、谱聚类、Ward聚类、层次聚类、DBSCAN聚类、Birch
基于自底向上算法有凝聚算法、BIRCH算法、CURE算法、变色龙算法等。 另外,Agglomerative性能较低,并且因为聚类层次信息需要存储在内存中,内存消耗大,不适用于大量级的数据聚类,下面介绍一种针对大数据量级的聚类算法BIRCH。 BIRCH算法 BIRCH算法的全称是Balanced Iterative Reducing and Clustering using Hierarchies,它使用聚类特征来表示一个簇,使用聚类特征树 ; BIRCH算法只需要遍历一遍原始数据,而Agglomerative算法在每次迭代都需要遍历一遍数据,所以BIRCH在性能也优于Agglomerative; 支持对流数据的聚类,BIRCH一开始并不需要所有的数据 质心,代表这个簇的中心: 簇半径,簇中所有点到质心的平均距离: 簇直径,簇中所有数据点之间的平均距离; BIRCH算法的核心是构建CF-树(Clustering Feature Tree),而CF
5 birch yellow maple red birch yellow maple yellow maple green 4 3 oak yellow oak yellow oak
图片 ② 层次聚类(BIRCH) 算法 BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)翻译为中文就是『利用层次方法的平衡迭代规约和聚类 简单来说,BIRCH 算法利用了一个树结构来帮助我们快速的聚类,这个特殊的树结构,就是我们后面要详细介绍的聚类特征树(CF-tree)。 图片 ③ 应用 BIRCH 聚类 我们再使用 BIRCH 进行聚类,代码如下: n = range(2,10) for x in n: model = Birch(n_clusters=x, threshold =0.17) X = df_scaledI[ "annual income", "spending_score"]] model.fit(X) 与 K-Means 聚类不同,BIRCH 聚类没有失真分数 图片 图片 BIRCH 的计算也给出了簇数等于5这样的一个结论。我们同样对数据进行分布分析绘图,不同的用户簇的数据分布如下(依旧可以比较清晰看到不同用户群的分布差异)。
输入样例: 29 Red Alder Ash Aspen Basswood Ash Beech Yellow Birch Ash Cherry Cottonwood Ash Cypress Red Elm 6.8966% Sassafras 3.4483% Soft Maple 3.4483% Sycamore 3.4483% White Oak 10.3448% Willow 3.4483% Yellow Birch
BIRCH算法是1996年由Tian Zhang提出来的,参考文献1。 BIRCH算法特点: BIRCH试图利用可用的资源来生成最好的聚类结果,给定有限的主存,一个重要的考虑是最小化I/O时间。 如果簇不是球形的,BIRCH不能很好的工作,因为它用了半径或直径的概念来控制聚类的边界。 BIRCH算法中引入了两个概念:聚类特征和聚类特征树,以下分别介绍。 ######2.算法流程 BIRCH算法流程如下图所示: ? 算法的发明者于1996年完成了BIRCH算法的实现,是用c++语言实现的,已在solaris下编译通过。
cluster.AffinityPropagation 均值漂移 cluster.MeanShift 层次聚类 cluster.AgglomerativeClustering DBSCAN cluster.DBSCAN BIRCH cluster.Birch 谱聚类 cluster.SpectralClustering 4.降维任务 降维方法 加载模块 主成分分析 decomposition.PCA 截断SVD和LSA decomposition.TruncatedSVD
扫码关注腾讯云开发者
领取腾讯云代金券