DPC和DPC-KNN算法

密度峰值聚类(Density Peaks Clustering, DPC)算法详细描述

DPC是2014年提出的一种无监督聚类算法 ,核心思想是通过识别"局部密度高且与更高密度点距离远"的密度峰值点作为聚类中心,再将剩余样本分配到最近的聚类中心所属类别,无需预设聚类数量。

一、核心思想

DPC基于两个关键观察,定义聚类中心的核心特征:

  1. 局部密度高:聚类中心周围应该有较多的样本(即局部密度高于大部分邻居);
  2. 与更高密度点距离远:聚类中心与其他密度更高的点(仅比自身密度高的点)之间的距离应该较大(避免被归为其他聚类的"边缘点")。

通过这两个特征,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步,无需迭代计算:

  1. 计算距离矩阵 :根据数据类型选择距离度量,生成所有样本间的 d i j d_{ij} dij;
  2. 计算局部密度 ρ i \rho_i ρi :选择核函数(通常用截断核),预设 d c d_c dc,计算每个样本的 ρ i \rho_i ρi;
  3. 计算相对距离 δ i \delta_i δi:对每个样本,找到密度更高的样本集合,计算最小距离(全局密度最高样本取最大距离);
  4. 识别聚类中心
    • 绘制 决策图(Decision Graph) :以 ρ i \rho_i ρi 为横轴、 δ i \delta_i δi 为纵轴,每个样本对应一个点;
    • 手动或自动筛选 γ i \gamma_i γi 显著高于其他样本的点(决策图中"孤立的高点"),这些点即为聚类中心;
  5. 分配剩余样本:对非聚类中心的样本,将其分配到"密度高于自身且距离最近的样本"所属的聚类(确保簇内样本的连续性)。

四、关键参数与调优

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",或通过多次实验观察决策图的清晰度(聚类中心是否明显)。

五、优缺点分析

优点

  1. 无需预设聚类数:通过决策图自动识别聚类中心,避免K-Means等算法"猜K值"的问题;
  2. 能处理非球形簇:不依赖"簇是凸集"的假设,可处理环形、条形等复杂形状的簇;
  3. 计算效率高 :时间复杂度为 O ( n 2 ) O(n^2) O(n2)( n n n 为样本数),无需迭代,适合中小样本( n < 1 0 4 n < 10^4 n<104);
  4. 可识别噪声 :密度极低且 δ i \delta_i δi 较大的样本( γ i \gamma_i γi 很小)可直接标记为噪声,无需额外处理。

缺点

  1. 对 d c d_c dc 敏感 : d c d_c dc 的微小变化可能导致 ρ i \rho_i ρi 计算结果大幅波动,影响聚类中心识别;
  2. 高维数据表现差:高维数据中"距离"的区分度下降(维度灾难),导致局部密度计算不准,聚类效果退化;
  3. 大样本效率低 : O ( n 2 ) O(n^2) O(n2) 复杂度在 n > 1 0 4 n > 10^4 n>104 时,距离矩阵存储和计算成本显著增加(需结合近似算法优化);
  4. 难处理密度差异大的簇 :若两个簇的局部密度差异悬殊,低密度簇的中心可能因 ρ 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的局限性主要源于:

  1. 局部密度 ρ i \rho_i ρi 依赖全局截断距离 d c d_c dc,而 d c d_c dc 难以适应数据的局部分布差异(如同一数据集内不同区域密度悬殊时, d c d_c dc 无法兼顾);
  2. 计算全局距离矩阵的时间复杂度为 O ( n 2 ) O(n^2) O(n2),大样本( n > 1 0 4 n > 10^4 n>104)场景下效率极低;
  3. 高维数据中"全局距离"的区分度下降(维度灾难),导致局部密度和相对距离计算失真。

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基础上优化,核心步骤如下:

  1. 计算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)。

  2. 计算局部密度 ρ i \rho_i ρi

    基于邻域 N i N_i Ni,选择计数型或距离加权型公式计算 ρ i \rho_i ρi(推荐加权型,更精准)。

  3. 计算相对距离 δ 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;若邻域内无更高密度样本,则在全局找密度更高的样本(仅针对低密度样本,减少计算量)。

  4. 识别聚类中心

    绘制决策图(横轴 ρ i \rho_i ρi,纵轴 δ i \delta_i δi),筛选 γ i \gamma_i γi 显著高于其他样本的点作为聚类中心(与DPC逻辑一致)。

  5. 分配剩余样本

    对非聚类中心样本,将其分配到"k近邻中密度最高且距离最近的样本"所属的聚类(确保局部连续性,避免跨簇分配)。

