DPC和DPC-KNN算法
密度峰值聚类(Density Peaks Clustering, DPC)算法详细描述
DPC是2014年提出的一种无监督聚类算法,核心思想是通过识别“局部密度高且与更高密度点距离远”的密度峰值点作为聚类中心,再将剩余样本分配到最近的聚类中心所属类别,无需预设聚类数量。
一、核心思想
DPC基于两个关键观察,定义聚类中心的核心特征:
- 局部密度高:聚类中心周围应该有较多的样本(即局部密度高于大部分邻居);
- 与更高密度点距离远:聚类中心与其他密度更高的点(仅比自身密度高的点)之间的距离应该较大(避免被归为其他聚类的“边缘点”)。
通过这两个特征,DPC能自动区分“聚类中心”“簇内样本”和“噪声点”(密度极低且与聚类中心距离远的样本)。
二、关键定义与公式
1. 距离矩阵(Distance Matrix)
首先计算所有样本间的距离(如欧氏距离、曼哈顿距离,需根据数据类型选择),得到距离矩阵 dijd_{ij}dij(dijd_{ij}dij 表示样本 iii 与样本 jjj 的距离,dii=0d_{ii}=0dii=0)。
2. 局部密度(Local Density, ρ i \rho_i ρi)
衡量样本 iii 周围的样本密集程度,有两种计算方式:
- 截断核(Cut-off Kernel):更常用,需预设截断距离 dcd_cdc(核心参数,通常选择使每个样本平均有5%-20%的邻居落在 dcd_cdc 内)。
公式:ρi=∑j≠iχ(dij−dc)\rho_i = \sum_{j \neq i} \chi(d_{ij} - d_c)ρi=∑j=iχ(dij−dc),其中 χ(x)=1\chi(x) = 1χ(x)=1 若 x<0x < 0x<0(即 dij<dcd_{ij} < d_cdij<dc),否则 χ(x)=0\chi(x) = 0χ(x)=0。
含义:样本 iii 周围距离小于 dcd_cdc 的样本数量,直接反映局部“拥挤程度”。 - 高斯核(Gaussian Kernel):无需严格截断,适合对密度敏感的场景。
公式:ρi=∑j≠iexp(−(dij/dc)2)\rho_i = \sum_{j \neq i} \exp(-(d_{ij}/d_c)^2)ρi=∑j=iexp(−(dij/dc)2),距离越近的样本对 ρi\rho_iρi 的贡献越大。
3. 相对距离(Relative Distance, δ i \delta_i δi)
衡量样本 iii 与所有密度高于自身的样本之间的最小距离,仅用于判断“是否为聚类中心”:
- 若样本 iii 是全局密度最高的样本(无更高密度样本):δi=maxj(dij)\delta_i = \max_j(d_{ij})δi=maxj(dij)(取与所有样本的最大距离,确保其被识别为聚类中心);
- 若样本 iii 不是全局密度最高:δi=minj:ρj>ρidij\delta_i = \min_{j: \rho_j > \rho_i} d_{ij}δi=minj:ρj>ρidij(仅找密度比自身高的样本,取其中最小距离)。
4. 决策值(Decision Score, γ i \gamma_i γi)
综合 ρi\rho_iρi 和 δi\delta_iδi,量化样本 iii 作为聚类中心的可能性,γi\gamma_iγi 越大,越可能是聚类中心:
公式:γi=ρi×δi\gamma_i = \rho_i \times \delta_iγi=ρi×δi。
三、算法步骤(核心流程)
DPC流程清晰,可分为5步,无需迭代计算:
- 计算距离矩阵:根据数据类型选择距离度量,生成所有样本间的 dijd_{ij}dij;
- 计算局部密度 ρi\rho_iρi:选择核函数(通常用截断核),预设 dcd_cdc,计算每个样本的 ρi\rho_iρi;
- 计算相对距离 δi\delta_iδi:对每个样本,找到密度更高的样本集合,计算最小距离(全局密度最高样本取最大距离);
- 识别聚类中心:
- 绘制 决策图(Decision Graph):以 ρi\rho_iρi 为横轴、δi\delta_iδi 为纵轴,每个样本对应一个点;
- 手动或自动筛选 γi\gamma_iγi 显著高于其他样本的点(决策图中“孤立的高点”),这些点即为聚类中心;
- 分配剩余样本:对非聚类中心的样本,将其分配到“密度高于自身且距离最近的样本”所属的聚类(确保簇内样本的连续性)。
四、关键参数与调优
DPC的性能高度依赖 截断距离 dcd_cdc,调优逻辑如下:
- 过小:大部分样本的 ρi=0\rho_i=0ρi=0(周围无样本),无法形成有效聚类中心;
- 过大:所有样本的 ρi\rho_iρi 接近(全局密度均匀),难以区分聚类中心;
- 调优方法:通常通过“平均邻居数”控制,使 dcd_cdc 满足“每个样本平均有5%-20%的邻居距离小于 dcd_cdc”,或通过多次实验观察决策图的清晰度(聚类中心是否明显)。
五、优缺点分析
优点
- 无需预设聚类数:通过决策图自动识别聚类中心,避免K-Means等算法“猜K值”的问题;
- 能处理非球形簇:不依赖“簇是凸集”的假设,可处理环形、条形等复杂形状的簇;
- 计算效率高:时间复杂度为 O(n2)O(n^2)O(n2)(nnn 为样本数),无需迭代,适合中小样本(n<104n < 10^4n<104);
- 可识别噪声:密度极低且 δi\delta_iδi 较大的样本(γi\gamma_iγi 很小)可直接标记为噪声,无需额外处理。
缺点
- 对 dcd_cdc 敏感:dcd_cdc 的微小变化可能导致 ρi\rho_iρi 计算结果大幅波动,影响聚类中心识别;
- 高维数据表现差:高维数据中“距离”的区分度下降(维度灾难),导致局部密度计算不准,聚类效果退化;
- 大样本效率低:O(n2)O(n^2)O(n2) 复杂度在 n>104n > 10^4n>104 时,距离矩阵存储和计算成本显著增加(需结合近似算法优化);
- 难处理密度差异大的簇:若两个簇的局部密度差异悬殊,低密度簇的中心可能因 ρi\rho_iρi 小而被误判为噪声。
六、适用场景
- 数据规模:中小样本集(如语音情感特征片段、心理健康文本的小批量特征数据,匹配你的自杀风险预测研究中“局部样本分析”场景);
- 簇形状:非球形、非凸形的复杂簇(如语音数据中不同情绪类别的特征簇);
- 噪声容忍:需要自动过滤噪声的场景(如剔除语音数据中的无效片段)。
七、与其他聚类算法的核心区别
算法 | 核心逻辑 | 是否需预设聚类数 | 适合簇形状 | 时间复杂度 |
---|---|---|---|---|
DPC | 密度峰值点作为聚类中心 | 否 | 非球形 | O(n2)O(n^2)O(n2) |
K-Means | 最小化簇内平方和 | 是 | 球形 | O(nkt)O(nkt)O(nkt)(k=簇数,t=迭代次数) |
DBSCAN | 基于“核心点-边界点-噪声” | 否 | 非球形 | O(nlogn)O(n\log n)O(nlogn) |
DPC的核心优势是“无预设簇数+复杂簇处理”,但效率低于DBSCAN,高维数据表现不如基于降维的聚类(如先通过PCA降维再用DPC)。
DPC-KNN(基于K近邻的密度峰值聚类算法)
DPC-KNN算法是在密度峰值聚类(DPC) 基础上,结合k近邻(KNN) 思想提出的改进聚类算法。其核心目标是解决原DPC对全局截断距离 dcd_cdc 敏感、高维数据表现差、大样本计算效率低等问题,通过KNN的“局部邻域”特性优化局部密度和相对距离的计算,增强算法的适应性和稳定性。
一、核心改进动机
原DPC的局限性主要源于:
- 局部密度 ρi\rho_iρi 依赖全局截断距离 dcd_cdc,而 dcd_cdc 难以适应数据的局部分布差异(如同一数据集内不同区域密度悬殊时,dcd_cdc 无法兼顾);
- 计算全局距离矩阵的时间复杂度为 O(n2)O(n^2)O(n2),大样本(n>104n > 10^4n>104)场景下效率极低;
- 高维数据中“全局距离”的区分度下降(维度灾难),导致局部密度和相对距离计算失真。
KNN的优势在于:通过“每个样本的k个最近邻居”定义局部结构,不依赖全局参数,能更好捕捉数据的局部分布,且可通过KD树、球树等结构高效计算(时间复杂度约 O(nlogn)O(n\log n)O(nlogn))。因此,DPC-KNN通过KNN重构DPC的核心计算步骤,兼顾聚类效果与效率。
二、关键定义与改进
DPC-KNN保留DPC“密度峰值作为聚类中心”的核心逻辑,但对局部密度和相对距离的计算方式进行了根本性调整,用“k近邻邻域”替代原DPC的“全局截断距离邻域”。
1. k近邻邻域(KNN Neighborhood)
对每个样本 iii,先找到其k个最近的样本(通过欧氏距离、余弦距离等度量),构成局部邻域 Ni={j1,j2,...,jk}N_i = \{ j_1, j_2, ..., j_k \}Ni={j1,j2,...,jk},其中 j1j_1j1 是与 iii 距离最近的样本,jkj_kjk 是第k近的样本。
- 优势:邻域大小由k控制(而非全局 dcd_cdc),能自适应不同区域的局部密度(密集区域邻域距离小,稀疏区域邻域距离大)。
2. 局部密度(Local Density, ρ i \rho_i ρi)
基于k近邻邻域计算,更贴合局部数据分布,常用两种方式:
- 计数型:直接以k近邻内的样本数(即k)作为局部密度(适用于密度均匀的场景),但忽略距离差异。
公式:ρi=k\rho_i = kρi=k(简化版,强调邻域存在性)。 - 距离加权型:考虑样本与k近邻的距离,距离越近权重越大,更能反映局部“拥挤程度”。
公式:ρi=∑j∈Ni1dij\rho_i = \sum_{j \in N_i} \frac{1}{d_{ij}}ρi=∑j∈Nidij1 或 ρi=∑j∈Niexp(−dij2)\rho_i = \sum_{j \in N_i} \exp(-d_{ij}^2)ρi=∑j∈Niexp(−dij2)(距离越近,贡献越大)。
3. 相对距离(Relative Distance, δ i \delta_i δi)
原DPC中 δi\delta_iδi 依赖“全局高密度样本”,DPC-KNN改为基于“k近邻内的高密度样本”,减少全局搜索成本:
- 若样本 iii 是全局密度最高的样本:δi\delta_iδi 定义为与k近邻中最远样本的距离(或全局最远距离,确保其为聚类中心);
- 否则:δi=minj∈Ni,ρj>ρidij\delta_i = \min_{j \in N_i, \rho_j > \rho_i} d_{ij}δi=minj∈Ni,ρj>ρidij(仅在k近邻中找密度更高的样本,取最小距离)。
- 优势:避免全局遍历所有样本,计算效率从 O(n2)O(n^2)O(n2) 降至 O(nk)O(nk)O(nk)(k远小于n)。
4. 决策值( γ i \gamma_i γi)
与DPC一致,仍为局部密度与相对距离的乘积,用于衡量样本作为聚类中心的可能性:
γi=ρi×δi\gamma_i = \rho_i \times \delta_iγi=ρi×δi,γi\gamma_iγi 越大,越可能是聚类中心。
三、算法步骤
DPC-KNN的流程在DPC基础上优化,核心步骤如下:
-
计算k近邻邻域:
对每个样本 iii,用KNN算法找到其k个最近邻,构建邻域 NiN_iNi,并记录邻域内样本的距离 dijd_{ij}dij(j∈Nij \in N_ij∈Ni)。 -
计算局部密度 ρi\rho_iρi:
基于邻域 NiN_iNi,选择计数型或距离加权型公式计算 ρi\rho_iρi(推荐加权型,更精准)。 -
计算相对距离 δi\delta_iδi:
对每个样本 iii,在其k近邻 NiN_iNi 中筛选密度高于自身的样本(ρj>ρi\rho_j > \rho_iρj>ρi),取其中最小距离作为 δi\delta_iδi;若邻域内无更高密度样本,则在全局找密度更高的样本(仅针对低密度样本,减少计算量)。 -
识别聚类中心:
绘制决策图(横轴 ρi\rho_iρi,纵轴 δi\delta_iδi),筛选 γi\gamma_iγi 显著高于其他样本的点作为聚类中心(与DPC逻辑一致)。 -
分配剩余样本:
对非聚类中心样本,将其分配到“k近邻中密度最高且距离最近的样本”所属的聚类(确保局部连续性,避免跨簇分配)。
四、关键参数与调优
DPC-KNN的核心参数是近邻数k(替代原DPC的 dcd_cdc),调优逻辑如下:
- k过小:邻域覆盖不足,局部密度计算片面,易误判聚类中心;
- k过大:邻域包含过多远样本,局部结构被稀释,难以区分不同簇;
- 调优方法:通常取 k=5∼20k = 5 \sim 20k=5∼20(根据样本量调整,大样本可适当增大k),或通过“肘部法”观察聚类效果(如轮廓系数最大时的k)。
五、优缺点分析
优点
- 参数更易调优:用k(近邻数)替代全局 dcd_cdc,k的物理意义更直观(“每个样本参考多少个邻居”),且对数据局部分布的适应性更强;
- 效率大幅提升:避免计算全局距离矩阵,时间复杂度降至 O(nk)O(nk)O(nk)(k远小于n),可处理大样本(n>105n > 10^5n>105);
- 高维数据适应性更好:KNN的局部邻域能缓解高维数据中“全局距离失效”问题,局部密度计算更可靠;
- 继承DPC的优势:无需预设聚类数,可处理非球形簇,能识别噪声(低密度且 δi\delta_iδi 大的样本)。
缺点
- 对k仍敏感:不同k可能导致邻域结构差异,影响局部密度和聚类中心识别(但比 dcd_cdc 更稳定);
- 簇密度差异大时仍有挑战:若两个簇的局部密度差异悬殊,低密度簇的中心可能因 ρi\rho_iρi 较小被误判为非中心;
- 依赖KNN的距离度量:高维数据中若距离度量(如欧氏距离)失效,KNN邻域不准确,会传导至后续计算。
六、与原DPC的核心差异
对比维度 | DPC | DPC-KNN |
---|---|---|
邻域定义 | 全局截断距离 dcd_cdc 内的样本 | 每个样本的k个最近邻 |
局部密度计算 | 依赖全局距离矩阵 | 基于局部k近邻(加权或计数) |
时间复杂度 | O(n2)O(n^2)O(n2)(全局距离计算) | O(nk)O(nk)O(nk)(k为近邻数) |
参数敏感性 | 对 dcd_cdc 高度敏感 | 对k较敏感,但调优更简单 |
大样本/高维适配 | 差 | 较好(依赖KNN优化) |
七、适用场景
- 数据规模:中大型样本集(如用户行为数据、图像特征向量,n=104∼106n = 10^4 \sim 10^6n=104∼106);
- 数据维度:中高维数据(如文本TF-IDF特征、语音频谱特征,维度50~500);
- 簇分布:局部密度差异大但整体有明显聚类中心的场景(如用户分群中“活跃用户”与“低频用户”的聚类)。
综上,DPC-KNN通过KNN的局部邻域思想重构了DPC的核心计算,在保持聚类灵活性的同时,显著提升了效率和高维数据适应性,是对DPC的重要改进。