并行与分布式系统中的并行K-中心点聚类:基于采样和局部搜索的并行PAM算法
题目描述:
给定一个包含n个对象的数据集,以及一个整数k(k ≤ n),K-中心点(K-medoids)聚类旨在从数据集中选择k个代表对象(称为中心点),并将每个对象分配到距离其最近的中心点所属的簇中,目标是使所有对象到其所属簇中心点的距离总和最小。PAM(Partitioning Around Medoids)是一种经典的精确算法,它通过交替执行“分配”和“交换”步骤来优化中心点选择。本题要求设计并行化的PAM算法,以加速大规模数据集的聚类过程。算法需在分布式环境下运行,处理数据分片,并协调多个计算节点并行执行局部搜索,同时保证结果与串行PAM一致。
解题过程:
-
理解PAM算法的串行流程
PAM分为两个阶段:
a. BUILD阶段:贪心选择初始k个中心点。依次选择能使当前距离总和减少最多的对象作为新中心点。
b. SWAP阶段:迭代优化。对每对(当前中心点i,非中心点j),计算用j替换i所能带来的距离总和变化(成本)。若存在负成本(即降低总距离),则执行成本最小的交换。重复直到无负成本出现。 -
并行化BUILD阶段
- 将数据集随机划分为p个分片,分配给p个处理器。
- 每个处理器在其分片内维护当前已选中心点集合C(初始为空),并计算分片内每个对象x作为候选中心点时,能带来的局部距离减少量(即分片内所有对象到x的距离减去到C中最近中心点的距离,但仅当x比现有中心点更近时)。
- 通过全局归约(如MPI_Allreduce)求和所有处理器上每个候选对象的局部减少量,选择全局减少量最大的对象加入C。
- 重复直到选出k个中心点。此步骤需同步,但候选评估可并行。
-
并行化SWAP阶段(关键难点)
串行SWAP需评估所有k×(n-k)对交换,计算每对交换的成本(总距离变化)。成本计算依赖于整个数据集,因为一个中心点的改变可能影响许多对象的分配。- 数据并行策略:每个处理器存储一个数据分片,并维护分片内每个对象到当前k个中心点的距离。
- 成本计算的并行分解:对于一对交换(i,j),其中i是中心点,j是非中心点,其成本Δ(i,j) = Σ_x δ(x),其中x遍历所有对象,δ(x)是对象x因交换引起的距离变化。δ(x)可分类计算:
- 若x当前属于中心点i(即i是x的最近中心点),则交换后x可能改属j或其他中心点c≠i。
- 若x当前属于其他中心点c≠i,则交换后x可能改属j(如果j比c更近)。
- 每个处理器可独立计算其分片内所有对象的δ(x)分片和,然后通过全局归约得到Δ(i,j)。
- 交换对的空间划分:将k×(n-k)对交换划分为若干块,分配给不同处理器。每个处理器并行计算所分配交换对的成本,找出本块内最小成本(即最大负改善)的交换。然后通过全局归约找到全局最小成本交换。若该成本为负,则执行交换,更新中心点集合,并广播新中心点集。每个处理器据此更新其分片内对象的距离信息。
-
距离信息的高效更新
执行交换(i,j)后,只有部分对象的最近中心点可能改变。为减少通信,每个处理器可只重新计算其分片内对象到新中心点j的距离,并与原最近中心点距离比较。若对象原属于i,则需比较j和其他所有中心点;若对象原属于其他中心点c,则只需比较c和j的距离。更新后可继续下一轮迭代。 -
收敛与终止
并行SWAP阶段迭代进行,每轮所有处理器协同找出全局最佳交换。当全局最小成本≥0时,算法收敛。由于并行计算可能导致处理器间负载不均衡(交换对成本计算复杂度不一),可采用动态任务调度:将交换对组织为任务池,处理器动态领取任务,直至所有交换对评估完毕。 -
算法复杂度与通信开销
并行PAM的计算复杂度从串行的O(k(n-k)²)降低为O(k(n-k)²/p),但每轮需进行全局归约和广播。通信开销主要集中在成本计算的全局归约(每次归约交换对成本)和中心点更新后的广播。优化时可考虑压缩通信数据,或使用异步归约重叠计算与通信。
这个并行PAM算法通过分解数据与交换对评估,实现了高效的分布式局部搜索,适用于大规模聚类问题,同时保持了与串行PAM相同的结果质量。