四、关键参数与调优

DPC-KNN的核心参数是近邻数k (替代原DPC的 d c d_c dc),调优逻辑如下:

  • k过小:邻域覆盖不足,局部密度计算片面,易误判聚类中心;
  • k过大:邻域包含过多远样本,局部结构被稀释,难以区分不同簇;
  • 调优方法 :通常取 k = 5 ∼ 20 k = 5 \sim 20 k=5∼20(根据样本量调整,大样本可适当增大k),或通过"肘部法"观察聚类效果(如轮廓系数最大时的k)。

五、优缺点分析

优点

  1. 参数更易调优 :用k(近邻数)替代全局 d c d_c dc,k的物理意义更直观("每个样本参考多少个邻居"),且对数据局部分布的适应性更强;
  2. 效率大幅提升 :避免计算全局距离矩阵,时间复杂度降至 O ( n k ) O(nk) O(nk)(k远小于n),可处理大样本( n > 1 0 5 n > 10^5 n>105);
  3. 高维数据适应性更好:KNN的局部邻域能缓解高维数据中"全局距离失效"问题,局部密度计算更可靠;
  4. 继承DPC的优势 :无需预设聚类数,可处理非球形簇,能识别噪声(低密度且 δ i \delta_i δi 大的样本)。

缺点

  1. 对k仍敏感 :不同k可能导致邻域结构差异,影响局部密度和聚类中心识别(但比 d c d_c dc 更稳定);
  2. 簇密度差异大时仍有挑战 :若两个簇的局部密度差异悬殊,低密度簇的中心可能因 ρ i \rho_i ρi 较小被误判为非中心;
  3. 依赖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的重要改进。

相关推荐
一匹电信狗3 小时前
【LeetCode_160】相交链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
Xxtaoaooo3 小时前
OCR文字识别前沿:PaddleOCR/DBNet++的端到端文本检测与识别
人工智能·ai·ocr·文本检测·dbnet++
taxunjishu3 小时前
DeviceNet 转 MODBUS TCP:倍福 CX 系列 PLC 与 MES 系统在 SMT 回流焊温度曲线监控的通讯配置案例
运维·人工智能·物联网·自动化·区块链
小烤箱3 小时前
自动驾驶工程师面试(定位、感知向)
人工智能·面试·自动驾驶
IT_陈寒3 小时前
《Redis性能翻倍的7个冷门技巧,90%开发者都不知道!》
前端·人工智能·后端
龙俊杰的读书笔记4 小时前
《小白学随机过程》第一章:随机过程——定义和形式 (附录1 探究随机变量)
人工智能·机器学习·概率论·随机过程和rl
长空任鸟飞_阿康4 小时前
在 Vue 3.5 中优雅地集成 wangEditor,并定制“AI 工具”下拉菜单(总结/润色/翻译)
前端·vue.js·人工智能
再卷也是菜4 小时前
C++篇(14)二叉树进阶算法题
c++·算法
滑水滑成滑头4 小时前
**发散创新:多智能体系统的探索与实践**随着人工智能技术的飞速发展,多智能体系统作为当今研究的热点领域,正受到越来越多关注
java·网络·人工智能·python