基于密度峰值的快速准确K-means聚类方法
立即解锁
发布时间: 2025-08-31 00:26:53 阅读量: 13 订阅数: 43 AIGC 


智能系统与数据驱动前沿
### 基于密度峰值的快速准确 K-means 聚类方法
在数据挖掘和机器学习领域,聚类分析是一项重要的任务。传统的 K-means 算法虽然简单高效,但存在一些局限性,如难以处理非球形聚类和对初始质心敏感等问题。为了解决这些问题,研究人员提出了许多改进的聚类算法,其中基于密度峰值的 K-means 算法(Density Peaks K-means,DPKM)是一种新颖且有效的方法。
#### 1. 相关背景和理论基础
##### 1.1 标准 K-means 的局限性
标准 K-means 算法主要适用于处理球形聚类,对于非球形聚类的处理效果不佳。它随机选择初始质心,这可能导致算法收敛到局部最优解,而不是全局最优解。
##### 1.2 随机交换(RS)算法
随机交换(RS)算法是一种改进的 K-means 算法,它通过多次迭代和随机交换质心的方式,试图找到全局最优解。具体步骤如下:
1. 随机初始化 K 个质心。
2. 进行多次 K-means 迭代,每次迭代后评估代价函数。
3. 如果新的质心配置降低了代价函数,则接受该配置;否则,恢复之前的质心和数据划分。
理论和实验表明,RS 算法能够找到全局最优解。此外,还有一种并行版本的 RS 算法,它通过增加每次交换迭代中的 K-means 迭代次数,并对最后检测到的解进行彻底的 K-means 迭代,提高了执行效率和解决方案的准确性。
##### 1.3 密度峰值聚类(Density Peaks Clustering,DP)
密度峰值聚类是一种更通用的聚类方法,它基于两个基本直观假设:
1. 质心的密度必须高于其相邻点的密度。
2. 质心与其他密度更高的点的距离必须相对较大。
DP 算法依赖于每个数据点的两个量:ρi(rho)和 δi(delta)。ρi 估计点的局部密度,δi 测量到密度更高的点的最小距离。此外,还有一个辅助量 γi = ρi * δi,用于帮助识别质心。质心通常具有较高的 rho 和 delta 值。
DP 算法的具体步骤如下:
1. 计算每个点的 rho 和 delta 值。
2. 绘制决策图,其中点以 delta 与 rho 绘制。具有高 rho 和 delta 值的点是质心候选点。
3. 确定质心后,通过递归传播大兄弟(具有更高密度的点)的标签来完成聚类。
不同的 DP 实现方法在文献中被提出。基本的 DP 方法假设一个截止核(距离)dc,即 D 维空间中围绕每个点的超球的半径。所有落在超球内的点都是邻居,并定义该点的局部密度。作为“经验法则”,DP 建议选择 dc 的值,使得点的邻域平均大小介于 1%N 和 2%N 之间。
Sieranoja 和 Franti 开发了一种基于 k 近邻(k-Nearest Neighbors,kNN)方法的快速搜索和发现密度峰值的方法。该方法首先假设一个邻域大小(质量)的 k 值,然后逐步构建 kNN 加权图,其中每个节点与其 k 近邻相连,每条边持有两个连接点的距离。从 kNN 图中推断出 rho 和 delta(以及 gamma)属性,最后按照标准的 DP 程序完成聚类。
#### 2. DPKM 算法介绍
DPKM 是一种改进的 K-means 算法,它在质心初始化阶段利用了密度峰值的概念。与其他利用密度概念的初始化方法(如 ROBIN 和 DK-means++)不同,DPKM 采用了基于 kNN 方法的改进版本,通过假设一个 k 值来系统地预测用于确定点密度的 dc 值。
##### 2.1 截止距离预测(Cutoff Prediction)
DPKM 算法的第一步是预测截止距离 dc。具体步骤如下:
1. 从数据集中随机抽取大小为 SS 的样本点。对于不是非常大的数据集,SS 可以等于 N。
2. 对于每个样本点 p,计算 p 到数据集中所有其他点的距离,并根据 kNN 方法保留前 k 个唯一的最低距离。
3. 计算 p 到 k 近邻的平均距离,将其定义为点 p 的局部截止距离 dc。
4. 对所有采样点的局部 dc 值按升序排序,并取中位数作为预测的 dc 值。
取中位数是一种稳健的方法,可以过滤掉异常值的影响。确定数据集的 dc 值的成本约为 O(SS * N + SS * log SS),其中主要成本接近 O(N^2),可以通过并行计算来平滑。
以下是 cutoff_prediction() 方法的伪代码:
```plaintext
// 随机抽取 SS 个点组成样本
sample = randomly select SS points from dataset
// 在样本数组上构建流
sStream = build stream on sample array
// 对样本点进行转换
sStream.map(s -> {
// 计算 s 到剩余点的所有距离
distances = compute distances between s and remaining points
// 保留前 k 个唯一的最低距离
dkNN = retain first distinct k distances in ranked way
// 计算 dkNN 的平均值
local_dc = average value in dkNN
return s with local_dc
})
// 对样本数组进行堆排序
sort sample array by heap-sort
// 提取中位数
median_dc = extract median from sorted sample array
```
在这个伪代码中,通过 Java 流的 map 操作对样本点进行转换,计算每个样本点的局部 dc 值。最后,对样本数组进行排序并提取中位数。通过设置 PARALLEL 参数,可以并行处理样本点,提高计算效率。
##### 2.2 密度计算(Density
0
0
复制全文
相关推荐










