Canopy

Canopy是一种用于数据预处理和初步聚类的快速算法。它通过创建粗略的簇(称为 canopy)来加速后续的聚类过程,使得大规模数据集的预处理更加高效。

Canopy的基本原理

基本概念

Canopy是一种层次聚类方法,用于快速生成初步的簇。它通过设定两个阈值(threshold1 和 threshold2)来确定哪些样本属于同一个 canopy。

算法步骤

  1. 初始化:选择一个初始样本作为第一个 canopy 的质心。
  2. 分配阶段:对于每个后续样本,计算其与当前 canopy 中所有质心的距离。如果该距离小于 threshold2,则将该样本分配到最近的 canopy 中。
  3. 更新阶段:如果某个样本被分配到当前 canopy,并且其与当前 canopy 的质心之间的距离大于 threshold1,则将该样本作为新的质心,并创建一个新的 canopy。

质心更新公式

重新计算每个 canopy 中所有样本的均值,将该均值作为新的质心。可以表示为:

其中, 是样本 是否被分配到第 个 canopy 的质心 ,1 表示是,0 表示否。

合并阶段

如果某个 canopy 的大小小于预设的最小点数(min_points),则将其合并到最近的 canopy 中。

Canopy计算过程的详细步骤

初始化

选择一个初始样本作为第一个 canopy 的质心。例如,我们可以随机选择一个样本

分配阶段

对于每个后续样本 ,计算其与当前 canopy 中所有质心的距离。如果该距离小于 threshold2,则将该样本分配到最近的 canopy 中。

假设我们已经有 个 canopy,每个 canopy 的质心为 。对于样本 ,计算其与每个 canopy 质心的距离:

如果 ,则将 分配到第 个 canopy 中。

更新阶段

如果某个样本被分配到当前 canopy,并且其与当前 canopy 的质心之间的距离大于 threshold1,则将该样本作为新的质心,并创建一个新的 canopy。

假设样本 被分配到第 个 canopy,并且 ,则将 作为新的质心,并创建一个新的 canopy

合并阶段

如果某个 canopy 的大小小于预设的最小点数(min_points),则将其合并到最近的 canopy 中。

假设 canopy 的大小为 ,并且 。我们需要找到最近的 canopy ,并将 合并到 中。

选择最近的 canopy 的质心 ,计算 中所有样本与 的距离:

中的所有样本分配到最近的 canopy ,并更新 的质心

重复上述步骤

重复上述步骤,直到所有样本都被分配到 canopy 中,并且所有的 canopy 的大小都大于或等于最小点数。

应用场景

Canopy算法常用于大规模数据集的聚类前处理。它可以帮助快速生成初步的簇,为后续的聚类算法(如DBSCAN或HDBSCAN)提供输入,从而提高聚类效率。