并行与分布式系统中的并行K-中心点聚类:基于并行化PAM(Partitioning Around Medoids)的优化算法
字数 2547 2025-12-18 15:36:16
并行与分布式系统中的并行K-中心点聚类:基于并行化PAM(Partitioning Around Medoids)的优化算法
题目描述
在并行与分布式系统中,我们需要高效地处理大规模数据集。K-中心点聚类(K-medoids)是一种经典的聚类算法,与K-means不同,它使用数据集中的实际点(中心点)作为聚类中心,从而对异常值更鲁棒。PAM(Partitioning Around Medoids)是解决K-中心点问题的经典算法,但其计算复杂度高,为O(k * (n-k)²),难以处理大规模数据。本题目要求:设计一个并行化的PAM算法,以加速大规模数据集上的K-中心点聚类过程。你需要考虑如何将计算任务(如距离计算、代价评估、中心点交换)分配到多个处理器或计算节点上,并处理并行计算中的数据依赖和通信开销,同时确保算法的正确性和收敛性。
解题过程
1. 理解PAM算法的基本步骤
PAM算法分为两个阶段:
- BUILD阶段:贪心地选择初始中心点。
- SWAP阶段:迭代地尝试用非中心点替换当前中心点,如果总代价降低,则执行替换,直到收敛。
核心概念:
- 中心点(Medoid):每个聚类中的一个实际数据点,作为该聚类的代表。
- 代价(Cost):数据点被分配到最近中心点的距离之和。总代价是所有数据点代价之和。
- 交换(Swap):尝试用非中心点替换某个中心点,计算新总代价,如果更低则接受交换。
2. 并行化设计思路
我们将并行化SWAP阶段,因为它是计算最密集的部分。主要思想:
- 并行计算每个候选交换的代价变化。
- 分布式存储数据,减少通信。
- 通过同步和归约操作找到最佳交换。
假设有 p 个处理器,数据点数为 n,中心点数为 k。
3. 数据划分
- 将数据点均匀划分到
p个处理器上,每个处理器持有n/p个数据点(局部数据)。 - 中心点集合(大小
k)被广播到所有处理器,因为每个处理器都需要用中心点计算距离。
4. 并行计算距离矩阵
- 每个处理器计算其局部数据点到所有
k个中心点的距离,得到一个局部距离矩阵(大小为(n/p) × k)。 - 这一步完全并行,无需通信。
5. 并行评估候选交换
在SWAP的每次迭代中,需要评估所有可能的交换:用每个非中心点(共 n-k 个)替换每个当前中心点(共 k 个),总共 k*(n-k) 个候选。
- 候选分配:将候选交换均匀分配到
p个处理器。例如,处理器i负责评估第i组候选交换。 - 局部代价计算:对于每个候选交换(用点
q替换中心点m),处理器需要计算总代价的变化ΔCost。- 关键观察:替换中心点
m为q只影响那些原来以m为最近中心点的点,以及那些现在以q为更近中心点的点。 - 为了高效计算,每个处理器维护其局部数据点的当前最近中心点及其距离。
- 对于每个候选交换,处理器可以独立计算其局部数据点上的代价变化,然后通过全局归约求和得到全局
ΔCost。
- 关键观察:替换中心点
6. 并行计算代价变化的优化方法
为了减少计算量,可以采用以下优化:
- 每个处理器预计算其局部数据点到所有中心点的距离,并记录最近中心点和次近中心点(及对应距离)。
- 当评估交换
(m, q)时:- 对于局部数据点
x:- 如果
x的最近中心点不是m,则x的新最近中心点要么是原最近中心点,要么是q(如果dist(x, q)更小)。代价变化为min(dist(x, 原最近中心点), dist(x, q)) - dist(x, 原最近中心点)。 - 如果
x的最近中心点是m,则x的新最近中心点是原次近中心点或q中更近的那个。代价变化为min(dist(x, 原次近中心点), dist(x, q)) - dist(x, m)。
- 如果
- 这样,计算每个点的代价变化是 O(1) 操作。
- 对于局部数据点
7. 全局归约与选择最佳交换
- 每个处理器计算其负责的每个候选交换的局部代价变化总和。
- 通过全局归约操作(如MPI_Allreduce),找出所有候选交换中代价降低最多的那个(即
ΔCost最小且为负值的交换)。 - 如果存在这样的交换,则执行交换:用点
q替换中心点m,更新中心点集合,并广播给所有处理器。 - 如果不存在代价降低的交换,算法收敛,结束。
8. 更新本地距离信息
- 执行交换后,每个处理器需要更新其局部数据点的最近中心点和距离。
- 由于只替换了一个中心点,大部分点的最近中心点可能不变。处理器只需重新计算其局部数据点到新中心点
q的距离,并与原最近距离比较,进行更新。 - 如果最近中心点变化,可能需要更新次近中心点(可以通过重新扫描到所有中心点的距离实现,或增量更新)。
9. 算法伪代码(高层次并行版本)
输入:数据点集 D(划分为 p 个部分,每个处理器存储局部数据 D_local),聚类数 k
输出:k 个中心点集合 M
1. 并行执行 BUILD 阶段(如:并行选择初始中心点,通过最大最小距离法)得到初始 M
2. 广播 M 到所有处理器
3. 每个处理器并行计算 D_local 中每个点到 M 中所有中心点的距离,记录最近中心点、次近中心点及对应距离
4. while 未收敛:
5. 每个处理器为其分配的一组候选交换 (m, q) 计算局部代价变化总和
6. 通过全局归约,找到全局最优交换 (m*, q*) 及其 ΔCost
7. if ΔCost < 0:
8. 更新 M: 用 q* 替换 m*
9. 广播新的 M
10. 每个处理器更新其局部数据点的最近/次近中心点信息(基于新 M)
11. else:
12. 收敛,跳出循环
13. 返回 M
10. 复杂度与优化考虑
- 时间复杂度:串行PAM的SWAP阶段为 O(k*(n-k)²)。并行化后,每个处理器评估 O(k*(n-k)/p) 个候选,每个候选计算需 O(n/p) 时间(因为要扫描局部数据点),故每轮迭代时间为 O(k*(n-k)n / p²)。通过使用最近/次近中心点优化,可降至 O(k(n-k)*n / p²) 但常数更低。
- 通信开销:每轮迭代需一次广播(新中心点)和一次全局归约(找最佳交换),通信量为 O(k + p) 量级,相对较小。
- 负载均衡:由于数据划分均匀,且候选交换平均分配,负载较均衡。
11. 扩展性考虑
- 对于极大
n和k,可进一步采用采样技术:在评估候选交换时,只使用数据的一个随机子样本来估计 ΔCost,以加速计算,但可能增加迭代次数。 - 异步并行版本:允许处理器异步更新中心点,但需处理一致性,可能引入近似。
总结
该并行PAM算法通过数据并行(划分数据点)和任务并行(划分候选交换)结合,将高计算量的代价评估分布到多个处理器。利用最近/次近中心点预处理减少计算量,通过全局归约同步最佳交换决策。算法在保持PAM准确性的同时,显著降低了计算时间,适用于大规模分布式聚类任务。