Birch#
- class sklearn.cluster.Birch(*, threshold=0.5, branching_factor=50, n_clusters=3, compute_labels=True, copy='deprecated')[源码]#
实现 BIRCH 聚类算法。
它是一种内存高效的在线学习算法,作为
MiniBatchKMeans
的替代方案提供。它构建了一个树形数据结构,聚类中心从叶节点中读取。这些可以是最终的聚类中心,也可以作为输入提供给其他聚类算法,例如AgglomerativeClustering
。在用户指南中了解更多信息。
版本 0.16 中新增。
- 参数:
- threshold浮点数, 默认值=0.5
通过合并新样本和最近的子簇获得的子簇半径应小于阈值。否则将启动一个新的子簇。将此值设置得非常低会促进分裂,反之亦然。
- branching_factor整数, 默认值=50
每个节点中 CF 子簇的最大数量。如果新样本进入导致子簇数量超过分支因子,则该节点将被分成两个节点,子簇在每个节点中重新分配。该节点的父子簇被移除,并添加两个新的子簇作为这两个分裂节点的父节点。
- n_clusters整数, sklearn.cluster 模型的实例或 None, 默认值=3
最终聚类步骤后的聚类数量,该步骤将叶节点中的子簇视为新样本。
None
: 不执行最终聚类步骤,子簇按原样返回。sklearn.cluster
估计器:如果提供了模型,则将子簇视为新样本来拟合模型,并将初始数据映射到最近子簇的标签。int
: 拟合的模型是AgglomerativeClustering
,其中n_clusters
设置为该整数值。
- compute_labels布尔值, 默认值=True
是否为每次拟合计算标签。
- copy布尔值, 默认值=True
是否复制给定数据。如果设置为 False,则初始数据将被覆盖。
自 1.6 版本弃用:
copy
在 1.6 版本中已弃用,并将在 1.8 版本中移除。由于估计器不对输入数据执行原地操作,因此它没有效果。
- 属性:
- root__CFNode
CFTree 的根节点。
- dummy_leaf__CFNode
指向所有叶节点的起始指针。
- subcluster_centers_ndarray
直接从叶节点读取的所有子簇的质心。
- subcluster_labels_ndarray
子簇质心在全局聚类后分配的标签。
- labels_形状为 (n_samples,) 的 ndarray
分配给输入数据的标签数组。如果使用 partial_fit 而不是 fit,则这些标签分配给最后一批数据。
- n_features_in_整数
在 fit 期间看到的特征数量。
版本 0.24 中新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X
的所有特征名称均为字符串时才定义。版本 1.0 中新增。
另请参阅
MiniBatchKMeans
使用小批量对中心位置进行增量更新的替代实现。
备注
树形数据结构由节点组成,每个节点包含多个子簇。节点中子簇的最大数量由分支因子决定。每个子簇维护一个线性总和、平方总和以及该子簇中的样本数量。此外,如果子簇不是叶节点的成员,则每个子簇也可以有一个节点作为其子节点。
对于进入根节点的新点,它会与距离最近的子簇合并,并更新该子簇的线性总和、平方总和以及样本数量。此过程递归进行,直到叶节点的属性被更新。
请参阅 比较 BIRCH 和 MiniBatchKMeans,了解与
MiniBatchKMeans
的比较。参考文献
Tian Zhang, Raghu Ramakrishnan, Maron Livny BIRCH: 大型数据库高效数据聚类方法。 https://www.cs.sfu.ca/CourseCentral/459/han/papers/zhang96.pdf
Roberto Perdisci JBirch - BIRCH 聚类算法的 Java 实现 https://code.google.com/archive/p/jbirch
示例
>>> 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 聚类算法与其他聚类算法的比较,请参阅 在玩具数据集上比较不同的聚类算法
- fit(X, y=None)[源码]#
为输入数据构建 CF 树。
- 参数:
- X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}
输入数据。
- y忽略
未使用,按惯例在此处是为了 API 一致性。
- 返回:
- 自身
已拟合的估计器。
- fit_predict(X, y=None, **kwargs)[源码]#
对
X
执行聚类并返回聚类标签。- 参数:
- X形状为 (n_samples, n_features) 的 array-like
输入数据。
- y忽略
未使用,按惯例在此处是为了 API 一致性。
- **kwargs字典
传递给
fit
的参数。版本 1.4 中新增。
- 返回:
- labels形状为 (n_samples,) 且数据类型为 np.int64 的 ndarray
聚类标签。
- fit_transform(X, y=None, **fit_params)[源码]#
拟合数据,然后进行转换。
使用可选参数
fit_params
将转换器拟合到X
和y
,并返回X
的转换版本。- 参数:
- X形状为 (n_samples, n_features) 的 array-like
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like, 默认值=None
目标值(无监督转换时为 None)。
- **fit_params字典
附加拟合参数。
- 返回:
- X_new形状为 (n_samples, n_features_new) 的 ndarray 数组
转换后的数组。
- get_feature_names_out(input_features=None)[源码]#
获取转换的输出特征名称。
输出特征名称将以小写类名称为前缀。例如,如果转换器输出 3 个特征,则输出特征名称为:
["class_name0", "class_name1", "class_name2"]
。- 参数:
- input_features字符串类型的 array-like 或 None, 默认值=None
仅用于验证特征名称与
fit
中看到的名称是否一致。
- 返回:
- feature_names_out字符串对象的 ndarray
转换后的特征名称。
- get_metadata_routing()[源码]#
获取此对象的元数据路由。
请查阅 用户指南 以了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
一个包含路由信息的
MetadataRequest
。
- get_params(deep=True)[源码]#
获取此估计器的参数。
- 参数:
- deep布尔值, 默认值=True
如果为 True,将返回此估计器及其包含的估计器子对象的参数。
- 返回:
- params字典
参数名称及其对应值。
- partial_fit(X=None, y=None)[源码]#
在线学习。防止从头开始重建 CFTree。
- 参数:
- X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}, 默认值=None
输入数据。如果未提供 X,则只执行全局聚类步骤。
- y忽略
未使用,按惯例在此处是为了 API 一致性。
- 返回:
- 自身
已拟合的估计器。
- predict(X)[源码]#
使用子簇的
centroids_
预测数据。避免计算 X 的行范数。
- 参数:
- X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}
输入数据。
- 返回:
- labels形状为 (n_samples,) 的 ndarray
已标记数据。
- set_output(*, transform=None)[源码]#
设置输出容器。
请参阅 引入 set_output API 以了解如何使用此 API 的示例。
- 参数:
- transform{“default”, “pandas”, “polars”}, 默认值=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置未更改
版本 1.4 中新增:添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。