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