毫升 | BIRCH 聚类
像 K-means 聚类这样的聚类算法不能非常有效地执行聚类,并且很难用有限的资源(如内存或较慢的 CPU)处理大型数据集。因此,随着数据集大小的增加,常规聚类算法在运行时间和质量方面不能很好地扩展。这就是 BIRCH 聚类的用武之地。
Balanced Iterative Reducing and Clustering using Hierarchies (BIRCH)是一种聚类算法,它可以通过首先生成保留尽可能多信息的大型数据集的小而紧凑的摘要来对大型数据集进行聚类。然后对这个较小的摘要进行聚类,而不是对较大的数据集进行聚类。
BIRCH 通常用于通过创建其他聚类算法现在可以使用的数据集摘要来补充其他聚类算法。然而,BIRCH 有一个主要缺点——它只能处理度量属性。度量属性是其值可以在欧几里得空间中表示的任何属性,即不应存在分类属性。
在我们实现 BIRCH 之前,我们必须了解两个重要的术语: Clustering Feature (CF) 和 CF – Tree
聚类特征(CF):
BIRCH 将大型数据集汇总为更小、更密集的区域,称为聚类特征 (CF) 条目。形式上,聚类特征条目被定义为有序三元组, (N,LS,SS)其中“N”是集群中数据点的数量,“LS”是数据点的线性和,“SS”是聚类中数据点的平方和。一个 CF 条目可以由其他 CF 条目组成。
CF 树:
CF 树是迄今为止我们一直在谈论的实际紧凑表示。 CF 树是一棵树,其中每个叶节点都包含一个子簇。 CF 树中的每个条目都包含一个指向子节点的指针和一个由子节点中的 CF 条目之和组成的 CF 条目。每个叶节点中存在最大条目数。这个最大数称为阈值。我们将更多地了解这个阈值是什么。
BIRCH 算法参数:
- 阈值:阈值是 CF 树的叶节点中的子簇可以容纳的最大数据点数。
- branching_factor :此参数指定每个节点(内部节点)中 CF 子集群的最大数量。
- n_clusters :整个 BIRCH 算法完成后要返回的簇数,即最终聚类步骤后的簇数。如果设置为 None,则不执行最后的聚类步骤并返回中间聚类。
BIRCH 在Python中的实现:
为了这个例子,我们将使用 scikit-learn 的make_blobs()
方法生成一个用于聚类的数据集。要了解有关 make_blobs() 的更多信息,可以参考以下链接:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html
代码:使用 600 个随机生成的样本创建 8 个集群,然后将结果绘制在散点图中。
# Import required libraries and modules
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import Birch
# Generating 600 samples using make_blobs
dataset, clusters = make_blobs(n_samples = 600, centers = 8, cluster_std = 0.75, random_state = 0)
# Creating the BIRCH clustering model
model = Birch(branching_factor = 50, n_clusters = None, threshold = 1.5)
# Fit the data (Training)
model.fit(dataset)
# Predict the same data
pred = model.predict(dataset)
# Creating a scatter plot
plt.scatter(dataset[:, 0], dataset[:, 1], c = pred, cmap = 'rainbow', alpha = 0.7, edgecolors = 'b')
plt.show()
输出图: